Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков программирования и крэкерства 6.0
(актуальность: февраль 2017)
Свежие инструменты, новые видеоуроки!

  • 300+ видеоуроков
  • 800 инструментов
  • 80 свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Inline Path - взгляд и методы новичка

Обсудить статью на форуме

Массу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.

Автор: vovanre <prikolist.1@mail.ru>

Привет друзья и недруги!
Сегодня я расскажу не много о Inline-Patch
На форуме я уже видел пару статей, но они как я понял они были написаны специально определённых пакеров (Themida,ExeCryptor …).
А сегодня я вам покажу простой и почти универсальный метод, подходит для всех лёгких пакеров\протекторов.
Запаситесь чаем, и спокойно внимайте.

На операционном столе сегодня у нас милая программка Click’Em, для полного списка ёё возможностей придётся лезть в гугл =D


Первым делом - нужно понять на каком языке, написана программа, пытаемся запихнуть в PeId, и видим фигу =\
Nothing found *

Аффтор выпей яду!

Ладно придёться ручками, пихаем в Restorator:
BitMap
String
RCdata


Ничего не напоминает? Правильно! Это Borland, уверен на 100%!

Думаете всё так просто? Ресторатор так же сказал что ресурсы запакованы =(

Распаковка? Начали!

{Отступление: НЕ распаковывайте QUnpacker’ом, вес дампа получается 59 мб! И как ни странно дамп пашет О_О}

ЭЭЭэх, попробуем загрузить в отладчик:

==========================================================================
03E8B850 > ? 60             PUSHAD
03E8B851   ? BE 00B0D603    MOV ESI,ClickEm.03D6B000
03E8B856   ? 8DBE 006069FC  LEA EDI,DWORD PTR DS:[ESI+FC696000]
03E8B85C   . 57             PUSH EDI
03E8B85D   . 89E5           MOV EBP,ESP
03E8B85F   . 8D9C24 80C1FFF>LEA EBX,DWORD PTR SS:[ESP-3E80]
03E8B866   . 31C0           XOR EAX,EAX
03E8B868   > 50             PUSH EAX
03E8B869   . 39DC           CMP ESP,EBX
03E8B86B   .^75 FB          JNZ SHORT ClickEm.03E8B868
03E8B86D   . 46             INC ESI
03E8B86E   . 46             INC ESI
03E8B86F   . 53             PUSH EBX
03E8B870   . 68 DD94A803    PUSH ClickEm.03A894DD
03E8B875   . 57             PUSH EDI
03E8B876   . 83C3 04        ADD EBX,4
03E8B879   . 53             PUSH EBX
03E8B87A   . 68 46081200    PUSH 120846
03E8B87F   . 56             PUSH ESI
03E8B880   . 83C3 04        ADD EBX,4
03E8B883   . 53             PUSH EBX
03E8B884   . 50             PUSH EAX
03E8B885   . C703 03000000  MOV DWORD PTR DS:[EBX],3
03E8B88B   . 90             NOP
03E8B88C   . 90             NOP
03E8B88D   . 90             NOP
03E8B88E   . 90             NOP
03E8B88F   . 90             NOP
03E8B890   . 55             PUSH EBP
03E8B891   . 57             PUSH EDI
03E8B892   . 56             PUSH ESI
03E8B893   . 53             PUSH EBX
03E8B894   . 83EC 7C        SUB ESP,7C
03E8B897   . 8B9424 9000000>MOV EDX,DWORD PTR SS:[ESP+90]
03E8B89E   . C74424 74 0000>MOV DWORD PTR SS:[ESP+74],0
03E8B8A6   . C64424 73 00   MOV BYTE PTR SS:[ESP+73],0
03E8B8AB   . 8BAC24 9C00000>MOV EBP,DWORD PTR SS:[ESP+9C]
03E8B8B2   . 8D42 04        LEA EAX,DWORD PTR DS:[EDX+4]
03E8B8B5   . 894424 78      MOV DWORD PTR SS:[ESP+78],EAX
03E8B8B9   . B8 01000000    MOV EAX,1
03E8B8BE   . 0FB64A 02      MOVZX ECX,BYTE PTR DS:[EDX+2]
03E8B8C2   . 89C3           MOV EBX,EAX
03E8B8C4   . D3E3           SHL EBX,CL
03E8B8C6   . 89D9           MOV ECX,EBX
03E8B8C8   . 49             DEC ECX
03E8B8C9   . 894C24 6C      MOV DWORD PTR SS:[ESP+6C],ECX
03E8B8CD   . 0FB64A 01      MOVZX ECX,BYTE PTR DS:[EDX+1]
03E8B8D1   . D3E0           SHL EAX,CL
==========================================================================



Я пропущу свои мысли, и скажу сразу, что это UPX + скамблер.
Для всех UPX есть чудный распаковщик, UpxUnpacker 0.2

Теперь закинем на форму Унпакера exe’шник и получим на выходе распакованный файл весом 3 мб,
проверяем – рабочий.

А далее простеньким All Referenced text String выходим на процедуру регистрации:


006DF031  |. 8BEC           MOV EBP,ESP
006DF033  |. 33C9           XOR ECX,ECX
006DF035  |. 51             PUSH ECX
006DF036  |. 51             PUSH ECX
006DF037  |. 51             PUSH ECX
006DF038  |. 51             PUSH ECX
006DF039  |. 51             PUSH ECX
006DF03A  |. 51             PUSH ECX
006DF03B  |. 53             PUSH EBX
006DF03C  |. 8BD8           MOV EBX,EAX
006DF03E  |. 33C0           XOR EAX,EAX
006DF040  |. 55             PUSH EBP
006DF041  |. 68 26F26D00    PUSH ClickEm_.006DF226
006DF046  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
006DF049  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
006DF04C  |. B2 01          MOV DL,1
006DF04E  |. A1 300E4300    MOV EAX,DWORD PTR DS:[430E30]
006DF053  |. E8 F8E2D5FF    CALL ClickEm_.0043D350
006DF058  |. 8945 F8        MOV DWORD PTR SS:[EBP-8],EAX
006DF05B  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
006DF05E  |. 8B10           MOV EDX,DWORD PTR DS:[EAX]
006DF060  |. FF52 44        CALL DWORD PTR DS:[EDX+44]
006DF063  |. BA 40F26D00    MOV EDX,ClickEm_.006DF240                ;  UNICODE "Unregistered"
006DF068  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF06E  |. E8 F962DEFF    CALL ClickEm_.004C536C
006DF073  |. 33C0           XOR EAX,EAX
006DF075  |. A3 1CC17000    MOV DWORD PTR DS:[70C11C],EAX
006DF07A  |. 33C0           XOR EAX,EAX
006DF07C  |. A3 18C17000    MOV DWORD PTR DS:[70C118],EAX
006DF081  |. 33C0           XOR EAX,EAX
006DF083  |. A3 60C17000    MOV DWORD PTR DS:[70C160],EAX
006DF088  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
006DF08B  |. 8B83 DC030000  MOV EAX,DWORD PTR DS:[EBX+3DC]
006DF091  |. E8 9E62DEFF    CALL ClickEm_.004C5334
006DF096  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
006DF099  |. 8B83 E0030000  MOV EAX,DWORD PTR DS:[EBX+3E0]
006DF09F  |. E8 9062DEFF    CALL ClickEm_.004C5334
006DF0A4  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
006DF0A7  |. BA 68F26D00    MOV EDX,ClickEm_.006DF268                ;  UNICODE "49C595DE38"
006DF0AC  |. E8 4F90D2FF    CALL ClickEm_.00408100
006DF0B1  |. 75 15          JNZ SHORT ClickEm_.006DF0C8
006DF0B3  |. BA 8CF26D00    MOV EDX,ClickEm_.006DF28C                ;  UNICODE "This code is banned!"
006DF0B8  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF0BE  |. E8 A962DEFF    CALL ClickEm_.004C536C
006DF0C3  |. E9 33010000    JMP ClickEm_.006DF1FB
006DF0C8  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
006DF0CB  |. 83CA FF        OR EDX,FFFFFFFF
006DF0CE  |. E8 85E9FAFF    CALL ClickEm_.0068DA58
006DF0D3  |. 85C0           TEST EAX,EAX
006DF0D5  |. 0F8E 13010000  JLE ClickEm_.006DF1EE               ; Плохой прыжок!
006DF0DB  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
006DF0DE  |. 83CA FF        OR EDX,FFFFFFFF
006DF0E1  |. E8 72E9FAFF    CALL ClickEm_.0068DA58
006DF0E6  |. 83F8 02        CMP EAX,2
006DF0E9  |. 75 36          JNZ SHORT ClickEm_.006DF121
006DF0EB  |. BA C4F26D00    MOV EDX,ClickEm_.006DF2C4                ;  UNICODE "Extended License"
006DF0F0  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF0F6  |. E8 7162DEFF    CALL ClickEm_.004C536C
006DF0FB  |. C705 1CC17000 >MOV DWORD PTR DS:[70C11C],-1
006DF105  |. B2 01          MOV DL,1
006DF107  |. 8B83 AC050000  MOV EAX,DWORD PTR DS:[EBX+5AC]
006DF10D  |. E8 4261DEFF    CALL ClickEm_.004C5254
006DF112  |. B2 01          MOV DL,1
006DF114  |. 8B83 B8080000  MOV EAX,DWORD PTR DS:[EBX+8B8]
006DF11A  |. E8 3561DEFF    CALL ClickEm_.004C5254
006DF11F  |. EB 10          JMP SHORT ClickEm_.006DF131
006DF121  |> BA F4F26D00    MOV EDX,ClickEm_.006DF2F4                ;  UNICODE "Registered"
006DF126  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF12C  |. E8 3B62DEFF    CALL ClickEm_.004C536C
006DF131  |> C705 60C17000 >MOV DWORD PTR DS:[70C160],-1
006DF13B  |. 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10]
006DF13E  |. 8B83 E0030000  MOV EAX,DWORD PTR DS:[EBX+3E0]
006DF144  |. E8 EB61DEFF    CALL ClickEm_.004C5334
006DF149  |. 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]
006DF14C  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
006DF14F  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
006DF151  |. FF51 38        CALL DWORD PTR DS:[ECX+38]
006DF154  |. 8D55 EC        LEA EDX,DWORD PTR SS:[EBP-14]
006DF157  |. 8B83 DC030000  MOV EAX,DWORD PTR DS:[EBX+3DC]
006DF15D  |. E8 D261DEFF    CALL ClickEm_.004C5334
006DF162  |. 8B55 EC        MOV EDX,DWORD PTR SS:[EBP-14]
006DF165  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
006DF168  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
006DF16A  |. FF51 38        CALL DWORD PTR DS:[ECX+38]
006DF16D  |. 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
006DF170  |. E8 2F82E3FF    CALL ClickEm_.005173A4
006DF175  |. 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
006DF178  |. BA 18F36D00    MOV EDX,ClickEm_.006DF318                ;  UNICODE "system\activecode.key"
006DF17D  |. E8 1A8CD2FF    CALL ClickEm_.00407D9C
006DF182  |. 8B55 E8        MOV EDX,DWORD PTR SS:[EBP-18]
006DF185  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
006DF188  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
006DF18A  |. FF51 7C        CALL DWORD PTR DS:[ECX+7C]
006DF18D  |. 33D2           XOR EDX,EDX
006DF18F  |. 8B83 DC030000  MOV EAX,DWORD PTR DS:[EBX+3DC]
006DF195  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
006DF197  |. FF51 74        CALL DWORD PTR DS:[ECX+74]
006DF19A  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF1A0  |. 8B40 64        MOV EAX,DWORD PTR DS:[EAX+64]
006DF1A3  |. BA 00800000    MOV EDX,8000
006DF1A8  |. E8 9FC5D7FF    CALL ClickEm_.0045B74C
006DF1AD  |. BA 00800000    MOV EDX,8000
006DF1B2  |. 8B83 F4030000  MOV EAX,DWORD PTR DS:[EBX+3F4]
006DF1B8  |. E8 2F63DEFF    CALL ClickEm_.004C54EC
006DF1BD  |. C705 18C17000 >MOV DWORD PTR DS:[70C118],-1
006DF1C7  |. A1 84C97000    MOV EAX,DWORD PTR DS:[70C984]
006DF1CC  |. 8B15 6CC17000  MOV EDX,DWORD PTR DS:[70C16C]
006DF1D2  |. 8910           MOV DWORD PTR DS:[EAX],EDX
006DF1D4  |. A1 34C47000    MOV EAX,DWORD PTR DS:[70C434]
006DF1D9  |. 8B15 18C17000  MOV EDX,DWORD PTR DS:[70C118]
006DF1DF  |. 8910           MOV DWORD PTR DS:[EAX],EDX
006DF1E1  |. A1 08C97000    MOV EAX,DWORD PTR DS:[70C908]
006DF1E6  |. 8B15 1CC17000  MOV EDX,DWORD PTR DS:[70C11C]
006DF1EC  |. 8910           MOV DWORD PTR DS:[EAX],EDX
006DF1EE  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
006DF1F1  |. 33D2           XOR EDX,EDX
006DF1F3  |. 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX
006DF1F6  |. E8 F964D2FF    CALL ClickEm_.004056F4
006DF1FB  |> 33C0           XOR EAX,EAX
006DF1FD  |. 5A             POP EDX
006DF1FE  |. 59             POP ECX
006DF1FF  |. 59             POP ECX
006DF200  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
006DF203  |. 68 2DF26D00    PUSH ClickEm_.006DF22D
006DF208  |> 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
006DF20B  |. E8 5887D2FF    CALL ClickEm_.00407968
006DF210  |. 8D45 EC        LEA EAX,DWORD PTR SS:[EBP-14]
006DF213  |. BA 03000000    MOV EDX,3
006DF218  |. E8 5387D2FF    CALL ClickEm_.00407970
006DF21D  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
006DF220  |. E8 4387D2FF    CALL ClickEm_.00407968
006DF225  \. C3             RETN




