- •Курсовая работа
- •Постановка задачи на курсовую работу
- •Внешнее предварительное исследование программного продукта
- •Предварительный анализ кода программы в отладчике
- •3.1. Точки останова
- •3.2. Поиск введенных данных
- •0012F63c 00404ff7 return to textguar.00404ff7 from textguar.004030d0
- •00404Ff2 |. E8 d9e0ffff call textguar.004030d0
- •«Жесткий» взлом
- •00404Da9 |. 75 03 |jnz short textguar.00404dae
- •00405008 |. E8 c3e0ffff call textguar.004030d0
- •00405024 |. E8 b7010000 call textguar.004051e0
- •00405029 |. 85C0 test eax,eax
- •0040502B |. 74 39 je short textguar.00405066
- •Подробный анализ механизма защиты. Осуществление мягкого взлома.
- •Блок-схема алгоритма модуля защиты
- •Рекомендации по улучшению механизма защиты
- •Заключение
Предварительный анализ кода программы в отладчике
3.1. Точки останова
Для анализа кода программы, а также для установки точек останова я буду использовать программу OllyDbg. Поэтому, открываю с помощью нее программу Text Guard – исполняемый файл textguard.exe. Для обнаружения участка кода, отвечающего за регистрацию программы, я установила точки останова на функцию чтения данных из окон редактирования диалогового окна – GetDlgItemTextA.
После этого я вновь вызвала окно регистрации программы и ввела следующие значения: имя пользователя – dilyara и пароль – 12345.
Сразу же после нажатия кнопки «ОК» произошел перехват управления OllyDbg. Была перехвачена функция GetDlgItemTextA по адресу 004030E3:
004030E3 CALL DWORD PTR DS:[<&USER32.GetDlgItemTextA>]
3.2. Поиск введенных данных
Посмотрим на код, предназначенный для считывания информации и содержащий функцию GetDlgItemTextA:
004030D0 /$ 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
004030D4 |. 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
004030D8 |. 8B49 08 MOV ECX,DWORD PTR DS:[ECX+8]
004030DB |. 50 PUSH EAX ; /Count
004030DC |. 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8] ; |
004030E0 |. 52 PUSH EDX ; |Buffer
004030E1 |. 50 PUSH EAX ; |ControlID
004030E2 |. 51 PUSH ECX ; |hWnd
004030E3 |. FF15 ACE14000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTextA>] ; \GetDlgItemTextA
004030E9 \. C2 0C00 RETN 0C
К моменту выполнения данной функции, регистр EDX был равен 00414744. Это и есть адрес, по которому в сегмент данных будет записана считанная информация. После выполнения данной функции в сегменте данных по адресу 00414744 было обнаружено введенное мной имя пользователя. Сегмент данных выглядел следующим образом:
00414740 00 00 00 00 64 69 6C 79 ....dily
00414748 61 72 61 00 00 00 00 00 ara.....
Как видно, сразу после функции GetDlgItemTextA следует команда RETN, по которой происходит возврат туда, откуда вызывалась эта функция чтения. Обратив внимание на стек, я обнаружила адрес возврата – 00404FF7:
0012F63c 00404ff7 return to textguar.00404ff7 from textguar.004030d0
Командой, по которой вызывалась данная процедура, является:
00404FF2 E8 D9E0FFFF CALL textguar.004030D0
Я обнаружила, что в последующем коде данная функция вызывается еще раз. Возможно, для считывания введенного пароля.
00404FE0 /$ 56 PUSH ESI
00404FE1 |. 68 80000000 PUSH 80
00404FE6 |. 68 44474100 PUSH textguar.00414744
;Этой командой в процедуру передается адрес, по которому, как я выяснила, необходимо сохранить введенное имя пользователя
00404FEB |. 8BF1 MOV ESI,ECX
00404FED |. 68 FB030000 PUSH 3FB
00404Ff2 |. E8 d9e0ffff call textguar.004030d0
00404FF7 |. 68 80000000 PUSH 80
00404FFC |. 68 C4474100 PUSH textguar.004147C4
;Этой командой в процедуру передается адрес, по которому, возможно, необходимо сохранить введенный пароль
00405001 |. 68 FC030000 PUSH 3FC
00405006 |. 8BCE MOV ECX,ESI
