Delphi World - Взлом программ это просто - электронная кулинарная книга
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Взлом программ это просто - электронная кулинарная книга
Автор: 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 значит реально он находится 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

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования