скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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


Автор: 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.

Поехали...

Первое, что надо сделать это запустить 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 значит реально он находится 40C26F - 400C00 = B66f. Теперь с адреса EE758, нажав Tab начинаем писать :


push 0
push edx
push edx
push 0
jmp B66f

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

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

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

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

Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru

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

With best wishes Fess






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook