Исследование Текстового перекодировщика Штирлиц версия 4.0
Оформил: 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
|