ЛР №9 - OllyDebugger / ЛР №9 (пример2)
.docx
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
БАЛТИЙСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ ИМ. И. КАНТА
ФИЗИКО-ТЕХНИЧЕСКИЙ ИНСТИТУТ
ОТЧЕТ
по лабораторной работе № 5
Тема: «Исследование моделей защит ПО. Изучение средств динамического исследования ПО на примере отладчика Olly Debugger. Защита от отладчиков»
Выполнили:
студенты 4 курса
специальности «Организация и технология защиты информации»
Барзенков Александр
Лорич Илья
Калининград
2013
Цель: Познакомиться на практике с методами реализации обратного проектирования программ. Изучить возможности отладчиков. Исследовать парольную защиту предложенной программы при помощи отладчика Olly Debugger.
Ход работы:
1. При первом запуске программы WinZip точки прерывания были установлены по следующим адресам:
00407C86 WINZIP32 Always PUSH WINZIP32.0047D95C
00407CA6 WINZIP32 Always PUSH 12C
004080C6 WINZIP32 Always CALL WINZIP32.004267E7
004080CB WINZIP32 One-shot ADD ESP,0C
00426926 WINZIP32 Always CALL DWORD PTR DS:[<&USER32.MessageB
2. При первой регистрации были заданы
имя пользователя: barzenkov
пароль: lorich.
3. Перед командой RET, находящейся по адресу 0167:00426940, содержимое регистров
ESI: 0047D958 WINZIP32.0047D958
EBX: 0047D928 WINZIP32.0047D928
4. Содержимое памяти по адресу, указанному
в регистре ESI: arzenkov
в регистре EBX: orich
5. Можно сделать вывод, что
по адресу: 0047D958 находится имя пользователя без первого символа.
по адресу: 0047D928 находится пароль без первого символа.
6. Функция GetDlgItemTextA вызывается по адресу:
7E3BB069 E8 0093FBFF CALL USER32.GetDlgItem
7. В функцию GetDlgItemTextA передаются следующие аргументы и их значения:
Идентификатор окна диалога 0012F65C 001E055E |hWnd = 001E055E ('Register WinZip',class='#32770',parent=0045054A)
Идентификатор управления 0012F660 00000C81 |ControlID = C81 (3201.)
Адрес текстового буфера 0012F664 0047D958 |Buffer = WINZIP32.0047D958
Макс. длина строки 0012F668 0000000B \Count = B (11.)
8. Адрес хранения идентификатора пользователя:
WINZIP32.0047D958
9. Адрес хранения записан в регистр:
ESI
10. После выхода из процедуры GetDlgItemTextA, значение регистра с адресом хранения идентификатора стало равно:
00000000
11. Команда по адресу 0167:00407B58 выполняет действие:
сравнивает первую букву логина с тем, что находится в памяти
12. В процедуру CALL 00407E31, вызываемую по адресу 0167:00407B83 передаются следующие аргументы и их значения:
Arg1 => 0047D928 ASCII "barzenkov"
Вывод. Среди аргументов передается имя пользователя.
13. В процедуру (CALL 00407CC6), вызываемую по адресу 0167:00407C16 передаются следующие аргументы и их значения:
0047D928 ASCII "barzenkov"
0047D958 ASCII "lorich"
14. На вход процедуры (CALL 00457900), вызываемой по адресу 0167:00407C2A передаются следующие аргументы и их значения:
0012F278 0012F354 ASCII "7D4C0FA8"
0012F27C 0047D958 ASCII "lorich"
0012F280 0031059A
0012F284 0047D958 ASCII "lorich"
0012F288 0047D928 ASCII "barzenkov"
Данная процедура выполняет проверку серийного номера.
15. Регистрационный код программы
7D4C0FA8
Вывод: в ходе выполнения работы были исследованы методы реализации обратного проектирования программ, изучены возможности отладчика Olly Debugger, исследована парольная защита предложенной программы при помощи отладчика