Взлом программ это просто — электронная кулинарная книга

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

Автор: Fess

K хакеру подходит ламер, протягивает исходник своей неработающей программы и спрашивает:

— Где у меня ошибка?

— В ДHK!!!

Target: Электронная кулинарная книга 3.3

Tools:

Some brains

Soft-Ice v3.4

Pe Identifier 0.7 beta

Win32Dasm 8.93

Caspr 1.100

ProcDump 1.6.2

C2C 0.06b (Compare2Crack)

Hex-editor (QView,Hiew)

Итак. Приступим.

Что же меня на это побудило? Да сущий пустяк, читал я как-то о новых прогах на www.softodrom.ru и натолкнулся на новую версию этой проги 3.3. Стал скачивать не пашет, еще попробовал эффект тот же. Полез на ихний сайт попытался там скачать не помогло. И пока не мог скачать смотрел отзывы об этой проге, и там было написано. Что жалко нету кряка к ней. Ну я подумал, дай думаю поисследую эту прогу. Искал ее везде и нашел на сервере www.pcsoft.ru или www.softpc.ru не помню точно.

Поехали…

Первое, что надо сделать это запустить Pe Identifier (peid.exe). Копируем его в каталог с программой и пишем командочку peid.exe kulinar.exe. Так… Он нам выдает, что прога-то оказывается пакована AsProtect 1.2. Интересно, интересно. (Помню ломал более старую версию проги 2.1 и она не была запакована ничем, и номер в ней считался так: ключ делим 2DDh, округляем и прибавляем к полученному 1E80A4. Легко не правда-ли? Теперь я почувствовал, что автор поберегся…)

Но и на AsProtect найдется управа, достаем Caspr. Он так же входит в состав программы UnPack. Копируем его в каталог с программой и набираем следующую комманду: caspr.exe kulinar.exe. После этого в каталоге на один файл стало больше. Х-м-м… Откуда однако? А!!!! Должно быть это и есть распакованный файл он называется kulinar.ex_. Хорошо, хорошо, потираем руки мы. И продолжаем свой нелегкий труд.

Опять запускаем peid.exe, но уже с параметром kulinar.ex_. И видим, что программка, то написана на Делфях, а на них то ж и ежу понятно защитить путно НЕВОЗМОЖНО. На мыслю сразу приходят огромные вложенности и другая ерунда.

Пришла пора запустить Soft-Ice. Запускаем прогу, переходим на вкладку Регистрация. И в место сер.ном. вводим 110022334455, так легче всего искать строку в памяти. Нажимаем Ctrl-D, вываливаемся в Soft-Ice. Пишем

s 0 l fffffffff «1100223344». Нажимаем Enter.

Что тут и зачем спросите вы.

s — указывает, что это поиск.

0 — это адрес с которого начинать искать.

l — указывает, что дальше идет длинна.

fffffffff — длинна области поиска данных.

«1100223344» — строка которую мы ищем.

У меня она нашлась на 80510EF2. Ставим бряк на эту область памяти. Ведь проге эту строчку считывать когда-нибудь надо, а? Это делается командой bpmb , т.е. у меня это bpmb 80510EF2 Ввели. Хорошо. Нажимаем кнопку «Зарегистрировать» и вываливаемя в Soft-Ice. Далее все просто. Нажимаем F12 не вывалимся в программу kulinar.exe, здесь для этого надо нажать 7 раз. Потом нажимаем на F12 еще несколько раз пока не увидим присвоение eax адреса в памяти (5 раз), и там будут такие строки (взято из Win32Dasm)

:004EF314 8B8530FEFFFF mov eax, dword ptr [ebp FFFFFE30]

:004EF31A 50 push eax

:004EF31B 8D8528FEFFFF lea eax, dword ptr [ebp FFFFFE28]

:004EF321 E80286FFFF call 004E7928

:004EF326 FFB528FEFFFF push dword ptr [ebp FFFFFE28]

:004EF32C 6868F44E00 push 004EF468

:004EF331 8D8524FEFFFF lea eax, dword ptr [ebp FFFFFE24]

:004EF337 E8006FF7FF call 0046623C

:004EF33C FFB524FEFFFF push dword ptr [ebp FFFFFE24]

:004EF342 8D852CFEFFFF lea eax, dword ptr [ebp FFFFFE2C]

:004EF348 BA03000000 mov edx, 00000003

:004EF34D E8324CF1FF call 00403F84

:004EF352 8B952CFEFFFF mov edx, dword ptr [ebp FFFFFE2C]

:004EF358 58 pop eax

