Rambler's
Top100

Исследование защиты SP Shell Icons 1.28

Автор: FEUERRADER
Дата: 12.05.2003
Раздел: Reverse Engineering

Взлом SP Shell Icons 1.28

Программа: SP Shell Icons 1.28 Размер: 199680 байт Язык: Borland Delphi 4.0 - 5.0 Защита: Регистрационный номер Цель: взлом Инструменты: ASPackDie 1.41, Win32Dasm 9.0 (!)

Описание: прога для замены стандартных иконок в Windows на более красивые, которые предлагает прога. Пакеты с иконками можно качать с их сайта (www.drand.ru). При установке иконок прога просит какой-то ключ, который можно бесплатно получить с сайта автора. Корректность ключа проверяется "на лету" и в статусбар при правильном ключе пишется: "Your Key Passed!"

Исследование: начнем с того, что упаковано всё ASPack 1.1c (как показывает PeID). Берем ASPackDie 1.41 by Y0da; без труда распаковываем... Теперь суем в Win32Dasm 9.0. Почему 9.0, да потому что в этой версии поддерживается кириллица, хотя много и ненужных срок в SDR! Кстати, для чистоты эксперимента я получил код с ихнего сайта, он оказался такой:
"мой@имэйл.ру|711411640801501790901460211801901501" (сходите к ним на сайт и получите свой номер, а таскать чужой не хорошо!). Т.е проверяется имя до знака "|" и цифры. Вернемся к Win32Dasm. Итак, ищем строку "You agree with license agreement?". С этой мессаги начинается установка иконок. Ты жмешь в проге "Да" и дальше он просит номер, если ввел верный номер, после нажатия на ту же кнопку "Install" прога нормально функционирует. Похоже нам придется просто найти пару джампов и пропатчить их... Итак, мы видим в окне:

* Possible StringData Ref from Code Obj ->"You agree with license agreement?"
                                  |
:00466366 B83C6C4600              mov eax, 00466C3C
:0046636B E87C94FEFF              call 0044F7EC     <--выдает противную мессагу
:00466370 83F807                  cmp eax, 00000007 
:00466373 7505                    jne 0046637A      <-если жмем "YES"--\
:00466375 E8224AFAFF              call 0040AD9C                        |
                                                                       |
* Referenced by a (U)nconditional or (C)onditional Jump at Address:    |
|:00466373(C)                                                          |
|                                                                      |
:0046637A 33D2                    xor edx, edx     <------------------/
:0046637C 8B861C030000            mov eax, dword ptr [esi+0000031C]
:00466382 E8495FFCFF              call 0042C2D0
:00466387 33D2                    xor edx, edx
:00466389 8B8620030000            mov eax, dword ptr [esi+00000320]
:0046638F E83C5FFCFF              call 0042C2D0
:00466394 A1688F4600              mov eax, dword ptr [00468F68]
:00466399 8B00                    mov eax, dword ptr [eax]
:0046639B E80840FEFF              call 0044A3A8
:004663A0 8D55FC                  lea edx, dword ptr [ebp-04]
:004663A3 8B861C030000            mov eax, dword ptr [esi+0000031C]
:004663A9 E80A60FCFF              call 0042C3B8
:004663AE 8B55FC                  mov edx, dword ptr [ebp-04]
:004663B1 B8686C4600              mov eax, 00466C68
:004663B6 E879DBF9FF              call 00403F34
:004663BB 85C0                    test eax, eax <--джамп на проверку
:004663BD 0F8E85000000            jle 00466448  <--кода в переменной
:004663C3 8D55F8                  lea edx, dword ptr [ebp-08]
:004663C6 8B861C030000            mov eax, dword ptr [esi+0000031C]
:004663CC E8E75FFCFF              call 0042C3B8
:004663D1 8B45F8                  mov eax, dword ptr [ebp-08]
:004663D4 E80342FFFF              call 0045A5DC
:004663D9 84C0                    test al, al   <--опять похожая проверка
:004663DB 0F854B010000            jne 0046652C
:004663E1 8D45F4                  lea eax, dword ptr [ebp-0C]
:004663E4 E813C8FEFF              call 00452BFC
:004663E9 8B45F4                  mov eax, dword ptr [ebp-0C]

