ИНФОРМАЦИЯ ИНФОРМАЦИЯ +----------------------------+ | Цель: 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