4 Февраля, 2007

First crack

Санек
Сегодня я тебе расскажу о том как взломать защиту установленную на программе ,в этой статье мы будем взламывать программа которая создана для того что бы ее взламывали 8) . Такие ты сможешь

найти на сайте www.crackmes.de or www.cracklab.ru . Мы будем взламывать самую простую защиту . Скачай crackme#1 по этому линку www.quickm.clan.su/my_first_crack.rar , для взлома этой программы

нам понадобится OllyDbg (ищи ее на wasm.ru) , знание ассемблера (минимальное) и прямые руки ( где взять не знаю , узнаешь скажи 8) .

Начнем ...

Распакуй архив с crackme # 1 . В нем ты найдешь две программы crack and crackme , crack - это уже крякнутая программа , файл crackme ты будеь взламывать 8) .Запусти программу crackme (crack пока

не трогай ... ) и попробуй ввести любое значение вместо "Enter serial" и нажать "Try!Cracker" , программа выведет "Bad serial.Try yet" это означает то что программа не крякнутая и работать не будет. Теперь

запусти crack.exe , вместо "Enter serial" можешь ввести любое значение , жми на кнопу и лицезрей текст в котором сказано то что программа взломана . Твоя здача сделать из crackme - crack . Забегу в

перед и скажу что для взлома нам нужно исправить всего лишь один байтик и сохранить приложение с уже исправленым байтом , если ты понял что сделать , то вперед - действуй ! Ну а теперь обо всем и

подробно ... Для взлома программы обычно используется один из двух методов . Первый- исправления n-ного байта и сохранение программы с уже исправленым байтом , второй - написание кейгена

(более сложный чем 1-ый) . Сейчас мы разберем первый способ ( второй разберем в следуюшей статье) . Значит цель ясна , нам надо найти и исправить n-ный байт так , что бы программа при любом

вводимом значение выдавала сообщение о том что регистрационный код верен . Теперь нужно найти тот байт который нам надо исправить ... Открываем программу , вводим любой номер и жмем на

"Try!Cracker" и видим сообщение MessageBoxA с заглавием "CrackMe#1 by Shturmovik" и текстом "Bad serial.Try yet" . Запускай OllDbg и открывай в нем crackme , теперь давай найдем в исходнике

программы инфу о "SendMessageA" . Посмотрим какие функции выполняет программа с этой процедурой ... "DispatchMessageA" - это то что нам нужно ! Осталось лишь найти байт который должен быть

исправлен . Мы будем работать с текстом от метки "DispatchMessageA" и до метки "PostQuitMessage" . Вот этот отрывок кода :

PUSH EAX
CALL <JMP.&user32.DispatchMessageA>
JMP SHORT crackme.004010EE
MOV EAX,DWORD PTR SS:[EBP-44]
LEAVE
RETN 10
MOV EBP,ESP
ADD EBP,8
XOR ECX,ECX
XOR EDX,EDX
INC EDX
MOV EBX,DWORD PTR SS:[EBP]
INC CX
MOV AL,BYTE PTR DS:[ECX+EBX-1]
CMP AL,0
JE SHORT crackme.00401150
XOR AL,CL
SUB EBP,4
MOV EBX,DWORD PTR SS:[EBP]
MOV AH,BYTE PTR DS:[ECX+EBX-1]
XOR BX,BX
CMP AH,AL
JNZ SHORT crackme.00401148
INC BX
AND DX,BX
ADD EBP,4
JMP SHORT crackme.00401126
DEC DX
SUB EBP,8
RETN
PUSH EBP
MOV EBP,ESP
СMP DWORD PTR SS:[EBP+C],2
JNZ SHORT crackme.0040116B
PUSH 0

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

защиты сводится к такому коду на Delphi (для меня просто привычно использовать этот язык , поэтому и пишу на нем 8) : if <в edit1 текст = коду> then
Зарегистрировать программу
else
Вывести сообщение о неуспешной регистрации ...
По этому же принципу работает и эта программа ... если внимательно посмотреть на код то можно увидеть метку перехода JMP , вся строка кода выглядит таким образом "JMP SHORT 00401126" .

Выдели ее и нажми "Enter" . Тебя перенесет на строчку "MOV EBX,DWORD PTR SS:[EBP]" ... Я надеюсь ты уже понял что это тот байт который нужно заменить ... На что ?На "JZ SHORT 00401126" .
Теперь давай сохраним крякнутую программу . Для этого щелкни правой кнопкой мыши в любом месте исходного кода -> Copy to executable -> All Modification и сохраняй ... Теперь запусти и проверь ее ,

программа работает так же как и crack которую ты скачал в архиве . ПОЗДРАВЛЯЮ ТЕБЯ С УСПЕШНЫМ ВЗЛОМОМ !!!.














или введите имя

CAPTCHA
1
2 Сентября, 2007
RE: First crack
var i, len : cardinal; compname : pchar; name, serial : string; begin len := MAX_COMPUTERNAME_LENGTH + 1; GetMem(compname, len); if GetComputerName(compname, len) then begin name := string(compname); serial := ''; for i := 1 to len do serial := serial + chr(ord(name[i]) xor i); end; FreeMem(compname); end;
0 |