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

00405024 |. E8 b7010000 call textguar.004051e0

00405029 |. 85C0 test eax,eax

0040502B |. 74 39 je short textguar.00405066

0040502D |. 68 C4474100 PUSH textguar.004147C4 ;ASCII "12345"

00405032 |. 68 38144100 PUSH textguar.00411438 ;ASCII "rkey"

00405037 |. 68 30144100 PUSH textguar.00411430 ;ASCII "General"

0040503C |. E8 9FD7FFFF CALL textguar.004027E0

00405041 |. 68 44474100 PUSH textguar.00414744 ;ASCII "dilyara"

00405046 |. 68 28144100 PUSH textguar.00411428 ;ASCII "rname"

0040504B |. 68 30144100 PUSH textguar.00411430 ;ASCII "General"

00405050 |. E8 8BD7FFFF CALL textguar.004027E0

00405055 |. 83C4 18 ADD ESP,18

00405058 |. 6A 40 PUSH 40

0040505A |. 68 20144100 PUSH textguar.00411420 ;ASCII "Thanks"

0040505F |. 68 04144100 PUSH textguar.00411404 ;ASCII "Thank you for your support!"

00405064 |. EB 1A JMP SHORT textguar.00405080

00405066 |> 6A 10 PUSH 10

00405068 |. 68 1C134100 PUSH textguar.0041131C ;ASCII "Error"

0040506D |. C605 C4474100>MOV BYTE PTR DS:[4147C4],0

00405074 |. C605 44474100>MOV BYTE PTR DS:[414744],0

0040507B |. 68 D4134100 PUSH textguar.004113D4 ;ASCII "Wrong key or name! Please contact the author"

00405080 |> 8BCE MOV ECX,ESI

00405082 |. E8 29D2FFFF CALL textguar.004022B0

00405087 |. A0 44474100 MOV AL,BYTE PTR DS:[414744]

0040508C |. 84C0 TEST AL,AL

0040508E |. 74 18 JE SHORT textguar.004050A8

00405090 |. A0 C4474100 MOV AL,BYTE PTR DS:[4147C4]

00405095 |. 84C0 TEST AL,AL

00405097 |. 74 0F JE SHORT textguar.004050A8

00405099 |. B8 01000000 MOV EAX,1

0040509E |. 8BCE MOV ECX,ESI

004050A0 |. 50 PUSH EAX

004050A1 |. E8 2AE1FFFF CALL textguar.004031D0

004050A6 |. 5E POP ESI

004050A7 |. C3 RETN

004050A8 |> 33C0 XOR EAX,EAX

004050AA |. 8BCE MOV ECX,ESI

004050AC |. 50 PUSH EAX

004050AD |. E8 1EE1FFFF CALL textguar.004031D0

004050B2 |. 5E POP ESI

004050B3 \. C3 RETN

Как видно, после следующей вызываемой процедуры идет сравнение регистра EAX с нулем. В случае, если регистр равен нулю, происходит переход на команды передачи в стек текстовых ресурсов программы о том, что введенный пароль неправилен: "Error" и "Wrong key or name! Please contact the author". Значит, необходимо поменять флаг Z на ноль, или же сделать регистр EAX равным значению, отличному от нуля для того, чтобы пароль был принят программой. При выполнении данных шагов, был получен следующий результат:

Кроме этого, я обнаружила, что в файле textguard.ini программой была записана введенная мной информация в следующих строчках: rkey=12345 и rname=dilyara.

Однако программа осталась незарегистрированная – в заголовке программы осталась надпись UNREGISTERED (присутствие надписи – UNGERISTERED – вероятная ошибка автора программы):

Для решения этой проблемы необходимо посмотреть код третьей процедуры, вызываемой командой: CALL textguar.004051E0.

004051E0 /$ 68 C4474100 PUSH textguar.004147C4 ; ASCII "12345"

004051E5 |. 68 44474100 PUSH textguar.00414744 ; ASCII "dilyara"

004051EA |. E8 D1FEFFFF CALL textguar.004050C0

004051EF |. 83C4 08 ADD ESP,8

Как видно, в данной процедуре происходит вызов еще одной процедуры, в которую одновременно передаются введенные имя и пароль пользователя. Можно сделать вывод, что процедура по адресу textguar.004050C0 – и есть та процедура, которая принимает решение о правильности пароля.

004051F2 |. 33C9 XOR ECX,ECX ;обнуление регистра ECX

004051F4 |. 85C0 TEST EAX,EAX ;сравнение регистра EAX с нулем

004051F6 |. 0F9FC1 SETG CL ;установка регистра CL в 1,

;если регистр EAX больше нуля

004051F9 |. 8BC1 MOV EAX,ECX ;занесение регистра ECX в EAX

004051FB \. C3 RETN ;возврат

Как мы помним, регистр EAX должен быть отличен от 0 для того, чтобы пароль был принят программой как правильный. Вероятно, разработчик попытался запутать присвоение регистру EAX значения 1 этими командами. Но здесь, сначала обнуляется регистр ECX, а затем, на основании значения регистра EAX (который, вероятно, устанавливается в процессе работы вызываемой функции textguar.004050C0), устанавливается значение регистра ECX в 1, если пароль правилен, а затем это значение заносится в EAX.

Кроме того, выделив строчку кода по адресу 004051E0 (процедура, вызываемая для проверки пароля), я обнаружила посредством OllyDbg, что данная процедура вызывается из нескольких мест кода – с адресов 00405024 и 00405FA3. Сюда мы пришли с адреса 00405024, значит данная процедура проверки пароля единственна, и со второго адреса она вызывается с целью формирования заголовка.

Возможными путями «жесткого» взлома здесь являются следующие:

1. Здесь можно заменить команду установки байта по условию на противоположный, то есть на SETLE.

004051F6 |. 0F9EC1 SETLE CL

004051F9 |. 8BC1 MOV EAX,ECX

004051FB \. C3 RETN

2. Здесь можно фактически заносить в регистр AL единицу. Используется регистр AL для того, чтобы длина команды соответствовала длине предыдущей команды.

004051F4 |. 85C0 TEST EAX,EAX

004051F6 |. 0F9FC1 SETG CL

004051F9 |. B0 01 MOV AL,1

004051FB \. C3 RETN

3. В этом варианте мы можем использовать свободное место после команды RETN и дописать ту же команду присвоения значения 1 регистру AL.

004051F4 |. 85C0 TEST EAX,EAX

004051F6 |. 0F9FC1 SETG CL

004051F9 |. 8BC1 MOV EAX,ECX

004051FB \. C3 RETN

004051FC 90 NOP

004051FD 90 NOP

004051FE 90 NOP

004051FF 90 NOP

Я выбрала первый вариант и с помощью редактора кода Hiew произвела изменения в файле, сохранив результат с именем hardreset_textguard.exe. Запустила измененную программу и получила следующий результат при вводе пары имя пользователя – пароль равные dilyara и 12345 соответственно:

Как видно, программа приняла предложенный пароль и теперь является зарегистрированной. Кроме того, пункт меню «Register» после ввода данного пароля стал неактивен. Регистрационную информацию измененная программа сохранила уже в файле hardreset_textguard.ini.

Жесткий взлом программы успешно удалось реализовать.