Northpole (CiA) and iNNU3NDo (ExE)

Yowza,

Het eerste wat we jullie willen leren is het verschil tussen hackers en crackers (hopelijk weten jullie dit al)

Hackers breken in op computersystemen
Crackers proberen de gehele (of een deel) van de code te herschrijven/veranderen

Je kan dit op een illegale manier doen, dus.. NIET DOEN! Somige mensen cracken voor het plezier, andere voor de kick, de competitie, ...

Wie zijn die crackers?

Crackers zijn hoofdzakelijk vriendelijke,behulpzame mensen *G* . Als je op IRC (EFNet) bent en je hebt een vraag, ga dan naar #CRACKiNG4NeWBiES en stel ze. Ze zullen je zeker (proberen) te hepen.

Sommige mensen denken dat crackers ook virussen schrijven. Niets is minder waar. Het kan gebeuren dat je een virus in een crack hebt die je van het www hebt gehaald, daarom kan je beter efnet's #cracks gebruiken (komen de cracks rechtstreeks van de cracking team's). Het is spijtig dat er langs het www af en toe een virus in gestopt wordt door een "derde", maar wat kunnen we doen tegen zo'n (ziekelijke) individuen?

Crackers doen ook nooit iets illegaal, dat omdat ze een help file meegeven met elke crack. Je zou moeten weten dat je de crack/patch/keygen/... enkel mag gebruiken als je je originele exemplaar kwijt bent. Het zelfde geldt ook voor alle illegale site's:

    This is for educational use only, Enter at you risc.. Blablabla, you know the rest, enjoy.
Als je een crack wilt gebruiken, zou je tenminste twee in het zipfile ingesloten bestanden moeten lezen (*.diz & *.nfo => meestal File_id.diz & naam_crackingroep.nfo). Om dit te lezen heb je een ascii viewer nodig, of zelfs beter, een diz/nfo viewer. Download er een op: http://protools.cjb.net, maar ook Windows Notepad werkt goed (als je het Terminal lettertype gebruikt).

Wel, dat was de inleiding, hier gaan we dan!

- Enkel voor studiedoeleinden! -
We kunnen niet aansprakelijk gesteld worden voor eventuele schade voortkomende van deze tutorial, of van de actie's die erin beschreven worden. Als je iets niet vertrouwd, doe je het beter niet (maar bij ons gaat alles zonder problemen)


De schrijvers:
  • NORTHPOLE - [Crackers In Action]
CiA_Northpole@hotmail.com
#C.i.A op EFNet (IRC)
  • iNNU3NDo - [EXECUTiON] [DREAD]
iNNU3NDo@hotmail.com
#EXECUTiON e/of #DREAD op EFNet (IRC)

1· The tools

