Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   ..:: Взлом программы: Teleport Pro 1.29 ::.. (https://forum.antichat.xyz/showthread.php?t=25307)

KindEcstasy 13.10.2006 11:31

..:: Взлом программы: Teleport Pro 1.29 ::..
 
ИНФОРМАЦИЯ

ИНФОРМАЦИЯ
+----------------------------+
| Цель: Teleport Pro 1.29
| Защита: [==-----] легко
| Версия бинарника: 1.29.2052
| Цена: $39.95 ~ 40 баков
+----------------------------+
ИНСТРУМЕНТЫ
+----------------------------+
| Отладчик: OllyDebuger
| Дизасмер: n/a
| HEX'ep: n/a
| Patcher: n/a
+----------------------------+


Программа Teleport Pro - очень извесный продукт. Используется для полного слива сайта из сети интернет на винчестер. Также может искать графику, архивы, и другие файлы. Но вот какая запора, незареганная прога может скачать только 500 файлов за 1 проект и воспользоваться ей можно только 40 раз! Исправим ситуацию...

Загружаем файл pro.exe в ольку. Ставим бряк на функцию 'GetWindowText' (Подробнее про эту и другие функции читайте в статье про Perfect Keylogger). Пускаем на выполнение. Перед тем как окончательно запуститься, программа несколько раз прервётся на вашем бряке. Пропустите все это клавишей 'F9', или просто нажмите на треугольник (Run Program...). Теперь входим в Help -> Register (прога тормознётся ещё пару раз, так что F9) и в полях для имени и ключа пишите:

Your Name: KindEcstasy | <----- (можно писать любое, но я обьясняю на примере меня =))
|
Reg. Code: 12345 | <----- (можно писать любоые, но главное цифры)

Нажимаем [OK] и выподаем в отладчик. Трассируем программу пока не выпадем в программу, то есть в статусной строке отладчика не увидем 'Running'. Итак картина должна быть следующая:


PHP код:

0042BCFF   3BF0           CMP ESI,EAX                    <------- Проверка
0042BD01   
59             POP ECX
0042BD02   
75 0F          JNZ SHORT pro.0042BD13         <------- Условный переход
0042BD04   
53             PUSH EBX                                
0042BD05   
53             PUSH EBX                                
0042BD06   
FF35 447B4800  PUSH DWORD PTR DS:[487B44]              
0042BD0C   E8 D1540200    CALL pro.004511E2                       
0042BD11   
EB 75          JMP SHORT pro.0042BD88
0042BD13   
8BBF D5000000  MOV EDI,DWORD PTR DS:[EDI+D5]
0042BD19   395F F8        CMP DWORD PTR DS:[EDI-8],EBX
0042BD1C   
75 0A          JNZ SHORT pro.0042BD28
0042BD1E   
53             PUSH EBX
0042BD1F   
53             PUSH EBX
0042BD20   
FF35 BC7B4800  PUSH DWORD PTR DS:[487BBC]              
0042BD26   EB 1B          JMP SHORT pro.0042BD43
0042BD28   
57             PUSH EDI
0042BD29   
E8 8B090000    CALL pro.0042C6B9
0042BD2E   
59             POP ECX
0042BD2F   
85C0           TEST EAX,EAX
0042BD31   
53             PUSH EBX
0042BD32   
53             PUSH EBX
0042BD33   
75 08          JNZ SHORT pro.0042BD3D
0042BD35   
FF35 C07B4800  PUSH DWORD PTR DS:[487BC0]               
0042BD3B   EB 06          JMP SHORT pro.0042BD43
0042BD3D     FF35 C47B4800  PUSH DWORD PTR DS
:[487BC4]              
0042BD43     E8 9A540200    CALL pro.004511E2              <---- Точка вапада в программу 

Смотрим на код. Смотрите! Программа делает проверку, вернее какое-то сравнение и потом в зависимости что возвращает эта проверка, делает переход на какой-то адрес. На самом деле сравниваются два значения регистров EAX и ESI, и если они не соврадают (проверка возвратила 1), то делает переход на смещение 0042BD13. Смотрите что у вас по адресу 0042BD13! У вас в комментариях ольки должно быть следующее:

0042BD13 > 8BBF D5000000 MOV EDI,DWORD PTR DS:[EDI+D5]

........
........ | <----- Тут идёт какой то код...
........

0042BD3D > FF35 C47B4800 PUSH DWORD PTR DS:[487BC4] ; |Arg1 = 0048C468 ASCII "We're sorry! The registration number you entered appears to be invalid. Please check both your name and the registration code and try entering them again. (Your name must be spelled exactly as you spelled it when you "...

(Жёлтым цветом я выделил коментарий отладчика)

Мы можем догадаться что перейдя по адресу 0042BD13 программа продолжает выполнение, и дойдя то 0042BD3D, в стек засунет смещение строки с текстом о неверной регистрации и выведет MessageBox c этим текстом. Конечно же лицезреть эту табличку мы с вами не хотим, да и не будем! А теперь вспомним, почему программа перешла именно по этому адресу (0042BD13)? Правильно, потому, что по адресу 0042BCFF произошла проверка, вернувшая 1-(единицу). Вообще JNZ расшифровывается как Jump if Not Zero (перейти если не ноль). Вот прога и перешла по ненужному нам адресу, а это значит, что регистры EAX и ESI - не равны, то есть содержат разные значения. Ну теперь то резонно предположить что сравниваются введённый серийник (12345) и правильный (специальный - для имени KindEcstasy). Давайте теперь посмотрим что в этих регистрах:

EAX 0AB4A6D9 ----> переводим в десятичную ----> 179611353
ESI 00003039 ----> переводим в десятичную ----> 12345


Но если 12345 ввели мы... то 179611353 сгенерила программа! Значит это и есть верный серийник! Окончательная картина ясна:

Your Name: KindEcstasy
Reg. Code: 179611353


Вводим, проверяем, работает? Ну и слава богу!
Вот и всё что я хотел рассказать в этой статье. Скоро мы с вами будем писать KeyGen по моей новой статье!

P.S. Плюсики приветствуются =)

Ну всё, пока!

(c) KindEcstasy


Время: 03:41