Zpět na seznam článků     Číst komentáře (38)     Verze pro tisk

Cracking4neWBies - Lekce č.1

Autor: DjH   
14.8.2007

Cracking pro úplné začátečníky...poprvé...:-)


Cracking4neWBies

Úvod

Pár slov předem: Zde uvedené návody slouží pouze pro osobní, studijní účely!!! Prosím omluvte nepřesné nebo neodborné názvy, kdyžtak na ně upozorněte v komentářích.

Na českých stránkách je hodně málo stránek o Reverse Engineeringu (dále jen RE, Rev. Eng. = Cracking), nejlepší ze stránek jsou asi picaso.poupe.net a www.t4c.ic.cz. Stránky už nejsou bohužel aktualizovány a na českých stránkách jsem vyloženě dobrou stránku o crackingu nenašel. Proto se snažím RE uvést znovu do provozu. Uvedu vám asi 7 lekcí o crackingu...
Dnešní aplikace, programy a hry jsou velmi kvalitně chráněny, ale „vždycky všechno jde“. Podle mého názoru je „lepší“ si zvolit cestu crackingu, než hackingu, protože u crackingu se jedná o kód, který je na našem počítači, a jde vždycky upravit, zatímco u hackingu „nikdy nevíte“…
Do RE se nemůžete pouštět jen tak. Musíte být aspoň průměrný programátor v Assembleru, a porozumět jednotlivým instrukcím. Předem říkám, že jsem začátečník, a proto promiňte některé nepřesné výrazy. Potom musíte mít určitou softwarovou výbavu. Ze základních patří tyto programy:


Olly Debugger (OllyDbg) – Toto je vynikající freewarový debugger, zobrazí vám jednotlivé intrukce v assembleru, můžete se podívat do paměti RAM, měnit flagy a měnit procesorové registry. Má komfortnější ovládání než SoftICE (viz níže) a proto pracuji právě v OllyDbg.

SoftIce – Debugger od společnosti Numega. Crackeři uvádějí, že je to jejich nejoblíbenější firma. Tento debugger je placený a pracuje v DOSovském prostředí. Má sice více možností než Olly, ale mě Olly vyhovuje více. Popravdě řečeno jsem tenhle debugger nainstaloval, jednou použil, a potom hned smazal…

DeDe – Delphi Decompiler. Dekompiluje vám aplikaci vytvořenou v Delphi, můžete se dívat na jednotlivé Formy, a procedury. *.pas soubor vám sice nevykouzlí, místo toho se vám objeví asm instrukce i s adresami.

IDA – Interactive DisAssembler, je to nejlepší DisAssembler (dále jen Dasm) vůbec. Je ale placený a složitý na ovládání. Ale na prohlídnutí asm kódu postačí. Navíc ukáže graf posloupnosti programu. Já osobně IDu nepoužívám, moc mi nevyhovuje, ale jednou za čas si v tomto Dasmu disassemblluju program.

W32Dasm – Výborný freewarový Dasm. Používám ho raději než IDu a umí jednu skvělou věc co IDA neumí, a to je vyhledávání stringů v jednotlivých částech kódu…

PEiD – Freewarový program, který zjistí, čím je program skompilován, popřípadě zapakován nebo krypován. Při Gereric unpacker a UPX unpacker plug-inu, dokáže program i rozpakovat.

eXeScope – Tento program snad používám jenom já. Zobrazuje hlavičku exe souboru, importované a exportované funkce a resources. Popravdě řečeno, tímhle programem začínám vždycky crackovat.

PEditor – Editor hlaviček v exe souboru. Většinou zde měním characteristics sections. Při špatně nasavené sekci, nejde program načíst třeba do W32Dasmu. Nebo při kompresi UPX a vymazaných jménech sections, je zde doplním. NEŽ JAKÝKOLIV PROGRAM BUDETE CHTÍT UPRAVIT, ZÁLOHUJTE HO!!!