Voor cracking heb je 3 tot 5 programma's nodig

  • W32Dasm, of soms wel eens Windasm genoemd (1.1)
  • Hiew (of een andere hex editor) (1.2)
  • Softice (vanaf nu S'ice) (1.3)
  • Smartcheck (vanaf nu S'check) (1.4)
  • Unpackers (rara..) (1.5)

1·1 W32Dasm of Windasm

W32dasm laat e toe de hexadecimale code te bekijken. Je kan ze enkel bekijken, niet bewerken. Je kan het gebruiken om een foutmelding of iets dergelijks op te zoeken. Daarvoor gebruik je het SDR (String Data Reference) venster.

Als we over een offset praten, vind je hem op deze manier: (voorbeeld)

Line: 143782 Pg 1692 Code Data @: 0043DEAF1 @Offset 0003DEF1h in file: hardcoded.exe

Je moet de "h" niet noteren, omdat die enkel staat voor "Hexadecimaal"

1·2 Hiew

Hiew is een Hexadecimal editor. Je kan er bestanden mee bekijken en veranderen in ASM (assembler). Hoe het werkt zal duidelijk worden in de voorbeelden.

TiP: maak een snelkoppeling in uw root\windows(of winnt)\sendto\ naar Hiew.exe
==> Het enigste dat je nu hoeft te doen is op het desbetreffende bestand gaan staan, rechtermuisklik ==> kopieren naar: hiew

1·3 SoftIce (S'ice)

S'ice is een real-time debugger, dit wil zeggen dat je altijd in staat bent om te breaken.

Wanneer je S'ice installeerd, moet je autoexec.bat manual of langs het installatiemenu) laten aanpassen. Je moet ook winice.dat aanpassen (in de S'ice directory)

Change this lines:
PHYSMB=196 Uw RAM geheugen
;EXP=c:\windows\system\kernel32.dll Als je zo'n regel ziet, moet je controleren of je het bestand hebt, en zoja, het pad controleren, en de; verwijderen.

Vergeet de visual basic dll's (msvbvm50.dll and msvbvm60.dll) niet toe te voegen.

Als je S'ice geïnstalleerd hebt, en je krijgt een foutmelding tijdens het opstarten, dan moet je de ; voor de naam van dat bestand verwijderen.

Elke keer je iets veranderd in winice.dat moet je herstarten.

Er is ook een andere (misschien gemakkelijkere) manier om S'ice te configureren: langs Symbol Loader. bewerk de S'ice instalatie settings, en onder de exports tab, moet je tenminste één van de volgende file's toevoegen:

  • kernel32.dll
  • user32.dll
  • gdi32.dll
  • advapi32.dll
  • msvbvm50.dll
  • msvbvm60.dll
Wel, hoe starten we nu S'ice op? Symbol loader heb je niet nodig, duw gewoon [CTRL][D].

Dit is de basis S'ice layout. Probeer jouw S'ice er ook zo te laten uitzien, want dit is de basis lay-out die je nodig hebt!

Register window ________________________________________________ _ _
|
| EAX = 00000000 EBX = 00000000 ECX = 00000000 etc…
| bereiken met: WR
|________________________________________________ _ _
Data Window |
| 0000:00000000 00 00 00 00 00 00 00 00-00 00 00 00 00 etc…
| 0000:00000000 00 00 00 00 00 00 00 00-00 00 00 00 00 etc…
| etc... bereiken met: WD
|________________________________________________ _ _
Code Window | 0000:00000000 000000 XXX2X 00000000
| 0000:00000000 0000 XXX 00000
| etc...Bereiken met: WC and CODE ON/OFF
|________________________________________________ _ _
Command Window |
| Geef hier uw commando's in.
|________________________________________________ _ _

Om de inhoud van een adres te bekijken, type je D <address>, like:

  • d 00457EB
  • d eax
TiP: Iets dat je handig kan vinden:
Om S'Ice te verbergen en naar het scherm te kijken, duw F4. Je kan niets doen, maar je kan zien wat er op dat moment gebeurd.

TiP: (voor tijdens het werken):
Als we spreken over een breakpoint zetten, type dan gewoon: BPX (breakpoint on execution) - complete lijst in het tweede document -. De (Ex)A na een bpx (zoals inMessageBoxExA) staat voor 32 bit (zonder dat het 16 bit is). Als je niet juist weet welke te plaatsen, zet dan beide (16 en 32 bit), het kan niets verkeerd doen!

    Breakpoint hulpje:
  • BL = list all breakpoints
  • BC [*/#] = verwijderd een breakpoint [allemaal/aantal]
  • BE [*/#] = schakelt breakpoint aan [allemaal/aantal]
  • BD [*/#] = schakelt breakpoint uit [allemaal/aantal]

1·42· Smartcheck or S'check

Smartcheck is nog een ander cool program van NUMEGA (de maker van S'ice). Dit wordt gebruikt om VB (Visual Basic) te debuggen.

Later volgt er meer info hierover. Het is mogelijk om VB te cracken op 2, misschien wel 3 manieren (dankzij DREAD).

1·5· Unpackers

Wel, je kan je programma beschermen (als je een programmeur bent) met een packer.

Dit zijn er enkele:

    Schrinker, PE, neolite, petite, UPX, PEcrypt, codecrypt, procdump
Sommige teams hebben reeds een UNPACKER gereleased. Voor elke packer vind je dus ook een unpacker! Ga maar eens kijken op http://protools.cjb.net en gebruik ze (lees de handleiding zorgvuldig!!!)

2· Beveiligingen

2·1· Hard coded serial

Een hard coded serial is een serial die op elke computer hetzelfde is, voor alle namen.

2·1·1· Hoe

Hard coded serials zijn zéér eenvoudig te vinden door het programma te disassemblen in W32Dasm. Het volgende voorbeeld zal dat duidelijker maken

2·1·2· Crackme

2·1·2·1· 1e methode - De serial
Ok, hier gaan we: ons eerste doel is hardcoded1.exe. (download)

1. Start hardcoded1.exe, en vul enkele dingen in.
2. "Incorrect serial !". Ooh, we hebben niet veel geluk vandaag..verkeerde gok, hier begint het echte werk.
3. Start w32dasm en laad hardcoded1.exe. Neem een kijkje in het "string data references" venster en zoek voor "Incorrect serial !". Als je er dubbel op klikt, kom je hier:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043EAF1(C) <== here we have to take a look !
|
:0043EB08 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"Hard Coded Serial"
|
:0043EB0A 6850EB4300 push 0043EB50

* Possible StringData Ref from Code Obj ->"Incorrect serial !"
  |
:0043EB0F 6880EB4300 push 0043EB80
:0043EB14 6A00 push 00000000

* Reference To: user32.MessageBoxA, Ord:0000h

4. Dit is niet de plaats waar we moeten zijn (we wilen een geldige serial, remember?) scroll naar boven tot je een (die) coditional jump tegenkomt. Dus: Goto Code Location, en type 0043EAF1. (Kan een ander getal/adres zijn op jouw computer)
5. Wat zien we daar?

:0043EADF E8182CFEFF call 004216FC
:0043EAE4 8B45FC mov eax, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"84596AGHDP"
|
:0043EAE7 BA44EB4300 mov edx, 0043EB44
:0043EAEC E83B50FCFF call 00403B2C
:0043EAF1 7515 jne 0043EB08
:0043EAF3 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"Hard Coded Serial"
|
:0043EAF5 6850EB4300 push 0043EB50

* Possible StringData Ref from Code Obj ->"Thank you for registering !"
|
:0043EAFA 6864EB4300 push 0043EB64


Kijk eens wat er boven jne staat: de tekst 84596AGHDP wordt in het edx-register geplaatst, vervolgens een call en daarna een compare, waarna we naar de foutmelding springen vanwaar we komen. Er just onder is de text "Thank you for registering !"
6. Dus.. kunnen we veronderstellen dat 84596AGHDP de juiste serial is. Er is echter maar één manier om dat te weten te komen: PROBEREN!
7. En ja hoor, het werkt (wat dacht je). Het is de correcte serial. Eerste programma gecracked!

2·1·2·2· 2e methode - De patch
Denk er wel aan dat een serial vinden beter is dan te patchen!
1. Als je je de dingen die je hierboven hebt gezien nog herinnert, dan weten we dat de JNE redelijk belangrijk is - hij beslist of de ingevoerde serial geIdig is of niet.
2. Dus.. wat a8ls we dat kunnen bewerken (ons doel). Maak er het omgekeerde van:
(1) laat het programma denken dat de serial geldig is als we een verkeede invoeren, en ongeldig als we een geldige invoeren of -zelfs beter-
(2) laat het denken dat hij altijd geldig is.
3. Hoe kunnen we dit realiseren? Het is eigenlijk eenvoudig, als je wat assembler kent:
  • We kunnen jne naar je veranderen -> (geeft je (1))
      Of
  • We kunnen ervoor zorgen dat hij altijd springt -> (geeft je (2))
4. Het patchen van he file:
    a) Zoek de offset van JNE (zoals uitgelegd in 2.2 Hiew)
    b) Open het file in hiew en ga naar DECODE mode
    c) Ga naar de offset (3DEF1h) mbv F5 (GOTO)
    d) F3 (EDIT), vervolgens F2 (ASM)
    e) verander het adres na JNE naar het adres van de lijn volgende op die JNE-lijn (dit is de beste manier)
    f) F9 (UPDATE) en F10 (QUIT)