Ставим бряк и тыркая F8, находим «плохой» прыжок (006DF0D5):

Nop’им его и программа взломана! (не забудьте сохранить =D).

Вроде бы дело сделано, хотя...

А вы подумали на перёд? Кто будет таскать с собой 3 мб’овый exe’шник?

Нужно делать патч! Но как спросите вы? (драматическая пауза…)

И мой ответ Inline-patch!

Начнем, пожалуй?


Для начала подумаем:
Когда патч должен сработать? Правильно! После того как код распакуется в памяти!
Откроем ещё раз оригинальный файл в Олле, всё что вы увидите пропускаем и мотаем вниз:

=========================До этого дофига кода было , но я его убрал что бы н засорять статью=================================
03E8C3BB   .^EB E1          JMP SHORT ClickEm.03E8C39E
03E8C3BD   > FF96 98F9A803  CALL DWORD PTR DS:[ESI+3A8F998]
03E8C3C3   > 8BAE 8CF9A803  MOV EBP,DWORD PTR DS:[ESI+3A8F98C]
03E8C3C9   . 8DBE 00F0FFFF  LEA EDI,DWORD PTR DS:[ESI-1000]
03E8C3CF   . BB 00100000    MOV EBX,1000
03E8C3D4   . 50             PUSH EAX
03E8C3D5   . 54             PUSH ESP
03E8C3D6   . 6A 04          PUSH 4
03E8C3D8   . 53             PUSH EBX
03E8C3D9   . 57             PUSH EDI
03E8C3DA   . FFD5           CALL EBP
03E8C3DC   . 8D87 1F020000  LEA EAX,DWORD PTR DS:[EDI+21F]
03E8C3E2   . 8020 7F        AND BYTE PTR DS:[EAX],7F
03E8C3E5   . 8060 28 7F     AND BYTE PTR DS:[EAX+28],7F
03E8C3E9   . 58             POP EAX
03E8C3EA   . 50            PUSH EAX
03E8C3EB   . 54            PUSH ESP
03E8C3EC   > 50             PUSH EAX
03E8C3ED   . 53             PUSH EBX
03E8C3EE   . 57             PUSH EDI
03E8C3EF   . FFD5           CALL EBP
03E8C3F1   . 58             POP EAX
03E8C3F2   . 61             POPAD
03E8C3F3   . 8D4424 80      LEA EAX,DWORD PTR SS:[ESP-80]
03E8C3F7   > 6A 00          PUSH 0
03E8C3F9   . 39C4           CMP ESP,EAX
03E8C3FB   .^75 FA          JNZ SHORT ClickEm.03E8C3F7
03E8C3FD   . 83EC 80        SUB ESP,-80
03E8C400   .-E9 37D186FC    JMP ClickEm.006F953C ; Вот он! Вот прыжок!



