Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ПАЗИ.doc
Скачиваний:
19
Добавлен:
22.08.2019
Размер:
247 Кб
Скачать
☆
  1. Предварительный анализ кода программы в отладчике

    1. 3.1. Точки останова

Для анализа кода программы, а также для установки точек останова я буду использовать программу OllyDbg. Поэтому, открываю с помощью нее программу Text Guard – исполняемый файл textguard.exe. Для обнаружения участка кода, отвечающего за регистрацию программы, я установила точки останова на функцию чтения данных из окон редактирования диалогового окна – GetDlgItemTextA.

После этого я вновь вызвала окно регистрации программы и ввела следующие значения: имя пользователя – dilyara и пароль – 12345.

Сразу же после нажатия кнопки «ОК» произошел перехват управления OllyDbg. Была перехвачена функция GetDlgItemTextA по адресу 004030E3:

004030E3 CALL DWORD PTR DS:[<&USER32.GetDlgItemTextA>]

    1. 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