Лекарство для CuteFTP EGOiST/TSRh (egoist_tsrh@bk.ru) Хакер, номер #079, стр. 079-062-5 Отрубим наглый наг. Запустим Пексплорер, откроем в нем default.lng. Этот файл — не что иное, как обычная dll'ка с ресурсами, откуда программа грузит все нужные строки и диалоги, в том числе наг. Загрузили, жмем Ctrl+R, переходим в папочку Dialog, запускаем поиск Ctrl+F, вводим «Enter Serial Number» и, запустив поиск, выпадаем прямо в наг. Запоминаем номер диалога, а именно 396. Для дальнейшего использования его надо перевести в шестнадцатеричную систему счисления. Для этого мы воспользуемся встроенным в винду калькулятором: запускаем calc.exe, вбиваем число 396 и после нажатия F5 получаем результат: 018С. Теперь запустим Хью и откроем в нем cuteftp.exe. Переходим в режим дизассемблера: Enter два раза, затем F7 столько же раз — запустится поиск ассемблерного кода по маске, вводим «*018c». Находит что-то по адресу 004451f6, там вызывается MemoryAlloc (выделение куска памяти заданного размера). Явно что-то не то, ищем дальше. Пропускаем еще один левый адрес и попадаем на 00474161. [инициализация нага] push ebx push ebp push esi push edi mov esi, ecx push eax push 18Ch mov [esp+28h+var_10], esi call ??0CDialog@@QAE@IPAVCWnd@@@Z mov ecx, lpFileName lea ebx, [esi+6Ch] xor edi, edi mov [esp+20h+var_4], edi mov [ebx], ecx mov edx, lpFileName lea ebp, [esi+70h] Поднимемся к началу на 00474140 и переименуем функцию для наглядности. Ставим курсор на 00474140, жмем N и вводим новое название, например «TrialDialog_Init». Теперь посмотрим перекрестные ссылки этой функции (x-ref). Жми Crtl+X, выбирай первую строку и жмякай Ok. Если пролистать вверх, становится видно, что прога читает что-то из реестра. Встаем опять на начало уже этой функции и смотрим x-ref. Перекрестный вызов всего один, на него и переходим, чуть выше видно странное сравнение cmp eax, 1526h. Если тут побегать по коду, то в принципе, понятно, откуда взялось это число. Дело в том, что прога, проверяя свою зареганность, если проверка не увенчалась успехом, посылает себе сообщение WM_COMMAND с wParam, равным 1526, после чего вылетает наг. Сейчас мы локализуем место, где это происходит. Опять лезем в Хью и также ищем, только уже по маске «*1526». Нужное место как раз там, где вызывается PostMessageA: [а не показать ли юзеру наг?] push 0 ; lParam push 1526h ; wParam push WM_COMMAND ; Msg push ecx ; hWnd call ds:PostMessageA Ползем вверх в Иде, попутно поглядывая на код. На 0046bd74 вызывается функция проверки серийника, которая обнаружилась в дебаггере. Лезем в Хью, переходим на 0046bc95 (F5 и надо сначала ввести точку, а потом адрес, так как это виртуальный адрес), надо поменять je на jmp, жмем F3, F2 — переход в режим ассемблирования, меняем je на jmp, Enter. Теперь, поскольку инструкция стала на один байт короче, нужно куда-то деть этот байт (в принципе, дописывать дальше nop необязательно, так как он все равно не выполнится; это делается только для читабельности), пишем nop — это «пустая» инструкция, которая не делает ничего. Закрываем ESC, сохраняем изменения, нажав F9, выходим и пытаемся запустить прогу. Ура, все сработало — нага больше нет :). От одной навязчивой гадости избавились, теперь возьмемся за красивости :). |