ЖУРНАЛ ХАКЕР

SoftIce для начинающих

Программа, которая может все

Xakep, номер #035, стр. 035-053-2


Что реально может делать SoftICE и как им управлять?

Вообще SoftIce состоит из нескольких окон: регистров, данных, кода и команд. В окне кода ты видишь текст программы на ассемблере, а в окно команд вводишь команды управления SI. Перемещаться между окнами удобно с помощью мышки, но можно и без нее, хотя это сложновато для начала.

Основные команды (очень важный момент)

BPX адрес/имя функции - установить в указанный адрес или на вызов функции точку останова (еще ее называют брэйк опинтом).

BPM адрес - установить точку останова на адрес памяти.

BL - вывести список всех установленных точек останова (каждая имеет свой номер).

BD номер точки останова - сделать точку с соответствующим номером не активной.

BE номер точки останова - команда, обратная предыдущей.

BC номер точки останова - удалить точку останова.

Фактически, другие команды нам с тобой не понадобятся. Итак, с помощью SI можно заморозить все программы в любой момент (например, будет вызвана стандартная функция или выполнена команда по определенному адресу). Когда ты взламываешь прогу, тебя можно сравнить с хирургом, ковыряющимся во внутренностях человека, твой компьютер - с операционным столом, а SI - со скальпелем, ножницами и наркозом.

Если ты хочешь сломать какую-то программу, то твоя основная задача состоит в том, чтобы узнать, в какой момент нужно вызвать SI (если продолжить аналогию, то в каком месте резать :), и поковыряться в программе-пациентке. Поэтому нам с тобой потребуется установить ловушки, чтобы поймать в них программу, когда она либо сравнивает твой серийный номер с правильным, либо смотрит, какое сегодня число (чтоб сказать: "Ага! Срок моего действия истек. Зарегистрируйся, а то я обижусь и не буду работать!").

Ловушки. И собственно сам взлом

Итак, нам надо выбрать момент, когда перехватить управление у программы. Проще всего ломаются проги, использующие Win API функции. (Это стандартные функции, облегчающие программирование под WIN. Например, если тебе нужно создать окно на рабочем столе, то ты просто вызываешь какую-то функцию с параметрами, а не пишешь код, создающий окно с нуля.) То есть тебе нужно будет определить, на вызов какой из этих функций будет реагировать SI. Алгоритм твоих действий должен быть следующим:

1. Решить, на что ты будешь ловить свою программу. На какую API функцию.

2. Установить на ее вызов точку останова (bpx имя функции).

3. Запустить свою прогу и спровоцировать вызов этой функции.

4. Нажав F11, перейти к тому месту в программе (на тот адрес), откуда она вызывалась.

5. Установить точку останова на выполнение команд строки с этим адресом.

6. Снова спровоцировать вызов этой функции.

7. Просмотрев регистры, узнать необходимые тебе данные (к примеру, серийный номер) или адрес той строки, в которой обрабатываются результаты вызова функции (это могут быть какие-либо команды ассемблера: cmp или jump).

8. Запустив HIEW или что-то похожее, внести необходимые изменения (cmp можно заменить пустой командой nop, а какую-нибудь разновидность команды условного перехода - на безусловный jmp и тот же адрес). Именно из-за последних нескольких пунктов считается, что знание ассемблера является очень желательным при работе с SI.

Назад на стр. 035-053-1  Содержание  Вперед на стр. 035-053-3