Крис Касперски - Техника отладки приложений без исходных кодов (Статья о SoftICE)
Название: | Техника отладки приложений без исходных кодов (Статья о SoftICE) | |
Автор: | Крис Касперски | |
Жанр: | Статьи и рефераты, Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Windows, Крэкинг и реверсинжиниринг, Отладка, тестирование и оптимизация ПО | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Техника отладки приложений без исходных кодов (Статья о SoftICE)"
Практически все знают, что программы взламываются отладчиком, но не все знают, как. На самом деле ничего сложного в этом нет. Достаточно выучить несколько простых приемов и уже можно начинать ломать.
Читаем онлайн "Техника отладки приложений без исходных кодов (Статья о SoftICE)". [Страница - 4]
Открываем MSDN, смотрим прототип функции GetWindowText, ага: указатель на возвращаемую строку находится во втором аргументе слева, значит на момент вызова GetWindowTextA он будет располагаться по адресу ESP + 8 (четыре байта на hWnd и еще четыре — на адрес возврата).
Говорим: «bpx GetWindowTextA», выходим из отладчика, вводим серийный номер в окно редактирования, нажимаем «ОК» — отладчик всплывает (ну, будем считать, что всплывает, в действительности он может и не всплыть — все зависит от того, какую API-функцию использовал программист, так что тут возможны варианты). Даем команду «d esp->8» (если окно дампа отключено, перед этим необходимо дать команду «wd»), а затем «p ret» — в окне появляется введенная нами строка (cм рис. 5):
Рисунок 5. Определение адреса, по которому записывается считанный пароль.
Все, что нам нужно — это ее адрес, равный в данном случае 2F46E0. Логично — чтобы сравнить пароль с оригиналом, защита должна его считать из памяти. И в этом момент из кустов появляется мы (в смысле, мыщъх и отладчик). Команда «bpm 2F46E0» устанавливает точку останова на адрес 2F46E0, заставляя soft-ice всплывать при каждом чтении/записи этой ячейки. Звучит прекрасно, но на практике срабатывает далеко не всегда. Вовсе не факт, что в первое же всплытие отладчика выведет нас к защитному коду. Скорее всего, здесь будет библиотечная функция, копирующая пароль в локальный буфер, передаваемый по цепочке другим функциям. И хорошо, если по ссылке! Зачастую буфер передается по значению, т. е. копируется в другой буфер целиком. На каждый из таких буферов приходится ставить точку останова, а количество точек останова равно четырем. Это не ограничение отладчика, это просто архитектура у Пня такая.
Отсюда еще не следует, что точки останова на данные бесполезны, просто они сильны совсем в другой области. Вот, например, мы выяснили, что переменной x содержится флаг регистрации. Как именно выяснили, не суть важно. Допустим, встретили код типа: cmp [x],0/jz nag_screen (если переменная x равна нулю, вывести ругательный диалог). Как определить где именно этот x инициализируется? В большинстве случаев перекрестные ссылки автоматически восстанавливаются ИДОЙ, однако разработчик защитного механизма может легко ослепить ее, но едва ли он справится с командой «bpm x» (установить точку останова на доступ к переменной x). А вот другой вариант: изменили мы пару байтиков в программе, а она, обнаружив факт своего взлома, отказалась работать. Чтобы найти процедуру проверки целостности кода достаточно установить одну или несколько точек останова на модифицированные ячейки. Да много чего можно придумать, главное — фантазию иметь!
Раскрутка стека
Внешние проявления защитного механизма засечь очень легко. Как правило, это либо окошко с надписью «trial expired», либо форма для ввода серийного номера. Установить точку останова на WM_COMMAND легко, но что это дает? Мы окажемся внутри оконной процедуры, в глубоких недрах которой зарыт защитный код. Можно, конечно, и потрассировать, но это же — сколько времени уйдет? Вот бы узнать — какие команды исполнялись до этого? Обратить выполнение программы вспять и посмотреть — какой именно код определят факт регистрации программы. Некоторые отладчики поддерживают механизм обратной трассировки (back trace), запоминая все выполняемые команды и складывая их в специальный буфер, однако это сильно замедляет выполнение программы и выводит антиотладочные приемы на оперативный простор. Мы поступим иначе. Soft-ice поддерживает шикарную команду «STACK», раскручивающую стек и выводящую адреса всех материнских функций. Не совсем равноценная замена обратной трассировки, но для большинства случаев ее вполне хватает.В нашем случае ответ отладчика выглядит так:
:STACK
0012E138 77E155B5 oorwiz!.text+0001AC5E
0012E168 77E15A3B USER32!DefWindowProcW+0105
0012E188 77E1FB52 USER32!SendMessageW+0043
0012E214 77E1E6C3 USER32!WINNLSGetIMEHotkey+0E15
0012E254 77E1E561 USER32!EditWndProc+0075
0012E278 77E198DF USER32!ScrollWindow+0096
0012E29C --">Книги схожие с «Техника отладки приложений без исходных кодов (Статья о SoftICE)» по жанру, серии, автору или названию:
Другие книги автора «Крис Касперски»:
Крис Касперски - Техника отладки программ без исходных текстов Жанр: Отладка, тестирование и оптимизация ПО Год издания: 2005 |