2·1·3· Hard Coded Serial - Oefening

Probeer deze oefening op hardcoded serial (download)

2·2· Naam/Serial

Naam/serial is zoals het klinkt - er is een naam en een serial, waarbij de serial afhankelijk is van de naam.

2·2·1· Hoe ?

Naam/serial worden meestal gecracked mbv S'ice, omdat je met S'Ice kan kijken welke data er in het register worden bewaard, dus je kan het algorytme volgen. Als je dat volledig verstaat, kan je zelfs een keygen maken!
2·2·2· Hoe ?
Ok, hier gaan we dan. Omdat het bijna onmogelijk was om hier S'Ice data te zetten, staat er de W32Dasm versie waarover we nu spreken. Denk er wel aan dat het geheugen adres anders kan zijn op jouw computer.
1. Start de crackme (nameserial1.exe - download-) en bekijk het. Vul enkele gegevens in en zie wat er gebeurd.
2. Er komt een messagebox die zegt 'Incorrect serial !'.. Well duh!
3. OK, hier begint het echte werk. Zorg ervoor dat S'Ice geladen is en klaar om te werken. Zet een bpx op MessageBoxExA (bpx MessageBoxExA).
4. Duw nog eens op de 'Register' knop. S'Ice komt tevooschijn! Duw nu F11 om naar de caller terug te keren (we willen namelijk weten waar de foutmelding werd aangeroepen). Nu we eruit zijn verlaat je S'Ice en zien we de msgbox opnieuw. Klik op de 'OK' knop en we eindigen terug in S'ice, na de msgbox call
    
    :0043EB57 6A00                    push 00000000
    :0043EB59 6894EB4300              push 0043EB94
    :0043EB5E 68BCEB4300              push 0043EBBC
    :0043EB63 6A00                    push 00000000
    :0043EB65 E80277FCFF              Call 0040626C <== Dit is de call naar de messagebox
    :0043EB6A 33C0                    xor eax, eax	<== Hier eindigen we
    
    