UPX – Ultimate Packer for eXecutables. Program zkomprimuje exe soubor (exe, dll, ocx a další PE soubory…). Program umí i dekomprimovat. Po zkomprimování a vymazání jmen sekcí a upravených characteristics, už nejde program normálně unpacknout pomocí UPX. Musí se sekce zpět přepsat, dumpnout, nebo genericky unpacknout.

ProcDump – Program programovaný v MASM assembleru. Dokáže dumpnout program z paměti RAM. Předem upozorňuji, že program takto dumpnutý většinou nefunguje, hlasí různé chyby a kód nedává smysl. Program dále umí rozpackovat exe pomocí asi 40ti unpackerů. Má v sobě i integrovaný editor hlaviček.

To je z nejdůležitějších programů asi vše. Ještě existuje program Hiew ale ten já nepoužívám, není proč.
Jak již jsem napsal, musíte umět aspoň základy assembleru. Nemusíte v něm nutně umět programovat (to neumím ani já, tedy…jen základy, nic moc extra), ale musíte rozumnět jednotlivým instrukcím. Za chvíli je vypíšu…
K zahození nebude ani znalost jazyka C++, nebo Delphi (Pascal). V céčku si naprogramujeme patchy a cracky, a v Delphi si zkusíme (někdy:-)) naprogramovat jednoduché CrackMe (dále jen CMe). CrackMe je vlastně program, který je speciálně určený pro cracknutí.
Zde je slibovaný popis instrukcí:

CMP EAX, EBX – porovná registr EAX s EBX (samozřejmě může i jiné), pokud se sobě rovnají, nastaví zero flag na jedničku

JMP 004010F5 – Jump, skok na adresu(v tomto případě: 004010F5)

JE 004010F5 – Jestli je Zero-Flag (dále jen ZF) nastaven na 1, skoč…jestli je ZF=0, tak pokračuj…

JNZ 004010F5 – Úplný opak toho předchozího. Tedy: Jestli je ZF nastaven na 0, skoč…jestli je ZF=1, tak pokračuj…

CALL – volá instrukci, kde se něco počítá, je to něco jako „goto“, můžtete tuto instrukci v debuggeru přeskočit „F8“ nebo „jít do callu“ (trace into), tlačítkem „F7“

NOP – NO OPeration, žádná operace…tento příkaz je zkrátka zbytečný, ale i přes to je to jeden z nejdůležitějších příkazů

PUSH EAX – Uložení slova do zásobníku EAX

POP EAX – Vyjmutí slova ze zásobníku EAX

RETN – pokud vstoupíte do CALLu, tak RETN (return) vrací zpět program na adresu, odkud call pocházel. Jednoduše je to ukončení CALLu.

XOR – početní operace, zapněte si kalkulačku ve Windows, nastavte ji na „Vědecký“ mód, a operaci XOR tam taky máte. Pokud se XORují dvě stejné hodnoty (xor eax, eax; xor eax, 123 - přičemž v eax je právě 123), nastaví Zero-Flag na jedničku. Kalkulačka s Poznámkovým blokem jsou taky vlastně aplikace, které budete s crackingem potřebovat…


Lekce č.1

Cracknutí Crackme
Zde vám popíšu nejjednodušší příklad. Zde je popsáno co potřebujete:
Crackme.exe // CMe ze stránek Programujte.com OllyDbg // Debugger Znalosti C++ // na výrobu patchu… není nutné…
Nějaký c++ kompilátor popř. editor…Nejlepší bude Microsoft Visual C++ 2005 Express Edition, ale „jen“ s Dev-Cpp to taky půjde… Spustíme si CMe, vidíme EDITBOX a BUTTON na zaregistrování…
Bezva… Předem říkám, že CMe nemá žádnou proticrackerskou ochranu ani není zapakovaný, takže si ho rovnou můžeme otevřít v Olly… Kód tohoto programu si můžeme vyloženě prohlédnout celý, protože CMe je opravdu malé… Při projíždění kódem jste nemohli přehlídnout na adrese 004011AC string „Špatné sériové číslo!“… Jdeme nahoru po stopách kódu… Tenhle kousek je zajímavý:
…… 00401167 . 33C0 XOR EAX, EAX //EAX=0
00401169 . 33C9 XOR ECX, ECX //ECX=0
0040116B . A1 D3304000 MOV EAX, DWORD PTR DS:[4030D3] //do EAX dej to, co je v EDITu
00401170 . B9 5A415244 MOV ECX, 4452415A //ECX=4452415Ah
00401175 . 33C1 XOR EAX, ECX //Vyxoruj EAX s ECX
00401177 . 33D2 XOR EDX, EDX //vynuluj EDX
00401179 . BB 77770100 MOV EBX, 17777 //EBX=17777h
0040117E . F7F3 DIV EBX //vyděl EBX
00401180 . 35 86140000 XOR EAX, 1486 //Vyxoruj EAX s 1486h
00401185 . /75 1E JNZ SHORT crackme_.004011A5 //Jestli není s/n správný skoč…**
00401187 . |6A 00 PUSH 0
00401189 . |68 CC304000 PUSH crackme_.004030CC
0040118E . |68 6A304000 PUSH crackme_.0040306A………


