="="="="="="="="="="="="=

 Cracking Tutorial No.3
 (c) by LiMiTeR oNe

="="="="="="="="="="="="=


Was wollen wir Cracken?

Ich habe da an HexWorkshop gedacht, da es ein ntzliches Tool ist und sehr einfach zu cracken ist!

Unser Werkzeuge:

1. Softice (ein Debugger - nicht einer, DER DEBUGGER!)
2. ein Hex Editor (ich benutze HView)
3. W32Dasm (ein Disassambler)

SoftICE (von NuMega) Einrichten:

SoftICE ist einsehr guter Debugger, aber wie es mit so vielen guten Programmen ist muss man auch hier einiges einstellen. Die WinICE.dat (im SoftICE Verzeichnis)ist einen 	Konfigurationsdatei in die man von hand die Einstellungen von WinICE intragen muss. Um euch die Schreibarbeit abzu nehmen habe ich euch gleich meine WinICE.dat Datei beigelegt. Aber ihr solltet vielleicht doch noch etwas mehr ber WinICE erfahren. Wir beginnen mit INIT, bei mir sieht sie so aus...

INIT="lines 60;color 02 0E 0E 30 09;wd 22;wc 22;"
INIT="code on;faults off;X;"

In INIT stehen Befehle die beim Start von SoftICE ausgefhrt werden. Da der INIT nur eine bestimmte Lnge habe darf habe ich 2 INIT's daraus gemacht. Die Befehle werden immer mit einem Semikolan (;) von einander getrennt.

lines:
^^^^^^
ist die gre des SoftICE Fensters in Linie.


color:
^^^^^^
Syntax:	COLOR [normal bold reverse help line]
	normalText-/Hintergrundfarbe von normalem Text.
	Default = 07h grau auf schwarz.
