Встраивание своего кода в чужие проги с целью краканья на лету на примере FontLister

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: DeeCo

Автор: http://www.cracklab.narod.ru

Инструменты: 1) Numega Softice fow WIN32

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

{/codecitation}

Добавить комментарий