**:Toto je naše důležitá instrukce…Zkušený cracker by podle instrukcí od adresy 401167 do 401180 vypočítal správné s/n…ale my jsme začátečníci a budeme rádi aspoň za něco:-)… Na adrese 401185 máme instrukci JNZ…ale my chceme, aby to skočilo, když zadáme i špatné s/n… Zkusíme instrukci změnit na JZ…poklepeme dvakrát na instrukci a přepište „JNZ SHORT 004011A5“ na „JZ SHORT 004011A5“ a klikněte na Assemble…
Spusťte program (F9) a zadejte nějaký blábol…a hle! Správné reg.č.! Chyba je v tom, že když to s/n zadáte dobré, tak se vám ukáže že je špatné…tomu byste zamezili tím, že byste instrukci „vyNOPovali“, TZN že byste místo instrukce „JNZ SHORT 004011A5“ napsali jen „NOP“ a klikli na assemble…
Mohli ste si všimnout tohoto:
00401185 . /75 1E JNZ SHORT crackme_....... A po „zásahu“ bylo :
00401185 . /74 1E JZ SHORT crackme_.......
Všimli jste si? 75h se proměnilo na 74h…
75 je HEX instrukce JNZ a
74 je HEX instrukce JZ…chápete?!
Zkusíme si napsat crack. Nejdříve si řekneme, co chceme, aby crack dělal. Chceme, aby instrukci 75h přepsal na 74h (jak již bylo psáno, správné č. se označí za špatné…). Nejdříve si najdeme, na kterém hex. offsetu leží instrukce JNZ. To co v Olly vidíme vlevo je adresa, my chceme najít offset, ten najdeme tak, že si označíme instrukci JNZ a klikneme na ní pravým myšítkem, a klikneme na View->Executable File. Objeví se nám v HexEditoru všechny instrukce i s DisAssemblingem. A nalevou už není adresa, ale offset. Tam kde leží JNZ, by měl být offset 00000585, a měl by být označený. Už víme který to je offset a už víme jak to chceme přepsat. To nám k výrobě cracku stačí.

Vytvoříme si patch v Céčku…základ je toto:
#include "stdafx.h" //Jen v MS Visual C++
#include "stdio.h"
#include "stdlib.h"
#include "Form1.h" //Jen v MS Visual C++
{
FILE *f;


int adr=0x585; //offset
int owr=0x74; //hex.74 = „JE“ (patch z 75 („JNZ“))

f = fopen( "crackme.exe" , "rb+");
if (f==NULL) { MessageBox::Show( "File can not be found!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
exit(1);
}

fseek(f,adr,SEEK_SET);

fwrite(&owr,1,1,f);
MessageBox::Show( "Cracked :-)", "Cracked...:-)" ,MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
fclose(f);
}
Pokud si s kódem pohrajete ve Visual C++ můžete dospět k nádhernému výsledku……(CrackMe, projekt a source k Visual C++ je zde a nástroje na cracking jsou zde) Příště si v tomto CMe najdeme správné s/n :-)

Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.6/88

1  2  3  4  5    
(známkování jako ve škole)