жестокая пенетрация hiew’ом GPCH (ADMIN@DOTFIX.NET) Спецвыпуск: Хакер, номер #066, стр. 066-072-5 .00408228: 6A00 push 0 .0040822A: E841C4FFFF call MessageBoxA ;user32 --?5 .0040822F: 68047F4000 push 000407F04 --?6 По адресу 40822A красуется вызов нагскрина :). Лучший выход — пропатчить его, для чего устанавливаешь курсор на 40821C и жмешь <F3>, чтобы перейти в режим правки. Затем <Tab> для вызова окна ассемблера. Там пишешь «jmps .40822F» (без кавычек). Команда jmps, в отличие от jmp, сгенерит short jmp, занимающий всего два байта. Точка перед адресом ставится потому, что это VA, а не Offset. Запустим для проверки. Ура! Нага как не бывало. И тут начинаются разборки с проверкой пароля. Я ввел имя «GPcH», пароль — «12345». При нажатии на кнопку Generate видим сообщение «BaD BoY». Снова переходим в HIEW. В режиме дизассемблера <F8>, затем <F6> для вывода секций. Выбираешь первую секцию. Как только переведешься в ее начало, начинай поиск: <F7> и ввести «BaD BoY». Вот нашел, и тут же <F6>, чтобы HIEW перешел по адресу, откуда идет обращение к этой строке. В результате видим содержимое Листинга 5. Листинг 5 .00408067: 6848814000 push 000408148 ;'Prolixe KeygenM .0040806C: 53 push ebx .0040806D: E81EC6FFFF call SetWindowTextA ;user32 --?2 .00408072: 6A00 push 0 .00408074: 6874814000 push 000408174 ;'Winner' .00408079: 687C814000 push 00040817C ;'GooD BoY' .0040807E: 53 push ebx .0040807F: E8ECC5FFFF call MessageBoxA ;user32 --?5 .00408084: EB20 jmps .0004080A6 --?6 .00408086: 6A00 push 0 .00408088: 6888814000 push 000408188 ;'Wrong Way' .0040808D: 6894814000 push 000408194 ;'BaD BoY' .00408092: 53 push ebx .00408093: E8D8C5FFFF call MessageBoxA ;user32 --?5 .00408098: EB0C jmps .0004080A6 --?6 Логично, что теперь последует попытка узнать, откуда идет обращение к 408086 адресу. Чуть выше находится его вывод информации о том, что пароль правильный. Следовательно, где-то есть переход на вывод информации либо о верном пароле, либо о неверном. Ставим курсор на адрес 408086 и жмем <F6>. Почти мгновенно, как по велению волшебной палочки, HIEW перенесет тебя на строку, где идет обращение к адресу 408086 (Листинг 6). Листинг 6 .0040801E: E819B8FFFF call .00040383C --?1 .00408023: 8B85F8FDFFFF mov eax,[ebp][-00000208] .00408029: 8D55FC lea edx,[ebp][-04] .0040802C: E8E3FDFFFF call .000407E14 --?2 .00408031: 8D85F4FDFFFF lea eax,[ebp][-0000020C] .00408037: 8D95FCFDFFFF lea edx,[ebp][-00000204] .0040803D: B900010000 mov ecx,000000100 ;' ? ' .00408042: E8F5B7FFFF call .00040383C --?1 .00408047: 8B95F4FDFFFF mov edx,[ebp][-0000020C] .0040804D: 8B45FC mov eax,[ebp][-04] .00408050: E8EBB8FFFF call .000403940 --?3 .00408055: 752F jne .000408086 --?4 — мы здесь .00408057: 6834814000 push 000408134 ;'Registred Versi .0040805C: 68F1030000 push 0000003F1 ;' ??' .00408061: 53 push ebx .00408062: E811C6FFFF call SetDlgItemTextA ;user32 --? Попробуем исправить переход jne на je по адресу 408055. Запускаешь KeygenMe и вводишь любой пароль — программа будет зарегистрирована. HIEW просто рулез! Несмотря на это, все еще не достигнута цель — получить рабочий ключ. Увы, HIEW не настолько мощен, чтобы реверсить в нем алгоритм и писать Keygen. Для того чтобы сделать полноценный Keygen, потребуется отлаживать программу. Оно нам надо? Может, лучше просто попытаться получить серийник на свое имя? Попробуем! Поизучаем код, который идет перед jne. На пару экранов выше обнаружится содержимое, которое ты можешь видеть на листинге 7. |