Особенности дизассемблирования под LINUX на примере tiny-crackme



         

Исследование tiny-crackme извне и изнутри - часть 13


LOAD:0020009C loc_20009C:                       ; CODE XREF: start:loc_200099^j

LOAD:0020009C        push   ebx                  ; сохранить ebx

в стеке

Листинг 11 что за бикфордов шнур?!

А чему равен сам EBX? Ответ дает очередная перекрестная ссылка ведущая нас к следующему коду:

LOAD:0020007B        mov    edx, 1

LOAD:00200080        int    80h                  ; LINUX - sys_ptrace

LOAD:00200082        sub    ebx, eax             ; анализ возвращенного значения

LOAD:00200084        test   eax, eax             ; отладчик обнаружен?

LOAD:00200086        jz     short loc_200099     ; -> отладчика нет, все чисто

Листинг 12 то был бикфордов шнур, а это динамит

Вот оно! Системный вызов sys_ptrace! Оказывается, что наш условный переход в строке 2000CFh проверял совсем не пароль, а… наличие отладчика (программа которая уже отлаживается не может вызывать ptrace, сказанное, разумеется, распространяется только на те отладчики, что работают через ptrace). Но это не совсем так. Точнее, совсем не так. Как только отладчик напарывается на условный переход 200086h, на экран выводится разочаровывающее сообщение "Sorry but the process seems to be trace" ("извините, но процесс похоже трассируется") и до "нашего" условного перехода 2000CFh дело просто не доходит!

На самом деле, создатель кряксима применил довольно хитрый трюк. Условный переход 2000CFh не контролирует ни правильность пароля, ни наличие отладчика. Он вставлен просто как приманка. Мина-ловушка. Кто пытается его хакнуть, тот взрывается.

Таким образом, чтобы взломать программу необходимо изменить всего один условный переход по адресу 2000B7h.

Условный переход 2000CFh трогать не нужно! Поскольку мы уже тронули его, нам надлежит вернуть все на место, заменив ханутое 85h на 84h. Сохраняем изменения по <F2>, выходим из hex-редактора и… Неужели на этот раз сработает?!

Рисунок 8 взлом завершен

Да! Это работает!!! Невероятно! У нас получилось! Программа воспринимает любые вводимые пароли как правильные, выводя победоносную надпись "Success!! Congratulations" на экран! Открываем свежее пиво и отрываем у мыщъха хвост. Теперь мы будет работать только клавиатурой!

Все это долго описывать, но быстро ломать. Чтобы захачить программу мыщъх'у потребовалось чуть больше десяти минут да и те ушли в основном на тормоза виртуальной LINUX-машины под не самым быстрым P-III 733. В живой природе все происходит еще быстрее.




Содержание  Назад  Вперед