Надпись "Registered to" это, конечно, хорошо, только не понятно - на кого именно программа зарегистрирована. Первое, что приходит на ум - найти этот "Registered to" в программе (он там находится по смещению 50DBA4h) и заменить его на "hacked by KPNC", однако более длинный ник вместить уже не удастся, поскольку предельно допустимая длина строки жестко ограничена сверху. Лучше найдем тот код, который эту строку выводит!
Запускаем Kerberos, загружаем winrar.exe, открываем "About", закрываем winrar.exe и лезем в протокол, в конце которого содержится строка, DialogBoxParamA(400000, 496005: "ABOUTRARDLG", 001200AA, 00444618, 00000000), вызываемая по адресу 441D1Ch. Ага, это наш About Rar Dialog и есть! Возвращаемся в ИДУ и переходим по указанному адресу.
00441D01 push offset sub_444618 ; lpDialogFunc
00441D06 push dword_4B161C
00441D0C push offset aAboutrardlg
00441D11 push hLibModule
00441D17 call DialogBoxParamA
Листинг 4.Код, создающий About-диалог.
Функция sub_444618, как и подсказывает IDA, представляет собой диалоговую процедуру, ответственную за вывод диалога. Заглянем, что там? Ой-ой-ой, сколько всяких вызовов! Это же крышей поехать можно, пока разберешься, что к чему! Мы видим множество вызовов SetDlgItemTextA. Какой из них наш? Чтобы ответить на этот вопрос, требуется выяснить идентификатор соответствующего элемента управления.
Запускаем Microsoft Visual Studio (или любой другой редактор ресурсов), говорим "open file", в "типе файлов" выбираем "все файлы", а в "open as" - "resources" (если этого не сделать, файл будет открыт как двоичный, что совсем не входит в наши планы). В дереве ресурсов находим ветку "Dialogs", а в ней - "ABOUTRARDLG". Щелкнем по нему мышью. Дважды. Или нажмем ENTER. Запустится редактор ресурсов. Находим строку "40 days trial copy" на месте которой в зарегистрированной версии выводится "Registered to" и, вызвав контекстное меню, определяем ее ID, равным в данном случае 102 (или 66 в hex-представлении).
Рисунок 9.Определение идентификатора поля вывода в Microsoft Visual Studio.
Просматривая дизассемблерный листинг, ищем такую функцию SetDlgItemTextA, чьим аргументом будет идентификатор 66h и находим ее, в конечном счете, по адресу 4447ECh:
004447E6 call sub_4113DC
004447EB push eax ; lpString
004447EC push 66h ; nIDDlgItem
004447EE push [ebp+hDlg]
004447F1 call SetDlgItemTextA
Листинг 5.Код, выводящий строку "Registered to".
Функция sub_4113DC возвращает указатель на выводимую строку, которая тут же передается SetDlgItemTextA. Исследовать саму sub_4113DC мы не будем. Имя зарегистрированного пользователя берется из ключевого файла, над которым можно просидеть всю оставшуюся жизнь. Лучше внедрить свою строку в исполняемый файл и подменить указатель. Внедряться мы будем в секцию данных, в хвосте которой практически всегда имеется свободное место. Размещать выводимую строку в секции кода нельзя, поскольку RAR требует, чтобы она была доступа на запись.
Рисунок 10.Каталог секций.
Открываем hiew, однократным нажатием на <ENTER> переходим в hex-режим, давим <F8> для отображения заголовка файла и вызываем таблицу объектов (object table) клавишей <F6>. За секций .data расположена секция .tls. Подгоняем сюда курсор и нажимаем на ENTER, а затем перемещаемся на несколько строк вверх, следя за тем, чтобы не залезть в значимые данные, которые начинаются там, где кончается цепочка нулей. В нашем случае это будет адрес 49D7B0h (хотя при желании также можно выбрать 49D7AEh, 49D7AFh и т.д). Нажимаем <F3> для перехода в режим редактирования и записываем "registered version hacked by nezumi" (nezumi - это мыщъх по-японски).
Рисунок 11.Создание подложной строки с именем зарегистрированного пользователя.
Теперь переходим по адресу 4447E6h, возвращаясь к нашей диалоговой процедуре (см. листинг 5) и заменяем call sub_4113DC (E8 F1 CB FC FF) на mov eax, 49D7B0 (B8 B0 D7 49 00), где 49D7B0h - адрес хакнутой строки. Сохраняем изменения в файле и...
Рисунок 12.Полностью хакнутая версия, зарегистрированная на мыщъх'а.
Это работает! Теперь хакнутая версия ничем не отличается от легально зарегистрированной! Разумеется, это еще не означает, что теперь RAR'ом можно пользоваться и ничего за него не платить (законов ведь никто не отменял!), поэтому сразу же после экспериментов взломанный файл должен быть удален с жесткого диска.