:004EF359 E8764CF1FF call 00403FD4

:004EF35E 0F85BA000000 jne 004EF41E

:004EF364 8B15DCBD4F00 mov edx, dword ptr [004FBDDC]

:004EF36A 8B12 mov edx, dword ptr [edx]

После выполнения строки 4EF314 по адресу в eax будет находится адрес нашей строки. Строка 4EF35E сразу кажется нам подозрительной, что это за условный переход после выполнения процедуры? Возможно ли, что это процедура сравнения? И что заносится в edx и eax перед выполнением процедуры? Проверим!!!!

Удаляем точку останова (бряк) на памяти командой bc *. И доходим нажимая F10 до строки 4EF352. Выполняем ее. Пишем команду d edx (показать область памяти по адресу edx). Там мы видим какую-то строку очень напоминающую серийный номер. Переписываем на мятый и валяющийся тут же рядом листок бумаги знававший лучшие времена. Мало ли, вдруг пригодится? Выполняем следующую строчку и пишем команду d eax, там как ни странно находится наш введенный номер. После этого у нас не остается сомнений, что номер верен. Проверим?!!!! Воодим куда следует и программа нас хвалит, что все законно и рульно. И все бы вроде бы хорошо, да вот только зачем автор приписал Win32Dasm в инструменты. Да-да-да именно за тем… и вам того же. А вообще-то, решия я сбацать keygen давно хотел. А бацать мы его будет не на чем нибудь, а сделаем из этой же программы. Дизассмемблирем его. Что? Не получается? А попробуйте так. Запустите ProcDump выберите PeEditor Выберите распакованный файл. Нажмите кнопку Sections. На самой верхней секции нажмите пра

вой кнопкой мыши и выберите Edit section, в поле Characteristics введите вместо C0000040 строку E0000020. Кому интересно почему так, а не иначе обращайтесь к стандарту PE файлов. Теперь можете дизассемблировать.

Я тут подумал и решил сделать вывод номера функцией MessageBoxA Формат команды такой

MessageBoxA(идентификатор окна, заголовок,текст,атрибуты)

Т.е. наш текст на асме будет выглядеть так:

push 0 ; идентификатор окна

push edx ;заголовок — где edx адрес правильного номера

push edx ;текст — где edx адрес правильного номера

push 0 ; аттрибуты стандартные

call MessageBoxA ;Вызов процедуры генерации окна

Т.к. я не догнал как вызвать MessageBoxA в уже скомпилированной проге решил вызвать какой-нибудь из уже существующих с нашмими параметрами. Я решил взять по адресу 40C26F. Т.е. введем push’и и прыгнем jump’ом. Писать будем начиная 4EF358 программу все равно запорем. Теперь переименовываем файл kulinar.ex_, который мы распаковали и дисассемблировали в kulcrk.exe. Копируем сюда же qview. Набираем в командной строке: qview kulcrk.exe. Нажимаем Enter, вошли. Т.к. у Delphi реальные адреса в программе не совпадают с виртуальными (в памяти), то придется искать по сигнатуре. Т.е. ищем сначала такую строку E8324CF1FF8B952CFEFFFF для этого переходим в режим дизассемблера два раза F4. И в режим 32 бит. F2 один раз. Такая строка встречается 1 раз по адресу EE758 приглядывамся, это она и есть значит здесь 4EF358=EE758. Теперь ищем Call MessageBoxA, если подумать, то его можно узнать выразив из разницы значений 4EF358-EE758= 400C00, значит если в памяти MessageBox находится по адресу 40C26F значит реально он находится 40C2

6F — 400C00 = B66f. Теперь с адреса EE758, нажав Tab начинаем писать :

push 0

push edx

push edx

push 0

jmp B66f

Теперь если все написали, сохраняем и запускаем этот файл. По идее, если все делали правильно, то при вводе неправильного или правильного номера, появляется окно, в котором правильный номер будет написан. Переписываем его. Запускаем нормальный файл, вводим правильный номер и РУЛЛЛЕЗЗЗ!!!!!

Все кончено, программа сломана без особых ухищрений. На последок могу только сказать товарищи программисты не будьте так наивны.

Все просто ибо бытие состоит из простых вещей, и в нереальности невозможно отличить простое от сложного.

Компьютер бесценен, ибо есть критерии по которым его оценить нельзя!

Все ругательства отправлять в null

Все остальное на lomovskih@yandex.ru

З.Ы. Возможны ошибки. Взлом игры 3 минуты. Написание статьи 50 минут, видите как старался.

With best wishes Fess

{/codecitation}

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