Digital Cracking Domain presentz:

[DCD]-Tutorial #1: CPU-Idle 5.5

(C) 1999 by BasTardT[DCD]

Hi!

Ich mache heute mein erstes Tutorial. Ich habe dafr das Programm CPU-Idle ausgesucht,
weil der Schutz so billig ist, dass es schon fast keinen Spa macht, ihn zu hacken. Schlagt
den Programmierer!!! (Schne Gre, Andreas) Aber immerhin kann man da schnell ein Tutorial
drber schreiben....

Zutaten:
CPU-Idle Version 5.5 (Deutsche Version)
einen HEX-Editor (ich nehme WinHex, Seriennummer: Code 1: 49725  Code 2: 35780
W32Dasm 8.9(3)
5 Minuten Zeit
etwas Lernbegierigkeit
Champagner zum Anstoen nach dem erfolgreichen Crack

Letzteres ist zum Cracken nicht unbedingt ntig.

Also, fangen wir an! Wir schnappen uns W32Dasm. Ja, es muss gestartet werden, und wenn du
das jetzt gefragt hast, geh zum Ende dieses Textes und mach was anderes!

Als erstes braucht man eine Kopie der Datei "cpuidle.exe", die kopiert man am besten ins gleiche
Verzeichniss -> Windows erstellt die Datei "Kopie von cpuidle.exe".

Bei WinDasm klickt man auf "Disassembler", dass ist da, wo sonst "Datei" steht. Bei "Open File
to Disassemble" whlt man "Kopie von cpuidle.exe" aus. Jetzt msste WinDasm etwa eine Minute etwas
machen: es Disassembliert. Das heit, es macht den Maschinencode von dem Programm sichtbar.
Wenn man jetzt chinesischen Mll sieht, muss man bei "Disassembler" - "Font" - "Select Font" eine
Schrift auswhlen, die auch lesbar ist, am besten ist dafr "Courier New", Gre 8. Das was man jetzt
sieht, ist dass, was der Computer macht, wenn man das Programm startet. Es sieht etwas kompliziert
aus, das ist es auch ;-). Aber man muss es nicht schreiben, sondern nur Lesen. Wenn man jetzt
CPU-Idle startet, kommt immer noch die Meldung "This shareware version of CPU-Idle is..." blablabla.
Ganz so leicht ist das cracken auch nicht... ;-) Fehler #1 gleich gefunden: Englische Fehlermeldung
bei einem deutschen Programm.

So. Wir wissen jetzt, wie die Fehlermeldung heit, die CPU-Idle ausspuckt, wenn es meint, dass es
abgelaufen ist. Jetzt klickt man bei WinDasm auf Suchen (nein, Strg+F geht nicht, es ist ein russisches
Programm....). Suchen ist die Taschenlampe, der dritte Knopf von rechts. In dem Suchfenster gibt man
jetzt den Anfang der Fehlermeldung ein ("This share" reicht vllig). Gleich als erstes findet WinDasm
gleich die richtige Meldung.

Das sieht etwa so aus:

* Possible StringData Ref from Code Obj -> "This shareware version of CpuIdle "
				  -> "has expired. If you want to continue "
				  -> "using CpuIdle, you must register."

0006C6FF BA1CC80600		mov edx, 0006C81C

Das oben      und das hier		Das hier ist der Assembler-Code
ist die Off-     sind die Hex-
setadresse   werte in der 
	     EXE-Datei
               
Jetzt berprfen wir mal, wo diese Meldung eigentlich aufgerufen wird. Man klickt wieder auf die
Taschenlampe (fr Profis: Man whlt wieder die Such-Funktion) und gibt die Offset-Adresse ein,
die vor dem Code steht, in diesem Fall wre dass 0006C6FF. Die Nuller vorne kann man weglassen.

Beim Suchen abwrts (Down) findet WinDasm nichts. Nochmal suchen, diesesmal auf "Up" klicken.
WinDasm sucht etwas lnger, findet aber wieder nichts. Das ist gut, weil jetzt wissen wir, dass die
Meldung ausgegeben wird, wenn das Programm sie logisch von oben erreicht. Man scrollt jetzt nach oben,
bis man einen Jump findet. (Ein Jump hpft innerhalb des Codes hin und her, deswegen haben wir auch
vorher gesucht, ob die Meldung vielleicht von irgendeinem Jump aus aufgerufen wird).

Der erstbeste Jump wre ein paar Zeilen hher bei Adresse 0006C6F6. Dort steht nmlich

0006C6F6 7D32			jge 0006C72A

jge steht fr Jump if Greater or Equal, also springe wenn Grer oder Gleich. Ideal! Hier springt die 
gut geschtze Software also zur Adresse 0006C72A, wenn irgendetwas grer oder gleich als irgendetwas
anderes ist.

Hier hast das Programm die letzte Chance, zu einem anderen Punkt im Code zu springen, sonst kommt
unaufhaltsam die Fehlermeldung.

Wir gehen hier jetzt einfach mal davon aus, dass zur Adresse 0006C72A gesprungen wird, wenn die
Zahl der noch benutzbaren Tage grer oder gleich NULL (=0) ist.

Das wissen wir daher, dass in der Zeile ber dem Jump folgendes steht:

0006C6F2 837DF400		cmp dword ptr [ebp-0C], 00000000

"cmp" heit "Compare", also Vergleiche. "dword ptr [ebp-0C]" ist eine Variable, diese zu erklren wre aber
etwas zu kompliziert fr dieses Anfnger-Tutorial. Das "00000000" schlielich heit einfach nur Null [0].
Wie gesagt: die Nuller vorne knnen weggelassen werden. Also wird die Variable mit "0" verglichen.

Jetzt muss man einfach aus Jump if Greater or Equal etwas anderes machen. Fr die Mathematiker unter den
Crackern hiee das dann Jump if Lower, also Springe wenn kleiner.

Der HEX-Editor wird jetzt ber die echte Datei laufen gelassen, also die "cpuidle.exe".
Wo man etwas ndern muss, steht bei WinDasm unten in der Statusleiste, wenn man die Zeile mit dem 
"jl" markiert. Da unten steht jetzt "[blablabla....] @Offset 0005BAF6h", wobei das "h" am Schluss nur
fr HEX steht. Im Hex-Editor geht man jetzt zu der Offset-Adresse, bei WinHex mit "Alt+O", bei Hiew mit "F5",
und wer etwas anderes benutzt, muss es selber wissen. Das "h" am Schluss MUSS weggelassen werden, es
hat mit der Adresse nichts zu tun!!

An der Adresse steht nach einem Doppelklick auf den Cursor bei WinHEX "7D", was soviel wie "jge" in Assembler
bedeutet. Man macht ein "jl" aus dem "jge". "jl" ist logischerweise "Jump if Lower". Wer jetzt "jl" eintippt,
zerstrt aber das Programm. Der HEX-Code fr "jl" ist "7C", so wie der con "jge" "7D" ist. Also ersetzt man
das "7D" durch das "7C".

Einmal das Programm starten und ZACK!!!!!!!!! es geht wieder!!!!!!!!!!
Zeit fr den Champagner!!!!!!

Ach ja: wer das geschaft hat, ist noch kein Meistercracker!!!!!!!!!!!

Wenn ihr noch ein Tutorial wollt, schreibt mir doch einfach: bastardt@gmx.net


-=BasTardT[DCD]=- 1999