Взлом программ это просто - электронная кулинарная книга
|
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
|