----------
Pierwsze od czego zacznê ten temat, to od tego, kim jest osoba nazywaj±ca siê "cracker".
Niektórym kojarzy siê to s³owo z cracker-hacker, lecz tak nie jest (i dobrze)
Niektórzy my¶l±, ¿e cracker to taki kto¶, kto tylko pisze cracki, w tym nie ma za du¿o racji, lecz cracker rzeczywi¶cie mo¿e pisaæ cracki do ró¿nych aplikacji. Pisze to po to, ¿eby wbiæ ludziom czytaj±cym ten artyku³ do g³owy, ¿e cracker =! hacker.
W mojej definicji, cracker to osoba :
- inteligentna (ma pojêcie o komputerach)
- znaj±ca chocia¿ podstawy assemblera
- potrafi±ca programowaæ w jakim¶ jêzyku programowania
- potrafi±ca zmieniaæ kod programu, znajdowaæ inne potrzebne rzeczy
Czyli inaczej mówi±c i pro¶ciej, cracker to osoba, która ³amie zabezpieczenia programu i go modyfikuje w jaki¶ sposób aby osi±gn±æ odpowiedni efekt.
Nie baæ siê, my tu nie bêdziemy ³amaæ prawa, ani nic z tych rzeczy. W moich kursach, bêdziemy tylko modyfikowaæ przez nas stworzone programy & crackme'sy.
----------
Druga rzecz, to pytanie, jak zacz±æ przygodê z crackingiem ?
Rzeczy, które bêd± nam potrzebne do przygody z crackingiem :
- mózg
- internet
- znaæ assemblera, choæby w podstawowym stopniu
Gdy siê upewnili¶cie, ¿e te cechy posiadacie, trzeba posi±¶æ odpowiednie narzêdzia.
- Debugger np. OllyDebugger lub SoftIce
- Disassembler np. IDA, W32DASM
- RegMon, FileMon i inne monitory
- kompilator asma (MASM, TASM, itp.)
----------
Kilka pojêæ :
Pierwsze od czego zacznê, to od :
Sposób zapisu (hex, dec, itp.) - mo¿e uczy³e¶ siê o tym w szkole, ale powiem to. Istniej± takie trzy g³ówne rodzaje zapisu cyfr :
- binarny - ka¿dy bit mo¿e przyjmowaæ warto¶æ 1 lub 0
- decymendalny - po prostu system dziesi±tkowy
- hexymendalny - wyra¿any przez cyfry & litery
Rejestry procesora - procesor, posiada tzw. rejestry (chyba wiesz co to rejestr, nie?).
Procesor posiada 9 g³ównych rejestrów, a s± to :
- eax, ebx, ecx, edx, edi, esi, ebp, esp & eip
Wszystkie te rejestry co wymieni³em u góry s± 32 bitowe, czyli zbudowany z dwóch 16 bitowych czê¶ci. Nastêpnie te 16 bitowe rejestry dziel± siê na kolejne 8 bitowe(np. AX dzieli siê na AH, AL). S± równie¿ inne rejestry, np. znaczników (d o i z s a c p), które mog± mieæ warto¶æ 0 lub 1 (inaczej nazywane rejestry znaczników - flagi procesora). Przechowuj± one chwilowe informacje w twoim kodzie (xor, sub, itp).
Jêzyk maszynowy - jak ka¿dy wie, kod ¼ród³owy podczas kompilacji jest przekszta³cany w kod maszynowy, zrozumia³y dla komputera. Bêdziemy takie kody ¼ród³owe podgl±daæ za pomoc± ró¿nych narzêdzi (disassembler, debugger).
----------
Opisze wam teraz obs³ugê disassemblera W32DASM.
----------
W32DASM nie posiada jaki¶ super extra funkcji, je¶li znasz angielski, to nawet nie muszê tu nic opisywaæ, no ale je¶li kto¶ nie zna..
Zak³adka disassembler :
Open file to disassemble - otwórz plik do disassemblacji
Save disassembly - zapisywanie zdisassemblowanego pliku
Print preview - podgl±d wydruku
Print - drukuj
Print setup - ustawienia drukowania
Copy selected line - kopiuje zaznaczon± liniê do schowka
Font - czcionka
Clear All Trade Marks - usuñ zaznaczenia (wszystkie)
Disassembler Options - ustaw tam wszystko na "enable"
Zak³adka project :
Open Project File - otwiera zdisassemblowany plik (wcze¶niej ...)
Debug :
Load process - wczytaj proces
Attach to an active process - wczytaj aktywny proces
Breakpoint toggle - ustawienie breakpointa
Run process - debugguj
Pause process - przestañ debuggowaæ
Goto current eip - skocz do aktualnego eip
Terminate process - wy³±cz proces
Debugger options - opcje debuggera (w³±cz wszystko na "enable")
Poda³em wy¿ej tylko te przydatniejsze opcje..
Zak³adka Search :
Find text - znajd¼ tekst
Find next - znajd¼ nastêpny
Zak³adka Goto :
Goto Code Start - id¼ na pocz±tek kodu ¼ród³owego programu
Goto program entry point - idzie na pocz±tek kodu, tam gdzie program zaczyna wykonywaæ dzia³anie
Goto page - idzie na zadan± stronê
Goto code location - idzie pod konkretny Virual Address
Zak³adka Execute :
Execute jump - wykonuje skok
Return From Last Jump - wraca do miejsca sk±d nast±pi³ skok
Execute call - wykonuje call'a
Return From Last Call - tak samo jak skok tylko call
Zak³adka Functions :
Imports - lista importów
Exports - lista exportów
Zak³adka HexData
Hex Display of Code Data - wy¶wietla zadany segment (hex)
Hex Display of Code - wy¶wietla zadany kawa³ek kodu (hex)
Zak³adka Refs :
Menu References - odniesienia do menu zdisassemblowanego programu
Dialog References - odniesienia do okienek
String Data References - odniesienia do ³añcuchów tekstowych ("stringów")
Zak³adka Help :
Tego nie trzeba t³umaczyæ
----------
No dobra, co z tego je¶li wam przet³umacze menu jak i tak nic nie bêdziemy robiæ? Disassemblujemy pierwszy przyk³ad programu.
----------
Dobra, nabazgrajcie jaki¶ program w byle jakim jêzyku programowania, np. C++, proste hello world.
Dobra, skompilujcie to. Przyk³adowo, nasz program hello world, jest spakowany jakim¶ packerem i nie mo¿emy go otworzyæ przez W32DASM, co zrobiæ? ¦ci±gamy analizator plików (mo¿e byæ PEID) i otwieramy nim nasz spakowany program, dowiadujemy siê co to za packer/cryptor i szukamy unpackera/decryptora. Je¶li plik nie jest spakowany, ¶mia³o mo¿emy go otworzyæ poprzez W32DASM (Disassembler > Open File to disassemble i wybieramy plik .EXE). Po za³adowaniu programu, uka¿e nam siê piêkny listing naszego programu (no mi akurat nie, bo trzeba zmieniæ czasami czcionkê, bo wyskocz± same kwadraty i inne badziewia). Skoro ju¿ wszystko wiemy, omówmy tabelê importów i exportów. W menu w zak³adce Functions mamy co¶ takiego jak Import & Export. Klikamy na Import (export jest bodaj¿e nie aktywne). Poszukajmy teraz funkcji, która wy¶wietla nasz tekst Hello World poprzez cout. Gdy j± ju¿ znajdziecie, kliknijcie dwa razy, a disassembler przeniesie was w odpowiednie miejsce w listingu, gdzie ta funkcja jest wywo³ywana przez program. W³a¶nie do tego s³u¿y tabela importów & exportów.Kod:#include <iostream> #include <conio.h> using namespace std; int main() { cout <<"Hello World!" << endl; getch(); }
Teraz druga sprawa, podzia³ programu na sekcje.
Je¶li przejdziecie na sam± górê listingu, powinni¶my ujrzeæ co¶ takiego :
S± to sekcje. Jak widzimy, program jest podzielony na kilka sekcji w których znajduj± siê ró¿ne informacje.Kod:Numer of objects = 0005(dec), Imagebase = 00400000h Object01: .text****RVA: 00001000 Offset: 00000400 Size: 0003DA00 Flags: 60000060 Object02: .data****RVA: 0003F000 Offset: 0003DE00 Size: 00000200 Flags: C0000040 Object03: .rdata** RVA: 00040000 Offset: 0003E000 Size: 00002800 Flags: 40000040 Object04: .bss**** RVA: 00043000 Offset: 00000000 Size: 00000000 Flags: C0000080 Object05: .idata** RVA: 00048000 Offset: 00040800 Size: 00000800 Flags: C0000040
ObjectXX - gdzie XX to numer, np. 01, jest to numer sekcji
RVA - Wirtualny adres gdzie zaczyna siê sekcja
Offset - offset w pliku, gdzie rozpoczyna siê sekcja
Size - rozmiar sekcji
Flags - charakterystyka sekcji
----------
Je¶li chcesz zobaczyæ kilka przydatnych skoków & porównañ, które musisz umieæ, zobacz :
ownersite.republika.pl/Skoki_i_porównania_-_asm.rar
----------
Jak bêdê mia³ znowu czas, napiszê dalsze czê¶ci artyku³u.
Mam nadzieje, ¿e to co tu napisa³em siê komu¶ przyda³o..![]()



