Исследование Текстового перекодировщика Штирлиц версия 4.0

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: DeeCo

Автор: http://www.cracklab.narod.ru

Инструменты: 0) SoftIce

1) WDAsm

2) Hex editor (HView).

И вновь я говорю вам здрасте, дорогие мои читатели.

Вот попалась мне в руки чудесная программка, которая настолько хитро перекодирует текстовые файлы, что вы не запутаетесь в различных русских кодировках. Мне она понравилась, если бы не огромный баннер в правом нижнем углу, который существует в течении минуты с момента создания и всячески мешает мне работать. Непорядок.

Я взял файл Shtirlitz.exe и дизассемблировал его в WDAsm. Затем зашёл в String Reference и начал искать подозрительный текст… И нашёл!!! строку : «Shtirlitz.Banner»

Дважды кликаю на неё и попадаю сюда:

:00401924 FF1594954400 Call dword ptr [00449594]

:0040192A 50 push eax

:0040192B 6800080000 push 00000800

* Possible StringData Ref from Data Obj ->»Shtirlitz.Banner»

|

:00401930 68D0004400 push 004400D0

:00401935 B928764400 mov ecx, 00447628

:0040193A E836530000 call 00406C75

Судя по вызываемым функциям (GetTickCOunt, SetTimer) мы в процедуре обработки баннерного состояния 🙂

Теперь посмотрим чуть выше:

* Referenced by a CALL at Address:

|:0040182A <-- Вот из этого адреса вызывается процедура

|

:00401911 55 push ebp

:00401912 8BEC mov ebp, esp

:00401914 83EC1C sub esp, 0000001C

Идём по адресу 0040182A, с которого вызывается эта функция и видим:

:0040182A E8E2000000 call 00401911 <--вызываем процедуру обработки баннера

:0040182F 84C0 test al, al

:00401831 750E jne 00401841 <--если все ОК - прыгаем

Вот то что нам надо, а что если jne 00401841 на jne 00401833 и тогда программа будет всегда думать, что время баннера истекло.

так и есть, я заменил в HView jne 00401841 на jne 00401833, т.е. теперь программа не будет в любом случае прыгать на процедуру вывода баннерного окна.

Но программа при запуске начала ругаться, что исполняемый модуль был изменён. Значит в программе есть CRC проверка. Будем копать дальше.

Запустим программу с помощью SymbolLoader’a из пакета SoftIce, чтобы оказаться в самом начале программы, затем скролим (не заходя в функции) до этого места:

:00435CE3 FF151C974400 Call dword ptr [0044971C]

:00435CE9 50 push eax

:00435CEA E83D0CFDFF call 0040692C <-- Подозрительная функция

:00435CEF 8945A0 mov dword ptr [ebp-60], eax

:00435CF2 50 push eax

:00435CF3 E808FDFFFF call 00435A00 <--это конец программе

:00435CF8 EB21 jmp 00435D1B

Из того, что функция call 00435A00 делает полный каюк программе я заключил, что перед ней функция call 0040692C что-то представляет из себя!

Я зашёл в неё (F8) и оказался тут:

:0040692C 8B0D88734400 mov ecx, dword ptr [00447388]

:00406932 85C9 test ecx, ecx

:00406934 7414 je 0040694A

:00406936 FF742410 push [esp 10]

:0040693A 8B01 mov eax, dword ptr [ecx]

:0040693C FF742410 push [esp 10]

:00406940 FF74240C push [esp 0C]

:00406944 FF10 call dword ptr [eax] <--что-то скрывают?

Их того, что больше функций нет, я предположил, что функция call dword ptr [eax] тоже очень странна! Я опять зашёл в неё и оказался тут:

Это оказалось самое главное:

:0041FC4E 55 push ebp

:0041FC4F 8BEC mov ebp, esp

:0041FC51 83EC1C sub esp, 0000001C

:0041FC54 53 push ebx

:0041FC55 56 push esi

:0041FC56 57 push edi

:0041FC57 8BF9 mov edi, ecx

:0041FC59 FF7510 push [ebp 10]

:0041FC5C FF750C push [ebp 0C]

:0041FC5F FF7508 push [ebp 08]

:0041FC62 E84D6EFEFF call 00406AB4

:0041FC67 84C0 test al, al

:0041FC69 745C je 0041FCC7

:0041FC6B 8BCF mov ecx, edi

:0041FC6D E8E9060000 call 0042035B

:0041FC72 8BCF mov ecx, edi

:0041FC74 E80F070000 call 00420388

:0041FC79 84C0 test al, al

:0041FC7B 754A jne 0041FCC7

:0041FC7D 8BCF mov ecx, edi

:0041FC7F E80B030000 call 0041FF8F

:0041FC84 84C0 test al, al

:0041FC86 743F je 0041FCC7

:0041FC88 68A9010000 push 000001A9

:0041FC8D E8A2040000 call 00420134

:0041FC92 59 pop ecx

:0041FC93 50 push eax

:0041FC94 E8074B0100 call 004347A0

:0041FC99 59 pop ecx

:0041FC9A 8BF0 mov esi, eax

:0041FC9C 8BCF mov ecx, edi

:0041FC9E E8B9030000 call 0042005C <--Процедура генерации CRC

:0041FCA3 663BC6 cmp ax, si <--в ax - сгенерированный CRC, а в si - правильный (0x8560)

:0041FCA6 7426 je 0041FCCE <--если совпадают - прыгаем через сообщение о неверном CRC

Здесь необходимо заменить je 0041FCCE на jmp 0041FCCE, чтобы программа всегда думала, что CRC правильный.

Я сделал все необходимые изменения, но при запуске программы главное окно появилось и тут же закрылось, получив всего 5 сообщений (WM_???).

Так, Так, Так! Значит программа где-то ещё делает проверку! Я в этом месте немного помучался, но потом пошел старым и проверенным способом:

запустил программу в SymbolLoader’e и начиная с адреса 0041FC4E прошёлся по НЕ изменнённой программе отладчиком, записав все условные переходы. Затем то же самое проделал с изменённой программой, сравнивая условные переходы с неизменённой программой. И очень скоро по адресу 0041FE9B я натолкнулся на расхождение:

:0041FE9B 750B jne 0041FEA8 <--кракнутая программа здесь прыгала, в то время как НЕ кракнутая - НЕ прыгала

:0041FE9D 8B45FC mov eax, dword ptr [ebp-04]

:0041FEA0 3B05E0314400 cmp eax, dword ptr [004431E0]

:0041FEA6 7412 je 0041FEBA <--кракнутая - не прыгает, не кракнутая - прыгает!

Ура! Я нашёл вторую проверку на некракнутость!

Теперь я просто заменил jne 0041FEA8 на jne 0041FE9D, а

je 0041FEBA на jmp 0041FEBA и……..Все заработало! Ура! Баннера больше нет!

И ни на что программа не жалуется!!!

ВсЁ!

А для самых маленьких крак:

———-Начало крака—————-

Shtirlitz v4.0 Cracker

by vallkor (vallkor@chat.ru)

Shtirl~1.exe

00000C32: 0E 00

0001F0A6: 74 EB

0001F29C: 0B 00

0001F2A6: 74 EB

———- Конец Крака —————-

Исследовал и наваял туториал: vallkor//PTDS

E-mail: vallkor@chat.ru

Page : http://vallkor.chat.ru

{/codecitation}

Добавить комментарий