5. Eigenlijk, zitten we nu niet zo ver hé, we zijn telaat, de messagebox is al tevoorschijn gekomen. We hebben iets anders nodig...
6. Laat ons eerst eens in W32Dasm kijken, het zou ons kunnen helpen. Wanneer we de 'string references' gebruiken, gaan we naar 'Incorrect serial !', we eindigen hier:
7. Hier krijgen we:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043EB40(C)
|
:0043EB57 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"Name/Serial"
|
:0043EB59 6894EB4300 push 0043EB94

* Possible StringData Ref from Code Obj ->"Incorrect serial !"
  |
:0043EB5E 68BCEB4300 push 0043EBBC
:0043EB63 6A00 push 00000000

* Reference To: user32.MessageBoxA, Ord:0000h
  |
:0043EB65 E80277FCFF Call 0040626C

Zoals je kan zien, is er een conditional jump op 0043EB40... Laat ons eens kijken:
7. Hier krijgen we:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043EB0F(C)
|
:0043EB35 8B45F8 mov eax, dword ptr [ebp-08]
:0043EB38 8B55F4 mov edx, dword ptr [ebp-0C]
:0043EB3B E8EC4FFCFF call 00403B2C
:0043EB40 7515 jne 0043EB57
:0043EB42 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"Name/Serial"
|
:0043EB44 6894EB4300 push 0043EB94

* Possible StringData Ref from Code Obj ->"Thank you for registering !"
|
:0043EB49 68A0EB4300 push 0043EBA0
:0043EB4E 6A00 push 00000000

8. Als je ziet watik zie, is het in orde ;). Als je het niet ziet, lees verder! Op adres 43EB35 wordt er iets in het EAX register gestoken, en op adres 43EB38 iets in EDX. Dan is er een CALL en erachter een JNE. OK, laat ons veronderstellen dat de gegevens in EAX en EDX de twee serials zijn (de juiste, en diegene die je ingevoerd hebt), en de CALL is een compare...
9. Nu hebben we nog één probleem: Hoe daar juist breaken? Wel, met behulp van de volgende methode kan u overal in de code breken waar u wil. Laat ons breaken op de eerste MOVE EAX, DWORD PTR [EBP-08] langs deze weg:
  • Zoek de offset van die instructie (3DF35h)
  • Maak een kopie van nameserial1.exe en open het in Hiew. Ga vervolgens naar de offset.
  • Verander de '8B' van de data naar 'CC' en laat de rest. Nu zou je zoiets moeten zien:
    
    .0003EB35: CC                           int       3
    .0003EB36: 45                           inc       ebp
    .0003EB37: F8                           clc
    .0003EB38: 8B55F4                       mov       edx,[ebp][-000C]2
    .0003EB3B: E8EC4FFCFF                   call     .000003B2C   -------- (1)
    .0003EB40: 7515                         jne      .00003EB57   -------- (2)
    
Dit is volledig anders dan de originele code, maar dat trekken we ons niet aan. Schrijf gewoon ergens neer dat je '8B' naar 'CC' veranderd hebt. Zet vervolgens een breakpoint in S'Ice op INT 03 door te typen: BPINT 03. Start het programma opnieuw, en S'Ice zal brepekn waar je de 'CC' hebt gezet.

MAAR we moeten de originele data terugplaatsen, wat we zo doen:
Wanneer S'Ice breakt, type je 'd EIP'. Je zal het volgnde zien 'CC 45 F8 8B 55 F4 etc' in het Data venster. Click vervolgens op CC om het te veranderen, en type '8B' (de oorspronkelijke data). Je zal zien dat de code in S'Ice veranderd. We zijn terug in de running :-). Zet een breakpoint op het adres waar je dit ziet: MOV EAX, DWORD ...

