...
...

Патчим ICQ 2003a build 3799

Патчим ICQ 2003a build 3799

Начнем с того, что данное произведение никоим образом не претендует на абсолютную полноту и правильность, а посему — все, что, по вашему мнению, не является правильным, вы делаете тем способом, который нравится именно вам (ну, можете и автору письмецо черкануть... если замечание стоящее — исправим). По большому счету, эта статья не является самостоятельным произведением, это скорее собирательный обзор, так что сразу хочу поблагодарить тех, чья информация была использована.

Для чего все это? "Это" предназначено для всех тех, кому интересен описываемый процесс, для тех, кто желает все делать сам и не пользоваться патчами от сторонних деятелей (вроде меня), а также просто для общего развития.
ВООРУЖАЕМСЯ. Что потребуется в работе? Я перечислю те программы, которые использую лично я — вы можете юзать те продукты, которые вам больше понравятся по тем либо иным соображениям. Особенности использования софта и приемы работы целью статьи не были, так что, если у вас недостаточно навыков — учитесь сами, благо информации на эту тему — масса.

Я не пользуюсь исключительно HEX — редакторами, а большую часть работы привык делать с комфортом, поэтому прога №1 — это Restorator (http://www.bome.com/Restorator). Эту штукенцию применяем для обработки и придания нужного вида диалоговым окнам. Как правило, в паре с "Ресторатором" я использую Resource Hacker (http://rpi.net.au/~ajohnson/resourcehacker) — это на самом деле необязательно, просто удобнее часть операций делать то в одном, то в другом редакторе.
Теперь добрались и до HEX (т.е. шестнадцатеричных) редакторов. Ничего не имею против разномастной армии платных программных продуктов, из которых мне, кстати, больше всего понравился WinHEX (http://www.winhex.com/) (большое количество функций, а отсюда и универсальность), однако сам использую небольшой бесплатный редактор отечественного производства HEX Edit (ищем сами, ибо информацией о домашней страничке сего продукта я не располагаю).

ПРИСТУПАЕМ. Первым делом начнем с уничтожения баннеров. Препарирование сабжа рассмотрим на примере ICQ 2003a pro #3799, т.к. на момент написания этот билд был самым новым, и следовательно — вызывающим самое большое количество вопросов у публики. Не будем изобретать велосипед и обзор построим в следующей манере (надеюсь, этим я ничьи права не ущемлю).
Как только происходит первый запуск ICQ, так сразу и возникает желание убить ЭТО (я имею в виду баннер), а также заодно — и строку "Гугля" (хотя некоторым, надо отдать должное, эта фиговинка понравилась). Тут-то нам и пригодится HEX: находим строку:


и делаем, чтобы стало так:


Получаем Асю следующего вида (без баннера и "Гугля"):
А вот так разбираемся с баннерами в окне сообщений. Ищем строку:
И вносим вот такие изменения:
Больше баннеры нас не беспокоят.
Теперь сделаем так, чтобы в ICQ стало возможным вводить многострочный пароль. Те, кто не знает, что это такое и с чем его едят, не встревают и читают молча.

Запускаем Restorator и с его помощью открываем все тот же файл ICQ.EXE. Наша цель — найти окна диалога, в которых мы вводим пароль при запуске ICQ. А также — при удалении UIN с ЛОКАЛЬНОГО компьютера (а что, разве "анрег" уже заработал?!).

Нет ничего проще: первое окно числится в списке под номером 1007, второе — под номером 2070 . Находим строку: EDITTEXT 1353, 49, 54, 128, 13, ES_PASSWORD | ES_AUTOHSCROLL (цифры, выделенные курсивом, в окнах отличаются и приведены только для примера! Я изменил немного циферки, чтобы окошко стало чуть более компактным — мне так кажется немного красивее оригинала. Основная мишень — то, что выделено жирным). Меняем текст на вот такой: EDITTEXT 1159, 66, 46, 105, 12, ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN .
Единственное замечание: теперь все символы пароля при вводе будут ВИДИМЫМИ. Увы — такова жизнь.

Альтернативой данному способу может служить использование маленькой утилитки под названием 2String (http://hitu.ussr.to/), с которой, я думаю, вы сами разберетесь. При ее использовании необходимость проделывания фокусов с диалоговыми окнами, которые были описаны в последнем пункте, отпадает.
Плавно подобрались к разбору второго элемента пропатчивания, а именно ICQifDg.DLL. Эта библиотека содержит в себе большое количество различных диалогов, которые мы намерены разнести в пух и прах. Для чего будем добиваться возможности ввода многострочных Name, Last Name, NickName и прочего multiline-фанатизма, заодно сделаем, чтобы можно было указывать в деталях вместо мыла любую абракадабру и ввод возраста вплоть до 255 лет (сам не знаю — для чего это).
Снова Restorator, только теперь открываем ICQifDg.dll и прямиком направляемся в раздел с диалоговыми окнами. Все происходит в точности как в ICQ.exe. Все НУЖНЫЕ вам окна ввода текста корректируются следующим образом:

Строка ES_AUTOHSCROLL заменяется на ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN . Поля для ввода деталей приобретают вот такой вид. А вот номера диалогов, в которые придется влезть со скальпелем: 101, 8504, 8505, 8507, 8545, 8547.

Разумеется, ICQ, как правило, начнет морочить голову устрашающими сообщениями, после того как вы попытаетесь ввести вместо e-mail что-то вовсе на мыло непохожее, например:

Ерунда! Это вовсе не так страшно! Нам снова понадобится HEX-редактор.
Ищем в ICQIfDg.DLL строку и приводим ее к виду:


То же самое проделываем со строкой:

И приводим ее к виду:


Это все. Больше никаких Not a valid! Теперь сделаем самое интересное — постараемся вернуть ICQ возможность показывать IP-адрес пользователей из контакт-листа, как это было в версиях до 99b включительно.
Процедура:
1. Restorator'ом (или даже Resource Hacker'ом, т.к. в нем это, на мой взгляд, делать удобнее) открываем ICqIfDg.DLL.
2. Если используем Restorator, то ищем строки вида: EDITTEXT 1380, 214, 11, 60, 14, ES_CENTER | ES_MULTILINE | ES_READONLY | NOT WS_VISIBLE | NOT WS_TABSTOP и LTEXT "Current / Last IP:", 2035, 142, 13, 71, 8, NOT WS_VISIBLE и удаляем то, что выделено жирным шрифтом.
3. Сохраняемся и закрываем Restorator.
4. Открываем ICqIfDg.DLL в HEX-редакторе и ищем строки:

Корректируем их, чтобы получилось следующее:

А вот для того, чтобы получить весьма сомнительную радость от возможности ввода в деталях возраста вплоть до 255 лет включительно, нужно проделать следующее.

Открываем Restoratorом диалог 8504 в ICqIfDg.DLL и ищем следующие строки: EDITTEXT 1384, 140, 31, 26, 12, ES_CENTER | ES_READONLY | ES_NUMBER | WS_DISABLED и EDITTEXT 1219, 164, 65, 25, 12, ES_CENTER | ES_READONLY | ES_NUMBER | NOT WS_TABSTOP. То, что выделено жирным шрифтом, удаляем! После этого можно будет вручную ввести в полях для ввода возраста то число, которое вам нравится. Главное, чтобы оно не выходило за пределы 250-летнего возраста (или 1753 г.р.). ICQ, скорее всего, такой расклад не устроит, и она выдаст возмущенный вопль вида:

Но это не страшно — инфа должна сохраниться, не пугайтесь — просто мирабы не могут поверить в то, что такая продолжительность жизни возможна.
По последним (непроверенным) данным, такой древний возраст блокируется на сервере мирабов. Иначе говоря — данные в инфо не сохраняются. Это уж, кому нужно, проверяйте сами...
В библиотечке ICQMcDgs.DLL нам понадобится изменить совсем немного. Вновь меняем ES_AUTOHSCROLL на ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN в диалогах, перечисленных ниже: 1001, 8545, 8547.

Это, так сказать, вспомогательные окна: подтверждение пароля и изменение e-mail в деталях пользователя. Лучше разобраться с ними сразу, чтобы потом не было мучительно больно. Да, чуть не упустил еще один момент: в диалоге 1001 лучше не удаляйте параметр ES_PASSWORD . Теперь все.

Аналогично обстоят дела и с библиотекой ICQReg.dll. В этой библиотеке нас интересуют два диалоговых окна: 8529 и 8656. Диалог 8529 — исправляем пресловутую строку ES_AUTOHSCROLL на ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | ES_PASSWORD. Это даст возможность регистрировать ICQ с мультилайн-паролем. Речь идет о уже имеющемся у вас UIN. В диалоге 8556 — аналогично предыдущему пункту. Только на этот раз мультилайн-пароль добавляется при регистрации нового UIN в системе ICQ. Заодно можно подкорректировать окна для ввода многострочных Name, LastName, NickName (вдруг пригодится).
Осталось разобраться с возможностью поиска UIN начиная с 1 и поиска по любому e-mail. Оперируем библиотекой ICQSearc.DLL. Рассказываю коротко, т.к. операции все однотипные и ранее уже рассматривались. Изменяются окна, отмеченные синим ярлычком: 2012, 2030, 2067. (ES_AUTOHSCROLL меняем на ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN во всех окнах ввода текста, которые вам нужны, т.е.: Ник-Имя-Фамилия-Мыло). Получаем возможность задать поиск по многострочному имени, фамилии, нику, e-mail. Чтобы ICQ не тявкала на нас сообщениями об ошибке, открываем все ту же ICQSearc.dll в HEX-редакторе и изменяем строчку:

на:

Точно так же поступим и со следующими строчками (рис.16-17 и рис.18-19 соответственно):

И

Ася больше не имеет ничего против бредовых диапазонов и мыл, такие вот дела.
Теперь небольшая отсебятинка.

Краткое введение в "косметологию"
Попробуем немного приукрасить нашу Асю. Небольшой экскурс по внутренностям. Что чаще всего спрашивают? Вот это: "Как сменить картинку при запуске?", "Как добавить свое имя в строчке рядом с верхними кнопками?" и "Как добавить свою картинку в окно Help -> About?" Приступим.
1. Картинка при запуске ICQ. Эта прелесть находится в файле ICQMcDgs.dll, номер битмапа 1061. Бегущая строчка "Loading" располагается в этой же библиотеке ICQMcDgs.dll, но в битмапе 1062 в виде набора последовательных кадров.

2. Надпись "ICQ 2003a" располагается в файле ICQ.exe в битмапе с номером 2226. Можете вставить вместо нее все, что вам понравится. Например, ваш логотип.

3. Картинка в About — опять ICQ.exe, но на этот раз номер битмапа 2034. Таким образом можно поменять практически все изображения в ICQ. Единственное замечание: старайтесь выдерживать размеры оригинальных картинок. Ничего страшного при небольших отклонениях от оригинала не произойдет, но, как мне кажется, нужно учитывать чисто эстетический момент. Лично мне, например, неприятно, когда у меня перед лицом находится надпись, часть которой скрыта за пределами виндусового окна.

Теперь, когда вся (у меня, по крайней мере) ручная работа подошла к финалу, неплохо было бы избавить себя от такой мороки в дальнейшем (а вдруг понадобится переустановить Асю!). Выход есть: сейчас развелось огромное количество программ-патчмейкеров.
Лично я использую ClickTeam Patchmaker (http://www.clickteam.com). В результате сравнения файлов до пропатчивания и после оного получаем небольшой *.exe-файлик. При его помощи вся суета, которой была посвящена эта статья, производится за считанные секунды, но это уже выходит за рамки статьи...

Занимайтесь этим сами или ждите, когда начнется очередной загон по написанию мануалов!
На данный момент это все, что касается пропатчивания. Все дополнения и сообщения о замеченных ошибках — приветствуются. Изложение несколько сумбурное, но это пока что первый "рабочий" вариант статьи (хотя... возможно, что и последний).
И не забудьте — если вдруг потребуется восстановить Асю в том виде, в каком она была первоначально, нужно всего-навсего все сделанные нами изменения проделать в обратном порядке (это на тот случай, если дистрибутив недоступен, а бэкап сделать сразу не додумались).
Возможно, в скором времени будет готов черновик по особенностям национальной правки реестра в части, касающейся ICQ.

Денис "Denver" Мигачев, Юрий "Wattman", http://asechka.ru



© Компьютерная газета

полезные ссылки
Аренда ноутбуков