Встраивание своего кода в чужие проги с целью краканья на лету на примере FontListerDelphi , Программа и Интерфейс , Исследование программВстраивание своего кода в чужие проги с целью краканья на лету на примере FontLister
Оформил: DeeCo 2) HVIEW 3) ProcDump Как-то попался мне диск "Журнал Хакер" на котором было много шароварных прог. (Что же это за "хакеры" которые издают диски с шароварными программами, львиная доля которых откровенный отстой, ну да ладно...) На диске была программа FontLister... Итак, программа триальная, при старте огромный НАГ-скрин с надписью Unregistered User а также в окне о программе записывается дата установки и если дата установки далека от текущей, то... фигня дело вобщем :) Будем кракать... Запускаем программу при помощи SymbolLoader'a из пакета SoftIce, чтобы оказаться в самом начале программы, мы окажемся здесь: 015F:004D4BF9 MOV EBP,ESP 015F:004D4BFB ADD ESP,-0C 015F:004D4BFE MOV EAX,004D4868 015F:004D4C03 CALL 00406460 015F:004D4C08 MOV EAX,[004D6778] 015F:004D4C0D MOV EAX,[EAX] 015F:004D4C0F MOV EDX,004D4CD8 015F:004D4C14 CALL 004502F8 015F:004D4C19 MOV EAX,[004D6778] 015F:004D4C1E MOV EAX,[EAX] 015F:004D4C20 ADD EAX,38 015F:004D4C23 MOV EDX,004D4CEC 015F:004D4C28 CALL 00403B58 015F:004D4C2D XOR EAX,EAX 015F:004D4C2F PUSH EBP 015F:004D4C30 PUSH 004D4CB6 015F:004D4C35 PUSH DWORD PTR FS:[EAX] 015F:004D4C38 MOV FS:[EAX],ESP 015F:004D4C3B CALL 004D474C 015F:004D4C40 TEST AL,AL 015F:004D4C42 JZ 004D4C78 <-- очень подозрительный условный переходПопробуем поменять по адресу 015F:004D4C42 команду JZ 004D4C78 на JMP 004D4C78 и с удивлением обнаружим, что наг-окна при старте нет. Теперь сделаем так, чтобы в меню "о программе" всегда высвечивалась "правильная" дата инсталяции: Запустим Regedit.exe и посмотрим к каким записям в реестре обращается наша прога и находим очень интересный раздел: HKEY_CURRENT_USER\Software\ConquerWare\FontLister\Registration\Dateв котором, очевидно, хранится дата инсталляции. А если убить эту запись? Может прога подумает, что мы тока инстальнулись и запишет туда сегоднящную дату? И правда, после того как я убил этот раздел, он был заново создан прогой, но с текущей датой. (Очень глупо). Но нам перед каждым запуском килять запись не очень удобно, поэтому тут два варианта: 1) Искать в программе то место, где проверяется наличие ключа Date 2) Встроить в программу маленькую функцию, которая при запуске проги будет килять разедел. Я выбрал второй вариант, потому как это сложнее и интереснее, а как сказал кто-то "Если это будет просто, то это того не стоит!". Приступми: встраивать будем функцию RegDeleteKeyA, т.к. эта функция предназначена для удаления записей реестра и она содержится в импорте нашей программы :) Посмотрим на параметры, которые надо передавать этой функции: LONG RegDeleteKeyA( HKEY hKey, // handle of open key LPCTSTR lpSubKey // address of name of subkey to delete );у нас параметры приймут вид: hKey = HKEY_CURRENT_USER = 0x80000001 lpSubKey = "Software\ConquerWare\FontLister\Registration",0Я предлагаю изменить OEP (Точка входа в программу) на начало нашей процедуры: push offset lpSubKey push 80000001h call RegDeleteKeyA jmp настоящая_точка_входаЯ нашел свободного места (под свободным местом понимаем кучу 20h) по адресу 004D50BF Заглянув в таблицу импорта, я узнал, что фактическим вызовом call RegDeleteKeyAбудет call 000056DCТакже я узнал, что OEP = 004D4BF9, заменим его при помощи ProcDump или вручную на адрес начала нашей процедуры (004D50BF) и по адресу 004D50BF пишем в HVIEW такую процедуру: .004D50BE: 90 nop .004D50BF: 68D3504D00 push 0004D50D3 ;" MP+" .004D50C4: 6801000080 push 080000001 ;"А " .004D50C9: E80E14F3FF call RegDeleteKeyA ;advapi32.dll .004D50CE: E925FBFFFF jmp .0004D4BF8 -------- (2)и сразу за процедурой вписываем строку: "Software\ConquerWare\FontLister\Registration",0В HVIEW получим следующее: .004D50D0: BD 32 00 53-6F 66 74 77-61 72 65 5C-43 6F 6E 71 +2 Software\Conq .004D50E0: 75 65 72 57-61 72 65 5C-46 6F 6E 74-4C 69 73 74 uerWare\FontList .004D50F0: 65 72 5C 52-65 67 69 73-74 72 61 74-69 6F 6E 00 er\RegistrationТеперь меняем точку входа в программу на 004D50BE (что на единицу меньше, чем адрес нашей процедуры, но так надо! Это тема не этой статьи). И ... При старте программа сначала выполнила нашу небольшую процедурку, т.е. убила раздел о регистрации и потом передала управление оригинальной программе, которая создала раздел по-новой и записала туда сегоднящнюю дату. Вау! Кульно. Теперь осталось вместо строки "Unregistered User" вставить что-то типа "cracked_by_vallkor". Делается это просто: Заходим в HVIEW нажимаем F7 (поиск) ищем строку "Unregistered User" и меняем на что угодно, только в конце новой строки не забывайте ставить нулевой байт. Крак делайте сами, поскоку слишком много изменений, а QVIEW не плюсюет автоматом ImageBase :) На этом досвиданья. Исследовал (и получил от этого удовольствие): vallkor [PTDS] E-mail : vallkor@chat.ru Page : vallkor.chat.ru
В статье описывается процесс краканья программы FontLister с помощью вставки собственного кода, целью которого является изменения даты регистрации при запуске программы. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |