Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3189

.pdf
Скачиваний:
6
Добавлен:
15.11.2022
Размер:
8.9 Mб
Скачать

информацию, содержащуюся, начиная с конкретного адреса или с адреса, определяемого некоторым регистром. Вывод осуществляет­ ся по команде 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

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 СХ? Что в результате оказывается

всодержимом СХ?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]