NOTE: Deze manier om breakpoints te zetten mag ingewikkeld lijken, maar zal later zeer krachtig blijken, omdat je op deze manier overal kan breaken, en niet enkel op de "gekende breakpoints" zoals GetWindowText of MessageBox.
10. Het moeillijke deel is nu eigenlijk al gedaan...Trance (F10) totdat de cursor over de call staat. Type nu 'd eax' and 'd edx'. En, wat zien we in het data venster?
11. Ja, eerst de code (serial) die wij hebben ingegeven, en vervolgens de juiste serial voor onze naam. We hebben de serial gevonden!

3· Een patcher schrijven

De voorbeeld patchers die we ter beschikking stellen, zullen het bestand test.exx patchen met de volgende data:
  • Offset 7h: 90h
  • Offset 8h: 90h
De code is vrij om te gebruiken en te veranderen. We kunnen niet verantwoordelijk gesteld worden voor eventuele schade, of het gebruik dat de patcher.

3·1· Mbv Visual Basic
We veronderstellen dat je Visual Basic 6.0 Enterprise gebruikt

Je kan de volledige code (met uitleg) vinden in patcher-VB.zip (download)

3·2· Mbv Delphi
We veronderstellen dat je Delphi 4 Client/Server gebruikt

Je kan de volledige code (met uitleg) vinden in patcher-D4.zip (download)

4· Reference

Je kan gebruik maken van het opcodes.hlp (download) help file, wat voor elke ASM commando een verklaring geeft.
Of...

Enkele tegenovergestelde Jumps
JE
(Jump if Equal)
JNE
(Jump if Not Equal)
JA
(Jump if Above)
JBE
(Jump if Below or Equal)
JAE
(Jump if Above or Equal)
JB
(Jump if Below)
Belangrijkste ASM commando's voor cracking
ADD
Add 2 values
CALL
Call a procedure
CMP
Compare 2 values
IDIV
Integer division
IMUL
Integer multiply
JMP(S)
and other with Jxx
Jump to somewhere
MOV
Move something into a register or an address
POP
Get something from the 'stack'
PUSH
Save something in the 'stack'
RET
Return from a jump or call
SUB
Substract 2 values
TEST
Check if zero
XOR
Xor 2 values
note: XOR ECX, ECX means putting ECX to zero

5· Opmerkingen & thnx

Eerst en vooral wil ik NORTHPOLE danken om zo goed samen met me te werken, voor de crackme's, patches te schrijven, envenals sommige delen van de tutorial.

Ik hoop ook dat deze tutorial je iets heeft bijgebracht over de kunst van het cracken/reversen. Nu (04/01/2000), brengen we de eerste nederlandstalige uitgave uit. Als je nog vragen/opmerkingen hebt, gelieve onze dit dan te laten weten dmv het formulier hieronder. Gelieve een geldig e-mail adres in te geven, zodat we kunnen antwoorden indien nodig.

We willen ook ons "most wanted station" bedanken *G* voor de goede muziek, en, (dit voor iNNU3NDo), mijn ex-vriendin voor de mooie tijden die we samen hebben gehad!

We willen de volgende personen bedanken (als je er niet instaat, en je denkt dat je erin thuis hoort, mail ons dan met een goede reden!): NORTHPOLE, iNNU3NDo, Knotty, S^Witz, Sepelcrum, Douby, SiONiDE (Stalker!), DnNuke, BuL-LeT (for everything he has done already), Darkshadow, X-callibre, VisionZ-, Rhytm, Rippie (yeah you pet ;), _Duelist, tKC (well.. he rulezzz), Atlantezz, H3llSp4wn, Potsmoke (you gonna make it one day!), Hades, Defiler, U_Schall, Marton, |tCP|, Z-wing, PeeWee (beter gekend als WeePee ;), Dawai, MisterE, Darshaddow, Fearz, ...

Teams: CiA, DREAD, EXECUTiON, CORE, PC, ...

Channels: #C.i.A #DREAD #EXECUTiON #CRACKiNG4NeWBiES #Childporn (grapje!)

5·1· Opmerkingen/vragen

Wat vind je van deze tutorial?
    -
Vragen of opmerkingen?
E-mail:
© All rights reserved, iNNU3NDo - NORTHPOLE. LAST UPDATE: 04/01/2000

Feel free to use, but not to abuse this page and the info on it. We can not kept responsible for any damage on your computer (hard and software), nor the abuse of our readers. ONLY USE WHAT WE TEACH YOU ON CRACKME'S

There is no warez on this pages (pirated software), only links. We didn't put it there, don't blame us!