То, что я выделил, прыгает на оригинальный код программы.

Давайте посмотрим, что можно прихапать для прыжка?
Мне, например нравятся вот эти строки:

03E8C3E9   . 58             POP EAX
03E8C3EA   . 50            PUSH EAX
03E8C3EB   . 54            PUSH ESP
03E8C3EC   > 50             PUSH EAX
03E8C3ED   . 53             PUSH EBX
03E8C3EE   . 57             PUSH EDI 



Окей нашли, где будем делать прыжок на код патча! Далее нужно найти, где этот код разместить, ну тут легко, просто чуть вниз мотаем и видим много нулей:

03E8C3F9   . 39C4           CMP ESP,EAX
03E8C3FB   .^75 FA          JNZ SHORT ClickEm.03E8C3F7
03E8C3FD   . 83EC 80        SUB ESP,-80
03E8C400   .-E9 37D186FC    JMP ClickEm.006F953C
03E8C405     00             DB 00
03E8C406     00             DB 00
03E8C407     00             DB 00
03E8C408     20C4E803       DD ClickEm.03E8C420
03E8C40C     7CC4E803       DD ClickEm.03E8C47C
03E8C410     04AA6F00       DD ClickEm.006FAA04
03E8C414     00             DB 00
03E8C415     00             DB 00
03E8C416     00             DB 00
03E8C417     00             DB 00
03E8C418     00             DB 00
03E8C419     00             DB 00
03E8C41A     00             DB 00
03E8C41B     00             DB 00
03E8C41C     00             DB 00
03E8C41D     00             DB 00
03E8C41E     00             DB 00
03E8C41F     00             DB 00
03E8C420     00             DB 00
03E8C421     00             DB 00
03E8C422     00             DB 00
03E8C423     00             DB 00
03E8C424     00             DB 00
03E8C425     00             DB 00
03E8C426     00             DB 00
03E8C427     00             DB 00