Идем по переходу 0046652c.

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004663DB(C), :00466443(U)
|
:0046652C 833D30A9460000          cmp dword ptr [0046A930], 00000000
:00466533 0F87DA000000            ja 00466613
:00466539 8D45E0                  lea eax, dword ptr [ebp-20]
:0046653C E8BBC6FEFF              call 00452BFC
:00466541 8B45E0                  mov eax, dword ptr [ebp-20]

* Possible StringData Ref from Code Obj ->"Русский"
                                  |
:00466544 BA746C4600              mov edx, 00466C74
:00466549 E80AD8F9FF              call 00403D58
:0046654E 7562                    jne 004665B2
:00466550 6A00                    push 00000000
:00466552 668B0D606F4600          mov cx, word ptr [00466F60]
:00466559 B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"Вы забыли подключить к программе "
                                        ->"пакет с иконками! Если в архиве "
                                        ->"не было файла с расширением ssp, "
                                        ->"его можно скачать с сайта. Если "
                                        ->"он уже есть у Вас - нажмите кнопку "
                                        ->""OK", чтобы его подключить."

Т.е. далее идет код, не относящийся к регистрации. Получается, надо заNOPить переход 004663BD и исправить на безусловный переход 004663DB. А также уберем противное сообщение о соглашении. ЗаНОПим call по адресу 0046636B и правим переход на безусловный в 00466373. Ну всё, работает вроде всё отлично, тутор окончен, до свидания.............

Но НЕТ! Щелкаем на кнопку "Free Bug Report" и прога опять требует код!!! Опять ищем в WinDasm строчку "Before enter your key (correct)". Пару страниц вверх видим:

* Possible StringData Ref from Code Obj ->"Your Key"
                                  |
:00463D98 BA3C444600              mov edx, 0046443C
:00463D9D E8B6FFF9FF              call 00403D58
:00463DA2 7439                    je 00463DDD      <--джамп на ошибку

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00463D2B(C)
|
:00463DA4 8D55F0                  lea edx, dword ptr [ebp-10]
:00463DA7 8B831C030000            mov eax, dword ptr [ebx+0000031C]
:00463DAD E80686FCFF              call 0042C3B8
:00463DB2 8B55F0                  mov edx, dword ptr [ebp-10]
:00463DB5 B850444600              mov eax, 00464450
:00463DBA E87501FAFF              call 00403F34
:00463DBF 85C0                    test eax, eax
:00463DC1 7E1A                    jle 00463DDD      <-- на ту же ошибку
:00463DC3 8D55EC                  lea edx, dword ptr [ebp-14]
:00463DC6 8B831C030000            mov eax, dword ptr [ebx+0000031C]
:00463DCC E8E785FCFF              call 0042C3B8
:00463DD1 8B45EC                  mov eax, dword ptr [ebp-14]
:00463DD4 E80368FFFF              call 0045A5DC
:00463DD9 84C0                    test al, al
:00463DDB 7555                    jne 00463E32  <--на нормальный код

Отлично! NOPим джампы по 00463DA2, 00463DC1. А по адресу 00463DDB исправляем джамп на безусловный. Вот и все. Прога ничего не просит и нормально банчит.

А теперь, как говорит Vallkor "для самых ленивых, кряк":

Difference(s) between unpacked.exe & unp_cracked.exe
unp_cracked.EXE
==============резать=тут==================
00063DA2: 74 90
00063DA3: 39 90
00063DC1: 7E 90
00063DC2: 1A 90
00063DDB: 75 EB
0006636B: E8 90
0006636C: 7C 90
0006636D: 94 90
0006636E: FE 90
0006636F: FF 90
00066373: 75 EB
000663BD: 0F 90
000663BE: 8E 90
000663BF: 85 90
000663C0: 00 90
000663C1: 00 90
000663C2: 00 90
000663DB: 0F E9
000663DC: 85 4C
000663DD: 4B 01
000663DE: 01 00
000663E0: 00 90
==============резать=тут==================

Спасибо за интерес к этой статье!



Все права защищены ©  2003 
...::FEUERRADER::...




Rambler's Top100