Пример взлома: SourceFormatX Ara (ara@clteam.net) Спецвыпуск: Хакер, номер #057, стр. 057-052-2 Распаковка При помощи PeiD определим, чем запакована программа. PEiD говорит, что это "PECompact 1.68 - 1.84->Jeremy Collake". Что ж, поверим. Загружаем программу в отладчик, вызвав плагин CommandLine клавишами <Alt>+<F1> или написав в командной строке команду hr esp-04 (установка hardware-прерывания), и пару раз нажимаем <F9> (Run). Остановимся прямиком на ОЕР (адрес - 00573258). Теперь можно снять дамп. Я воспользуюсь OllyDump, а ты - любым привычным тебе дампером - LordPE, PETools и т.п. Для восстановления таблицы импорта лучше всего подойдет ImpREC. Выбираем нашу программу в списке процессов, выставляем найденное ОЕР (573258-400000=173258), жмем GetImports. ImpREC определит все функции, поэтому кликаем Fix Dump и находим полученный ранее дамп. Все, программа распакована. Проверим правильность наших действий, запустив ее. Сразу видим сообщение, что программа заражена вирусом или модифицирована. Однако несколько минут назад никакого вируса не было - наша система регулярно проверяется антивирусными средствами. Поэтому логично предположить, что таким образом программа проверяет себя на распакованность, тем самым сопротивляясь взлому. Что делать? Далее будем приводить программу в нормальный вид, устранив всяческие проверки и получив корректно работающий экземпляр. Устранение защиты от взлома Запускаем программу в отладчике (клавиша <F9>), и она благополучно закрывается. Причем вместе с отладчиком и безо всяких сообщений. Вывод тут один - имеет место проверка на наличие отладчика, что может осуществляться множеством разных способов. Начнем искать самые популярные: поиск окна по заданному классу с помощью FindWindows и получение хэндла процесса OpenProcess'ом. Ставим точки останова на эти функции: bp FindWindow bp OpenProcessA Запускаем программулину, и нам попадется такой код: kan1:00556144 push eax kan1:00556145 call FindWindowA ; поиск окна kan1:0055614A test eax, eax kan1:0055614C jz short loc_556171 ; переход, если не найдено kan1:0055614E lea edx, [ebp+dwProcessId] kan1:00556151 push edx kan1:00556152 push eax ; hWnd kan1:00556153 call GetWindowThreadProcessId kan1:00556158 mov eax, [ebp+dwProcessId] kan1:0055615B push eax ; dwProcessId kan1:0055615C push 0 ; bInheritHandle kan1:0055615E push 1 ; dwDesiredAccess kan1:00556160 call OpenProcess kan1:00556165 test eax, eax kan1:00556167 jz short loc_556171 kan1:00556169 push 0 ; uExitCode kan1:0055616B push eax ; hProcess kan1:0055616C call TerminateProcess Вырезку кода я снабдил комментариями. Хотя и так понятно, что программа ищет окно с классом OLLYDBG и, если такое имеется, просто завершает процесс, то есть закрывает отладчик. Обойти это довольно просто: поменять условный переход по адресу 0055614C на безусловный (JMP), что можно сделать прямо в отладчике - двойной щелчок по нужной команде, правка команды и <ENTER>. Теперь можно сохранить сделанные изменения: выделив их, вызвать контекстное меню и выбрать пункт Copy to executable-Selection. Затем там же - Save to file. |