Начинаем кодить:
Код патча будет начинаться по адресу 03E8C419

Делаем прыжок:

03E8C3E9   . 58            POP EAX
03E8C3EA   . EB 2D          JMP SHORT ClickEm.03E8C419
03E8C3EC   > 50             PUSH EAX
03E8C3ED   . 53             PUSH EBX
03E8C3EE   . 57             PUSH EDI



Он «съел» 2 команды:
PUSH EAX
PUSH ESP
Это важно!
Напоминание
{
Вспомните адрес нужного прыжка, он равен = 6DF0D5
И там команда:
JLE 006DF1EE
Её можно занопать, но зачем мучатся, ёё можно просто обратить:
JNZ 006DF1EE

В байтовом представлении было:
0F8E
Стало:
0F85
Приходим к окончательному вердикту, по адресу 6DF0D6 (6DF0D5+1 т.к. второй байт) изменить значение с 8E ==> 85
}


Начинаем кодить сам патч, переходим по адресу указанному в прыжке и пишем:


MOV BYTE PTR DS:[6DF0D6],85        ;Записываем по адресу 6DF0D6 байт - 85
PUSH EAX			        ; Восстанавливаем что «съели» 1
PUSH ESP      			        ; Восстанавливаем что «съели» 2
 JMP SHORT ClickEm_.03E8C3EC       ;Прыгаем обратно
Retn    


Теперь тестируем!
Вводим любые данные и тыкаем регистрацию:

Ура товарищи! Ура!
Теперь можно делать нормальный патч, без распаковшика и всякой другой дряни!

Всем пока! И жду гнилых помидоров!


Я не могу понять =( , без отладчика работает нормально, а с ним через раз ошибки =\



Обсуждение статьи: Inline Path - взгляд и методы новичка >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS