----------
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.
Kod:
#include <iostream>

#include <conio.h>



using namespace std;



int main()

{



cout <<"Hello World!" << endl;

getch();



}
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.
Teraz druga sprawa, podzia³ programu na sekcje.
Je¶li przejdziecie na sam± górê listingu, powinni¶my ujrzeæ co¶ takiego :

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
S± to sekcje. Jak widzimy, program jest podzielony na kilka sekcji w których znajduj± siê ró¿ne informacje.

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..