3189
.pdfинформацию, содержащуюся, начиная с конкретного адреса или с адреса, определяемого некоторым регистром. Вывод осуществляет ся по команде db адрес или db регистр. Окно включается и выклю чается командой wd.
1!л.Ч oWMH)TJ— ГСНХ-ШГ707Я------ |
1л7Х Ш И Ы Ь |
-------- |
ПГЯГШ ПТОГ------ |
<)Ь»)П1> к |
|
|
|||||||||
Г.1)1 007И1НГ4 |
|
ШИ* |
007ИРКЛС |
I'S P -(Ю7Н1 НЛ4 |
1:И*-О0411>Г75 |
о >1 I с /. Л |
I* с |
|
|||||||
C S -01.17 |
I7S |
01.11» |
SS |
0П 1’ |
i:s |
01.1Г |
1;S |
ОГ2Г |
<IS 0000 |
|
|
|
|||
M -SI I |
Cl/IM |
IMfiinl'iirm |
» |
S elf |
OxOW IIIW C < ( . . |
. ) > |
|
|
|
4(0)— |
|||||
М-:»Х| |
tin».- |
'JKc«nirvvllciii |
А К 0x0001 71>7К |
< { |
. . . ) > |
|
|
|
|||||||
|1 » Х | « Ь м |
T Irect lie»* |
Л |
SIOJM6H24 |
OxOOOI;7l.>7K *•■(. . . |
) -• |
|
IM |
||||||||
0030: 00000000 |
9Е |
OF С9 |
00 |
65 04 70 00-16 |
00 04 |
04 |
70 00 |
||||||||
P.... |
е р- 4 |
||||||||||||||
0030:00000010 |
65 |
04 70 |
00 |
54 FF 00 F0-4C El00 FO C»F EF 00 FO e.p. T. |
. .L .. |
. o ... |
|||||||||
-------RXMnin.pns------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
—PR O T32— |
|||||
OOI53:bcgln |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
00154: |
with |
TreeUiew do |
|
|
|
|
|
|
|
|
|
||||
00155: |
begin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00156: |
if |
Uisible and Assigned (Selected) Then |
|
|
|
|
|||||||||
00157: |
begin |
|
|
|
|
|
|
|
|
|
|
|
|||
00158: |
R |
: - TResourceltein(Selccted.Patn); |
|
|
|
|
|
( >м<(1 рСП1С1|)ОН
( >KIIO .T O ka'ii.nu\
переменных
( Исноданных
00160: |
begin |
|
00161: |
case R.ResType of |
|
00162: |
rtBitinap. rtlconbntry. nCursorEntry: |
|
00163: |
begin |
|
00164: |
InnigeUiewer. Picture. Aesign(R); |
|
Break duo -----------------------------------------------ю HPX Л0137:00431)1 52 |
RESXPLOR—----------------------- |
|
( К Г - 15.47 .second*) |
||
llresik due to UPX //0137:0043DF52 |
(H T -6 0 .0 6 milliseconds) |
Enter о command (H fbrhdlp)
|
Ютики н |
i |
окни |
|
|
4 ►T |
|
R ctixplor < |
Имя тек\щсг\1 |
|
П|м«цсеса |
С грокд ih v ick au |
|
Рис. Окна отладчика Softlce
3. Окно кода. В данном окне отображается дизассемблирован ный текст исследуемой программы. Выделенная строка указывает на команду, которая будет выполнена на следующем шаге. В нижней части окна показано, в каком модуле исследователь в данный момент находится. Включается и выключается окно с помощью команды wc.
4. Самое нижнее окно: окно команд Softlce.
Пошаговое исполнение программы реализуется с помощью функциональной клавиши F8.
По клавише F12 программа исполняется до тех пор, пока не встретит команду RET, после чего выполнение программы прерыва ется и управление снова передается отладчику. Клавиша F12 очень полезна для выхода из подпрограмм, вызванных командой CALL. Можно пропустить их пошаговое исполнение с помощью F12H начать пошаговое исполнение с команды, следующей за ко мандой RET.
По команде F10 осуществляется выполнение команды без входа в нее (например, выполняется полностью команда CALL, а вход в нее не производится).
Softlce позволяет пользователю устанавливать точки останова в отлаживаемой программе. При этом точка останова может быть установлена как по конкретному адресу, так и на вызов некоторой API функции Windows. Точка останова устанавливается по команде Ьрх адрес или Ьрх имя API функции. Удаление точек останова реа лизуется по команде Ьс. Для удаления всех точек останова использу ется команда Ьс *.
Перечень WinAPI-функций. необходимых для использования в лабораторной работе, приведен ниже:
-MessageBoxA, MessageBoxIndirectA: вызов окна сообщений Windows приложениями Win32.
-MessageBox, MessageBoxIndirect: вызов окна сообщений Windows приложениями Winl6.
-GetDlgltemTextA: чтение данных из текстового поля диалого вого окна.
-GetTickCount: количество тиков со времени запуска Windows.
Порядок выполнения практической работы
Задание l.WinZip
Познакомиться на примере с основными функциями отладчика Softlce на примере отладки защитного механизма программы WinZip. Ответы на все вопросы внести в отчет (пример оформления отчета приведен в конце практической работы). Вопросы, ответы на ко торые необходимо внести в отчет, помечены значком верхнего ре гистра ".
1.Запустить программу WinZip и нажать кнопку «Enter Registration Code...», в результате чего откроется окно регистрации.
2.Запустить Softlce и установить точки прерывания на вызов окна сообщений Win32. На какие функции вы установили точки пре рывания, сколько точек прерывания вы установили1?
3. Ввести в окно регистрации произвольное имя и пароль и за пустить регистрацию программы2. Для облегчения выполнения лабо раторной работы рекомендуется задать осмысленные имя и пароль. В каком модуле прервалось выполнение процедуры регистрации (имя модуля показано в окне Sofflce)3?
4. На вызове какой API-функции прервалось выполнение про граммы (MessageBoxA или MessageBoxIndirectA)3? Каков адрес па мяти, по которому осуществлялся вызов API-функции (по которому стоит команда CALL функция)4? Для ответа на данный вопрос вам необходимо будет заново запустить команду регистрации. Исполь зуйте команду F12 для прогона подпрограммы API-функции
иполучения адреса памяти ее вызова.
5.Каково содержимое регистров ESI при выходе из APIфункции5?
6.После возврата в основную программу из API-функции, про должить ее пошаговое выполнение до команды RET (адрес 0167:00426940).
7.Чему равно содержимое регистров ESI и ЕВХ6? Чему равно
содержимое памяти по адресам, хранящимся в регистрах ESI и ЕВХ7? Запишите содержимое памяти (первые 10 байт)7. Сделайте выводы, относительно содержимого памяти, что там хранится8?
Задание 2. Нейтрализация регистрационной защиты архиватора WinZip 7.0. При выполнении задания используйте точки прерывания по чтению информации, введенной пользователем в диалоговом окне регистрации (GetDlgltemTextA).
1. Установить точку прерывания на вызов функции GetDlgltemTextA.
2.Выполнить процедуру регистрации WinZip.
3.По какому адресу вызывается функция GetDlgltemTextA9 (процедура CALL)? Какая информация передается в данную функ цию (аргументы) и чему равны значения данных аргументов10? В ка кой регистр записывается адрес хранения идентификатора пользова теля11? Каково значение данного регистра при выходе из процедуры
чтения информации12? Вывести содержимое памяти по содержимому этого регистра на экран и удостовериться в правильности выдвину той гипотезы.
4.Найти сразу же в программном коде (чуть ниже) место вызо ва аналогичной функции, предназначенной для чтения регистраци онного номера. Каков адрес вызова данной функции13? В какой ре гистр записывается адрес хранения введенного регистрационного номера пользователя14? Каково значение данного регистра при выхо де из процедуры чтения информации15? Вывести содержимое памяти по адресу, хранимому в данном регистре, на экран и удостовериться
вправильности выдвинутой гипотезы.
5.В пошаговом режиме выполнить чтение идентификатора пользователя и регистрационного номера.
6.Что, по вашему мнению, осуществляют команды по адре сам 0167:00408049 и 0167:00408053 (с точки зрения WinZip)16? Промоделировать на компьютере ситуацию, когда эти условия не выполняются.
7.Проанализировав исполняемый код, следующий за чтением идентификатора пользователя и регистрационного номера, осущест вить жесткий взлом программы. Выясните, остается ли регистрация действительной при последующих запусках WinZip? Объяснить дан ный факт.
8.Перейти к пошаговому исследованию процедуры по адресу 00407В4В (вызов CALL 00407В4В по адресу 0167:0040805С). Что, по вашему мнению, осуществляет данная процедура17? При ответе - ру ководствоваться командами, следующими за данным вызовом. По следующие шаги относятся к пошаговому исследованию данной процедуры.
9.Что осуществляется с точки зрения WinZip командой по ад ресу 0167:00407В5818? При ответе на вопрос - руководствоваться предварительно полученной информацией (в том числе относительно адреса 47D928).
10.Какие аргументы передаются в процедуру (CALL 00407Е31), вызываемую по адресу 0167:00407В83? Указать их зна чения и назначение19
11.Какая информация и в каких регистрах передается в проце дуру (CALL 00407СС6), вызываемую по адресу 0167:00407С162°? Проанализировать код, следующий за вызовом данной процедуры (адреса памяти 0167:00407С1В - 0167:00407С2А).
12.Какие аргументы подаются на вход процедуры (CALL 00457900), вызываемой по адресу 0167:00407С2А? Каковы значения данных аргументов, что находится по соответствующим адресам21? Сделать вывод о том, что делает данная процедура.
13.Можете ли вы сказать регистрационный код программы? Каков он?22
14.Осуществить «мягкий» взлом программы и зарегистриро вать WinZip.
Контрольные вопросы
1.Что понимают под «обратным проектированием»?
2.Какие средства помогают решить задачу обратного проекти рования? Проклассифицируйте их.
3.В чем преимущество отладчика Softlce перед другими отлад чиками подобного рода?
Пример оформления отчета |
|
Практическая работа № ___ |
|
Тема______ |
|
Цель работы____ |
|
Студент гр. №_____ |
Ф.И.О ______________ _ |
1. При первом запуске программы WinZip были установлены точки прерывания на следующие функции______________ .
2. При первой регистрации было задано имя пользователя
______и пароль_______
3.Процедура регистрации прервалась в модуле_______на вы зове API-функции_____
4.Вызов API-функции______(CALL_______) осуществляется
по адресу памяти_________
5.Содержимое регистра ESI при выходе из API-функции
_________равно_____
6.Перед командой RET, находящейся по адресу 0167:00426940, содержимое регистра ESI = _____, ЕВХ = _______
7.Содержимое памяти по адресу, указанному в регистре ESI, равно________, содержимое памяти по адресу, указанному в реги стре ЕВХ = ______
8.Можно сделать вывод, что по адресу____находится____ , по адресу______находится_____ .
9.Вызов функции GetDlgltemTextA осуществляется по адресу
10.В функцию GetDlgltemTextA передаются следующие аргу
менты - _____= .....................
11.Адрес, по которому хранится идентификатор пользователя, записывается в регистр____
12.После выхода из процедуры GetDlgltemTextA значение ре
гистра |
= _____ |
13.Адрес вызова функции, читающей регистрационный номер
14.Адрес хранения регистрационного номера, введенного пользователем, хранится в регистре______
15.Значение регистра ____ при выходе из процедуры GetDlgltemTextA = _____
16.Команда по адресу 0167:00408049 выполняет следующее действие_____________, команда по адресу 0167:00408053 выполня ет следующее действие______.
17.Процедура, находящаяся по адресу 00407В4В, выполняет
_______. При ответе руководствовались тем, что_________
18.Команда по адресу 0167:00407В58 выполняет________ .
19. В процедуру CALL 00407Е31, вызываемую по адресу 0167:00407В83, передаются следующие аргументы: _____ со сле дующими значениями:_______. Был сделан вывод, что среди аргу ментов передается______
20.В процедуру (CALL 00407СС6), вызываемую по адресу 0167:00407С16, передаются следующие аргументы:________со сле дующими значениями:________.
21.На вход процедуры (CALL 00457900), вызываемой по адре су 0167:00407С2А, передаются следующие аргументы:________со следующими значениями:___________, по соответствующим адре сам располагается_____.
22.Регистрационный код программы = _______
15. СТАТИЧЕСКИЕ МЕТОДЫ ИЗУЧЕНИЯ И НЕЙТРАЛИЗАЦИИ ЗАЩИТНЫХ МЕХАНИЗМОВ. ЗНАКОМСТВО С ТЕХНИКОЙ ДИЗАССЕМБЛИРОВАНИЯ ПРОГРАММНЫХ ПРОДУКТОВ
Цель работы - познакомиться на практике со статическими ме тодами изучения и нейтрализации защитных механизмов, с техникой дизассемблирования программных продуктов на примере дизассемб лера ГОА PRO.
Сведения из теории
Одним из способов исследования программного обеспечения в условиях отсутствия исходных текстов является дизассемблирова ние - перевод двоичных кодов процессора в удобочитаемые мнемо нические инструкции.
Качественное дизассемблирование объемного программного продукта является достаточно трудной задачей, так как ассемблиро вание - однонаправленный процесс с потерями, и полное автомати ческое восстановление исходного текста, как правило, невозможно (например, практически невозможно автоматически отличить кон станты от адресов памяти - сегментов и смещений).
По типу реализации интерфейса взаимодействия с пользовате лем существующие дизассемблеры можно разделить на две катего рии - автономные и интерактивные.
Автономные дизассемблеры требуют от пользователя задания всех указаний до начала дизассемблирования и не позволяют вмеши ваться непосредственно в сам процесс. Если же конечный результат окажется неудовлетворительным, пользователь либо вручную правит полученный листинг, либо указывает дизассемблеру на его ошибки и повторяет всю процедуру вновь и вновь, порой десятки раз. Такой способ общения человека с дизассемблером непроизводителен и не удобен, но его легче запрограммировать.
Интерактивные дизассемблеры обладают развитым пользова тельским интерфейсом, благодаря которому они приобретают значи тельную гибкость, позволяя человеку «вручную» управлять разбором программы, помогая автоматическому анализатору там, где ему са мому не справиться: отличать адреса от констант, определять грани цы инструкций и т.д.
Примером автономного дизассемблера является SOURCER, а интерактивного - IDA Pro.
Интерактивный дизассемблер IDA Pro предназначен для дизас семблирования кода программы в мнемонические инструкции на языке ассемблера. Дизассемблер IDA Pro изначально проектировался как интерактивная среда, предназначенная для совместной работы с человеком. Преимуществом для злоумышленника интерактивных дизассемблеров является то, что их трудно обмануть каким-либо хитрым приемом, что возможно для дизассемблеров, работающих
вавтоматическом режиме.
ВIDA Pro реализован удобный С-подобный внутренний язык написания скриптов, позволяющий реализовать многие полезные действия (например, осуществлять дешифровку зашифрованного участка кода).
IDA Pro поддерживает инструкции различных процессоров. Среди них - все версии процессоров INTEL, Motorola, Z80.
Автономные дизассемблеры типа SOURCER плохо справляются
санализом большого, порядка нескольких мегабайт, заковыристого файла, а с шифрованным кодом не справляется вообще. Интерактив ные дизассемблеры позволяют решить эту проблему.
ВГОА Pro возможно непосредственным образом в процессе инте рактивного диалога указать, является ли код программы по заданному адресу действительно кодом, либо данными. Для этого необходимо по ставить курсор на соответствующий адрес и дать команду «С» либо «D».
Порядок выполнения практической работы
Загрузить в IDA Pro выданный преподавателем файл idaJOxl.
сот и произвести его полное и качественные дизассемблирование с
анализом исполняемого кода, руководствуясь при этом следующими рекомендациями:
1.Запустить программу ida_0xl.com и познакомиться внешне
сее работой. Какие функции она выполняет?
2.Загрузить в IDA Pro (исполняемый файл ldag.exe) файл ida_0xl.com и дизассемблировать его как 16-битный код.
3.Если по умолчанию IDA принял начальные инструкции как данные, не дизассемблировав их, то указать ему, что данные являют ся командными инструкциями (выделить соответствующую команду и дать команду «С»).
4.По какому адресу выполняется переход с адреса seg000:0003? Добавить перекрестную ссылку, указав дизассемблеру, куда делается переход с адреса 0003. (Команда View -> Open Subviews -> Cross ref erences). Произвел ли IDA после этого дальнейший анализ кода?
5.Произвести анализ кода по адресам seg000:0006 - seg000:0012. Проинтерпретировать общий смысл данного участка кода. В чем его функции?
6.Что делает цикл, расположенный по адресам seg000:000C - seg000:0010? Сколько раз он повторяется?
7.Что представляет из себя слово, расположенное по адресу 0014? Дайте ему осмысленное название (команда «N») и определите его размер как двухбайтное слово (щелкните по нему правой клави
шей мыши, задайте соответствующий тип данных)). Вычислите и определите, по какому адресу осуществляется переход с адреса seg000:0012.
8.Добавить перекрестную ссылку, указав дизассемблеру, куда делается переход с адреса 0012.
9.Исследуете код программы с того адреса, на который делает ся переход с адреса 0012. В чем функции данного блока? Подробно
прокомментируйте каждую инструкцию и ее целевую функцию
вобщей структуре блока.
10.В чем заключаются функции последовательного выполне ния инструкций CALL $+3 и pop СХ? Что в результате оказывается
всодержимом СХ?