bold 	Text-/Hintergrundfarbe von dickem Text.
""""	Default = 0Fh wei auf schwarz
reverse	Text-/Hintergrundfarbe von hinterlegtem Text.
"""""""	Default = 71h blau auf grau.
help 	Text-/Hintergrundfarbe Hilfstext.
""""	Default = 30h schwarz auf cyan.
line 	Text-/Hintergrundfarbe horizontale Linien
""""	zwischen SoftICE Fenstern.
	Default = 02h grn auf schwarz. 

Farbtabelle:
""""""""""""
+------*-----------------*
| Code |    Color        |
*======*=================*
|  0   |  black          |
|  1   |  blue           |
|  2   |  green          |
|  3   |  cyan           |
|  4   |  red            | 
|  5   |  magenta        |
|  6   |  brown          |
|  7   |  grey           |
|  8   |  dark grey      |
|  9   |  light blue     |
|  A   |  light green    |
|  B   |  light cyan     |
|  C   |  light red      |
|  D   |  light magenta  |
|  E   |  yellow         |
|  F   |  white          |
*------*-----------------*


wc/wd:
^^^^^^
wc=Window Code; wd = Window Data; mit wc/wd kann man das Code-/Datenfenster Toggeln das heist zeigen und verschwinden lassen, und zustzlich noch die gre in Linien angeben.


Code on/off:
^^^^^^^^^^^^
Zeigt, oder auch nicht, den HexCode der AsmBefehle im Codefenster an.


faults on/off:
^^^^^^^^^^^^^^
ist meiner meinung nach einer der wichtigsten befehle, da wenn faults auf on stehen bei irgend einer systemverletzung von windoof sich softice fnet und da diese systemverletzung nicht nur einmal in einem code passiert sondern gleich mehrere male startet sich softice auch fters ffnet (sehr nervig bis systemabsturz)
Bsp.:
	00456d9a	mov  esi, 004785E6  (esi = geschtzte Speicherstelle)	Fehler
     ...		add esi, [00478300 + ecx]				Fehler
	...		dec ecx
	...		test ecx, 00
	...		jne 00456d9a	(springe nach oben wenn ecx nicht 00)

d.h. er spring jetzt vielleich ein paar hundert mal zu den Fehlern und jedes mal ffnet sich SoftICE. Ich hoffe ihr habt das so ungefhr verstanden.


last but not least X:
^^^^^^^^^^^^^^^^^^^^^
X beendet SoftICE. Sollte nicht fehlen, da SoftICE als erstes in der Autoexec.bat gestartet wird.

Eigentlich sollte das ja kein SoftICE Tutorial werden aber es macht halt sooo viel Spa :), Nee quatsch! Das was ich hier rein packe ist doch sehr wichtig, und deshalb mu ich da durch...

der nchste Befehl in winice...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
F1="h;"
...
F12="^p ret;"
SF3="^format;"
CF8="^XT;"
....
CF12="TRACE B;"
AF1="^wr;"
...
AF12="^dd dataaddr->4;"
CF1="altscr off; lines 60; wc 32; wd 8;"
CF2="^wr;^wd;^wc;"

Sind die Befehle die beim Drcken einer best Taste ausgelst werden.
F..		Sollte wohl klar sein, ja genau es sind die Funktionstasten (F1-F12)
S..		ist dann Shift und
A..	steht fr ALT
C..	fr Control (Streurung)
CF12	bedeutet Steuerung + F12


Semicolons (;)
^^^^^^^^^^^^^^
vor einer Zeile sind Kommentare.


das Cracken:
^^^^^^^^^^^^
1. Wir starten HexWorkshop 2.50,
2. versuchen uns zu Registrieren (solltet ihr es schaffen euch auf der Stelle Registrieren zu lassen
   hattet ihr schon ne gecrackte Version oder seid einfach nur ein Glckspilz :))


Was nun?
""""""""
mal berlegen... Also HW (HexWorkshop) muss ja erstmal die eingegebene Seriennummer aus der Dialogbox hohlen. Aber wie kommen wir an die Stelle des Programms? Wenn wir nachdem wir unsere Registrierung besttigt haben mit STRG+D in SoftICE springen stechen wir in irgend einer SubRutine eines im hintergrund laufenden Programms aber nicht in HW. Um diese bel zu umgehen gibt es die BreakPoints. BeakPoints sind Stellen an denen sich SoftICE (SI) automatisch ffnet. Um unsere Serial aus dem dialog zu hohlen Verwenden 99% aller Programme die Funktion HMemCpy, also setzen wir dadrauf mal einen BreakPoint (BP), und zwar einen wenn HMemCpy aufgerufen wird. STRG+D um in SI zu gelangen und 
BPX hmemcpy (Break Point on Execute) ein, gehen zurck in HW und geben eine Serial ein. UPS! wir sid ja schon nach dem ersten Buchstabe in SI. Das liegt daran, dass Windows diese funktion auch benutzt um die gedrckte Taste in den Dialog zu Kopieren. Also erstamal BP Disablen BD* (*=alle), Serial eingeben, BP Enablen,
ja richtig geraten BE* und Serial besttigen, ... Zoooooooooom wir sind wieder in SI.
jetzt drcken wir F11 um dahin zu gelangen wo hmemcpy aufgerufen wurde.
Aber wir sind noch immer nicht im code von HW wir drchen etzt ein paar mal F12 bis auf der untersten Trennlinie was wie HWork32... steht. direkt ber der Linie in der wir jetzt sind steht GetDlgItemTextA oder so was, das ist eine API Funktion die das gleiche macht wie hmemcpy oder besser hmemcpy wird von GetDlgItemTextA aufgerufen. Mit F10 (step by line) Tracen wir jetzt durch den Code.

So etzt ist 20:15 und mal schauen was im Fernsehen kommt. Aber keine angst ich komme bestimmt wieder.

23:05 Und ich bin wieder hier bei euch! Ich hoffe ihr habt nicht die ganze Zeit gewartet. :))

ber einige RET's und JMP's hinweg bis ein bedingter jump (JE) kommt. Bei mir ist das der Fall bei 004309BE und wir mssten  sowas sehen...

0167:004309BE	0F8414000000	je 004309D8	(1)
0167:004309C4	8D45DC	lea eax, dword ptr [ebp-24]	
0167:004309C7	50	push eax	
0167:004309C8	E863970000	call 0043A130
0167:004309CD	83C404	add esp, 00000004
0167:004309D0	8945EC	mov dword ptr [ebp-14], eax
0167:004309D3	E907000000	jmp 004309DF	(2)
0167:004309D8	C745EC00000000	mov [ebp-14], 00000000 	(3)
0167:004309DF	837DEC00	cmp dword ptr [ebp-14], 00000000	(4)
0167:004309E3	0F8479000000 	je 00430A62	(5)

Bei (1) sind wir, wenn wir springen wrden, wrden wir nach (3) springen wo dann  [ebp-14] auf 00000000 gesetzt wird! Wenn wir jedoch bei (1) nicht springen, wrden
wir bei (2) rauskommen und nach (4) sprongen! Bei (4) wird nun [ebp-14] mit 00000000 verglichen, warte mal das heist wenn wir bei (1) springen, springen wir auch bei (5). Also untersuchen wir mal (5) gehen also mal mit F10 weiter und weiter und pltzlich hlt SI kurtz in der Zeile in der steht Call Kernel!Sleep. HALT! war das nicht das auch so als der "You have entered a invalide.."-Dialog? Genau! Also knnen wir davon ausgehen dass wir bei (5) nicht springen drfen! Lassen wir HW mit F5 mal weiterlaufen und was passier? Unser Prog teilt uns liebenswrdigerweise mit "You have entered a invalide..". Gut! Das ganze nochmal! Register drcken, sich bis (5) durcharbeiten. Wichtig! Bei (5) halten! Jetzt geben wir in SI r fl z ein, das biwirkt das das Zero-Flag gesetzt wird und wir nicht springen! F10! Tatschlich, wir springen nicht! F5! Huch HW fragt uns nach unserem Namen und Firma! Super! Angaben eingeben und Registriert!

0167:004309E3	0F8479000000 	je 00430A62

004309E3 aufschreiben. STRG+D! bc* in SI (bc BP clear | *=alle) STRG+D oder F5 um aus Si raus zu kommen.


W32Dasm:
""""""""
Halt! Das wars noch nicht! W32Dasm starten, im Menue Disassambler-> open file to disassamble, HW damit Laden, und warten bis W32Dasm HW disassamliert hat. Das ganze mit SI hat nmlich einen Haken, wenn wir nun die HW cracken wollen mssen wir wissen wo der JE befehl in der HW-Datei steht. Und das kann uns SI nicht sagen, aber W32Dasm! HW Disassambled? Gut mit Shift+F12 ffnet sich ein Fenster in dem wir unsere aufgeschriebene Zahl eintragen, und auf OK drcken. das sollte uns wieder zu
0167:004309E3	0F8479000000 	je 00430A62
brigen, mit einem Unterschied, in der Statuszeile knnen wir jetzt
...@Offset 0002FDE3h in File: HWorks32.exe
lesen. Interressieren tut aber nur das was ich fett geschrieben habe! Also notieren, W32Dasm beenden.


mit Hiew HW-Datei cracken:
"""""""""""""""""""""""""" 
Hiew starten und HW in Hiew laden!
Mit F4 -> Dec konnen wir jetzt in den jetzt HW dekodiert anschauen abndern und so! Wir drcken F5 geben unsere zweite notierte Zahl ein und besttigen. Sehen sollten wir jetzt unter anderem so 0F8479000000 84 bedeutet JE (Jump If Equal (=))wenn wir jetzt wollen dass er nicht springt mssen wir nur die 84 in 85 ndern!
85 bedeutet JNE (Jump If Not Equal) noch F9 und F10 fertig!


Last but not least:
"""""""""""""""""""
HW Start! Und registrieren.



----------------------------------------- E N D E -----------------------------------------

Solltet ihr Fehler entdeckt haben Fragen, oder gar ein Lob fr mich habe dann mailt mir! LiMiTeR_oNe@gmx.ch

Greez gehen raus an:
""""""""""""""""""""
alle membaz von Apollo, AmoK und  fRACTUs99
HeyFil, Big_Daddy, Churchy (Friends)
