Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Бессмертный отладчик

Иван Скляров

Спецвыпуск: Хакер, номер #057, стр. 057-008-3


Для 16-разрядных программ используется загрузчик wldr.exe, а для DOS-программ - загрузчик dldr.exe. Оба находятся в папке UTIL16, где установлен SoftIce. Программу можно загружать прямо из командной строки:

/util16>dldr dosproga.exe

Способ 2. С помощью установки бряка

Простое открытие программы с помощью загрузчика мало интересно крэкерам. Самое важное, за что любят SoftIce, так это за его умение работать с бряками (англ. breakpoint - точка останова). Бряк позволяет отслеживать определенные события в системе и вызывать отладчик только по их наступлению. Алгоритм крэкера выглядит следующим образом: устанавливается бряк на нужную функцию (на сообщение, память, прерывание), закрывается SoftIce комбинацией <Ctrl>+<D> (или командой x), провоцируется вызов функции в программе (например в результате ввода пароля), после того как бряк сработает и активизируется отладчик, анализ показанного кода. SoftIce поддерживает следующие типы бряков:

BPX - бряк на функцию или адрес в программе. Пример: BPX MessageBoxA. После установки такого бряка, как только в системе произойдет вызов функции MessageBoxA, активизируется SoftIce и курсор в окне кода будет установлен на том коде, который вызвал эту функцию. BPX - наиболее часто используемый крэкерами бряк. Чаще всего он ставится на API-функции: GetWindowText и GetDlgItemText.

BPM - бряк на обращение к памяти. Пример: BPM 602380 - если произойдет обращение к памяти по адресу 602380, сработает SoftIce на том коде, который осуществил обращение по этому адресу. Эта команда имеет несколько разновидностей: BPMW - бряк на обращение к слову, BPMD - бряк на обращение к двойному слову. Также в командной строке можно задавать тип обращения: R - чтение памяти, W - запись в память, RW - чтение и запись, X - выполнение. Пример: BPMD 402438 R.

BPINT - бряк на прерывание, передаваемое через IDT. Пример: BPINT 6F - если произойдет программное прерывание, вызываемое командой INT 6F, то SoftIce покажет код, который вызвал его.

BPIO - бряк на прерывание ввода/вывода. Этот бряк перехватывает обращение к порту команд IN и OUT. Пример: BPIO 3FE - если произойдет прерывание 3FE, активизируется SoftIce, а текущей командой окажется инструкция, следующая за командой IN или OUT, вызвавшей прерывание. В командной строке можно задавать тип обращения: R - чтение из порта (команда IN), W - запись в порт (команда OUT), RW - чтение и запись. Пример: BPIO 2A W.

BMSG - бряк на сообщения Windows. Пример: BMSG 520D WM_GETTEXT - если будет послано сообщение WM_GETTEXT окну с дескриптором 520D, то SoftIce активизируется и покажет тот код, который послал это сообщение.

Любой из перечисленных бряков может быть задан с дополнительным условным выражением [IF выражение] и действием при срабатывании бряка [DO "команда1; команда2; ..."]. Пример: BPX 78C23155 IF (esp->8)==WM_GETTEXT DO "d edx". Если будет послано сообщение WM_GETTEXT процедурой окна 78C23155, то в SoftIce выполнится команда "d edx", которая показывает содержимое памяти в окне данных по адресу, содержащемуся в регистре edx.

Назад на стр. 057-008-2  Содержание  Вперед на стр. 057-008-4