Техника отладки

Крис Касперски ака мыщъх

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

Как правильно отлаживать программы без исходных кодов

Практически все знают, что программы взламываются отладчиком, но не все знают, как именно. На самом деле ничего сложного в этом нет - достаточно выучить несколько простых приемов работы с ним, и уже можно начинать ломать.

Введение в отладку

Дебаггер - невероятно мощный инструмент взломщика, однако к нему нужен свой подход. Большинство начинающих хакеров начинают отлаживать программу с точки входа и в итоге умирают в цикле выборки сообщений. Пошаговое исполнение программы (также называемое трассировкой) - слишком трудоемкий и крайне неэффективный процесс. Событийно-ориентированные (то есть практически все виндовые) приложения так не отлаживаются. Допустим, мы трассируем MFC-программу: доходим до вызова AfxWinMain и оказываемся глубоко внутри MFC42.DLL, откуда и должен вызываться весь пользовательский код, однако прежде чем трассировка доберется до него, мы успеем состариться!

Но отлаживать программу целиком совершенно не обязательно! Опытные хакеры трассируют только отдельные части защитного кода. Как мы найдем их в миллионах машинных инструкций исполняемого файла? Существует множество методик: точки останова, раскрутка стека, перекрестные ссылки, условная трассировка, прямой поиск паролей/серийных номеров в памяти и т.д. Расскажем обо всем этом поподробнее.

Испытания мы будем проводить над программой Drive LED от компании O&O Software, ее 30-дневную демонстрационную версию можно скачать с сайта www.oo-software.com/en/download/index.shtml.

Дизассемблер и отладчик в одной упряжке

Дизассемблер содержится в каждом отладчике (мы же не собираемся отлаживать программу непосредственно в машинном коде, верно?), но те дизассемблеры, что находятся внутри SoftIce или OllyDbg, слишком примитивны. ИДА (IDA Pro) намного мощнее. Она автоматически распознает имена библиотечных функций, определяет типы локальных переменных и делает множество других полезных вещей, в частности, позволяет комментировать листинг и назначать символьные метки для инструкций и данных. Исследовать защищенные программы с ее помощью - настоящее удовольствие. Однако без дебаггера все равно никак. Вызовы типа call [ebx+64h] в дизасм-листинге приводят хакеров в бешенство, особенно если функция вызывается все время с разным EBX. На выяснение значения этого регистра в дизассемблере можно ухлопать целый день, а в отладчике просто "подсмотрел" его - и все!

Или вот вызывается что-то по адресу 77E92B8D, лежащему где-то внутри операционной системы (при дизассемблировании дампов памяти такие адреса встречаются сплошь и рядом). В отладчике достаточно просто дать команду "u 77E92B8D", и мы тут же увидим, что это CreateFileA.

Бессмысленно спорить, кто круче: отладчик или дизассемблер. Эти инструменты взаимно дополняют друг друга. Реконструкцию алгоритмов лучше поручить дизассемблеру, а все непонятные места уточнять в отладчике.

Загрузка символов в дебаггер осуществляется довольно неочевидным образом, на котором спотыкаются многие начинающие. Последовательность действий должна быть такой:

Содержание  Вперед на стр. 057-020-2
Выпуски журнала "СПЕЦ Xakep"
Cпец Хакер #01Cпец Хакер #02Cпец Хакер #03Cпец Хакер #04Cпец Хакер #05Cпец Хакер #06Cпец Хакер #07Cпец Хакер #08Cпец Хакер #09Cпец Хакер #10Cпец Хакер #11Cпец Хакер #12Cпец Хакер #13Cпец Хакер #14Cпец Хакер #15Cпец Хакер #16Cпец Хакер #17Cпец Хакер #18Cпец Хакер #19Cпец Хакер #20Cпец Хакер #21Cпец Хакер #22Cпец Хакер #23Cпец Хакер #24Cпец Хакер #25Cпец Хакер #26Cпец Хакер #27Cпец Хакер #28Cпец Хакер #29Cпец Хакер #30Cпец Хакер #31Cпец Хакер #32Cпец Хакер #33Cпец Хакер #34Cпец Хакер #35Cпец Хакер #36Cпец Хакер #37Cпец Хакер #38Cпец Хакер #39Cпец Хакер #40Cпец Хакер #41Cпец Хакер #42Cпец Хакер #43Cпец Хакер #44Cпец Хакер #45Cпец Хакер #46Cпец Хакер #47Cпец Хакер #48Cпец Хакер #49Cпец Хакер #50Cпец Хакер #51Cпец Хакер #52Cпец Хакер #53Cпец Хакер #54Cпец Хакер #55Cпец Хакер #56Cпец Хакер #57Cпец Хакер #58Cпец Хакер #59Cпец Хакер #60Cпец Хакер #61Cпец Хакер #62Cпец Хакер #63Cпец Хакер #64Cпец Хакер #65Cпец Хакер #66Cпец Хакер #67Cпец Хакер #68Cпец Хакер #69Cпец Хакер #70Cпец Хакер #71Cпец Хакер #72Cпец Хакер #73Cпец Хакер #74Cпец Хакер #75