Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #79, ИЮЛЬ 2005 г.

Лекарство для CuteFTP

EGOiST/TSRh (egoist_tsrh@bk.ru)

Хакер, номер #079, стр. 079-062-6


Прога уже не будет лезть в инет и проверять серийник, но все-таки зайди в Help -> About. Разве тебя устроит какой-то там Temporary User? Ты потратил кучу времени, и об этом никто не узнает? Не бойся, сейчас все исправим :). Обычно (опять же можно сказать, что это распространенная ошибка) кодеры называют ключи в реестре стандартными именами, этот случай тоже не исключение. Откроем прогу в Хью, выбираем поиск в текстовом режиме и ищем UserName. Первое, что находится — это RegUserName (не правда ли, оригинально?). Переходим в hex режим, нажав Enter один раз. Ставим курсор на начало строки и запускаем поиск перекрестных ссылок. Оказывается, здесь идет запись имени в реестр — это видно по вызову Апи RegSetValueA. Жмем Shift+F7, а здесь как раз то, что надо. По x-ref видно, что вызывается функция OnInitDialog, которая, скорее всего, создает about-диалог (это можно явно проверить в дебаггере, поставив туда бряк). Если заглянуть в функцию, которая чуть выше вызывается на 004839b7, выясняется, что там осуществляется подключение к уже знакомому серверу в инете.

[а где онлайн-чек?]

0046С160:

xor eax, eax

nop

nop

nop

nop

nop

nop

nop

nop

test al, al

jmp 0046C56F

0046C171:

nop

Xor eax, eax по адресу 0046b7a2 нужно поменять на inc eax, nop, чтобы всегда возвращалась единица. Теперь осталось узнать, откуда именно в реестре читается имя. Запускаем Ольку, загружаем файл (File -> Open). Ставим бряк на 0046b7a2, пускаем прогу. Теперь вызывается about-диалог, срабатывает наш бряк, и выполнение программы останавливается. Затем выполняем d ecx: «.DEFAULT\Software\GlobalSCAPE\CuteFTP Home». Здесь 0x80000003 означает, что ключ находится в HKEY_USERS. Теперь создаем reg.reg-файл такого содержания:

[люби себя и плюй]

REGEDIT4

[HKEY_USERS\.DEFAULT\Software\GlobalSCAPE\CuteFTP Home]

"RegUserName"="Здесь твой ник"

Теперь, когда ты выполнил этот файл, информация в реестре обновится и программа будет показывать в about'е твой ник.

[патч "на память"]

Патчи обычно пишутся на ассемблере или генерируются патч-генерилками, для этого всего-навсего нужны два файла: оригинальный и пропатченый. Я примерно опишу здесь, как пишутся патчи. Скомпилированный ехе'шник при этом будет весить всего 2,5 Кб.

Будем писать в Masm32, а для тех, кто не любит продукты Мелкомягких, советую прибегнуть к помощи Fasm. Для дальнейшей автоматизации, чтобы не переписывать код для каждой новой проги, а только поменять данные, надо придумать некую структуру данных. Далеко за учебниками ходить не надо: не так уж это и трудно. Для структуры нам нужно: количество оффсетов (адреса, по которым будут патчиться байты), сами оффсеты, imagebase ехе'шника (адрес, по которому файл грузится в память) и, конечно, оригинальные и измененные байты. Структура будет выглядеть так:

Назад на стр. 079-062-5  Содержание  Вперед на стр. 079-062-7