Es ist mal wieder so weit...
Willkommen zum 3. JTK '99 - Tutorial!
Schreibt eine E-Mail wenn euch mein Tut. gefällt.
|
Unser Opfer: |
ACDSee v3.0 Build 103 (deutsch) - http://www.acdsystems.com |
|
Unsere Toolz: |
SoftICE v4.05, MHOOK, W32dasm v8.9, ProcDump v1.6.2, UNAspack v1.0.8.3, HexWorks v3.02, Hiew - das findet ihr alles unter http://w3.to/protools und http://satanicunderground.tsx.org (meine Seite, befindet sich noch im Aufbau, das Laden dauert leider sehr lange oder geht gar nicht :))! |
|
Level: |
Ich würde sagen nicht leicht bis mittel schwer *hehe* |
|
Voraussetzungen: |
Ihr müßt mit SI umgehen können, es installiert und richtig konfiguriert haben, mit den anderen Crack-Toolz umgehen können und natürlich ein bißchen Assembler verstehen. An Lust, Zeit und Willen darf's nicht fehlen und eine schöne Musik-CD hilft Wunder ... |
|
Bemerkung: |
Textstellen die in ---- eingefaßt sind brauchen nur bei Interesse gelesen zu werden. |
Los geht's:
Installiert ACDSee und schaut es euch in Ruhe an (Sharewareeinschränkungen und so ...). Hmm, nach der Testphase seht ihr folgendes:

Wir können ACDSee nicht mehr starten. Patchen wir den Bug weg ...
Wenn wir uns 'ACDSee.exe' in HexWork anschauen erkennen wir, daß es gepackt ist, mit ASPack (sieht man an 'aspack' im Kopf).
---------------
Kurze Erklärung: Wie es Packer für Dateien gibt (z. B. WinZip, WinRAR), gibt es diese auch für .exe's. Wenn wir nun ein Programm programmieren und compilern erhalten wir meist eine sehr große ausführbare Datei. Diese können wir mit einem Packer komprimieren! Der Packer packt also das Programm und fügt einen Entpacker intern hinzu. Klicken wir darauf wird die original Datei (ungepackt) in den Speicher dekomprimiert und ausgeführt. Der springende Punkt ist der, das komprimierte Dateien nicht direkt gepatcht werden können. Entweder entpacken wir diese und patchen dann, oder wir erstellen einen Memory-Patcher, der das Ganze im Speicher patcht. Gute .exe-Packer sind: UPX und ASPack ...
---------------
Entpacken wir ACDSee nun mit UnAspack. Also: UnAspack starten und 'ACDSee.exe' laden und einfach auf 'Unpack' klicken - fertig (easy way)! Wenn alles geklappt hat sollte eure .exe nun etwas größer sein (bei mir: 1.393.152 Byte) und einwandfrei starten ...
Disassemblern wir nun 'acdsee.exe' mit W32dasm. Hmm, fuck, geht nicht.
Naja, kein Problem - jetzt brauchen wir ProcDump ... Startet ProcDump, klickt am rechten Rand auf 'PE Editor' (1) und ladet 'acdsee.exe' (schliesst vorher noch alle Programm die auf die .exe zugreifen könnten, z. B. W32dasm od. HexWorks). Dann klickt ihr auf 'Sections' (2) und markiert '.text' in der Liste. Darauf klickt Ihr nun mit der rechten Maustaste und wählt 'Edit section' (3) aus. Jetzt öffnet sich ein kleines Fenster in dem Ihr rechts unten, unter 'Section Characteristics' 'C0000040' stehen seht (hoffentlich). Ändert 'C0000040' in 'E0000080' um und klickt auf 'OK' (3 mal). Schießt ProcDump, nun solltet ihr 'acdsee.exe' disassemblern können.

Probieren wir es, bei mir geht's! ...
Zurück zum NAG:
Wie fangen wir den NAG nun ab? Ich hab mich für BMSG (Breakpoint on Windows Message) entschieden, weil sehr wenige (mir bekannte) Cracker diesen Befehl kennen bzw. benutzen, dieser aber dennoch sehr nützlich ist. Dazu benötigen wir das Tool 'Mouse Hook Demo' (oder kurz: MHOOK). Starten wir es und sehen:

Wenn wir auf 'Hook' klicken und ein bißchen mit der Maus über irgendwelche Fester fahren, sehen wir, daß sich die Werte ändern. Geil. :) Uns interessiert 'Handle'. Wir gehen folgendermaßen vor: Startet ACDSee, ihr seht den NAG fahrt mit dem Cursor auf ihn und lest den Handle ab. Bei mir ist er 'c6c', bei euch sicher anders. Merken! Schließt MHOOK aber um Gotteswillen nicht den NAG !
Jetzt geht ihr in SoftICE (mit Strg+D) und gebt folgendes ein: 'bmsg *dein Handle* wm_destroy' (also bei mir: 'bmsg c6c wm_destroy') und drückt 'Enter'.
---------------
Nur zur Erklärung, dies' nicht interessiert überspringen das einfach!
|
Befehl |
Kurze Beschreibung |
|
bmsg |
breakpoint on windows message; SoftICE breakt wenn Windows eine Nachricht an unser Programm schickt. |
|
Handle (hwnd) |
Jedes Objekt (z. B. Fenster) bekommt von Windows eine Adresse zugeteilt, über das es angesprochen wird. |
|
WM_DESTROY |
WM = WindowsMessage ist eine Nachricht die Windows an unser Programm schickt. |
|
destroy = zerstören; Nachricht die unser Objekt (Fenster) zerstört (schießt) und den nachfolgenden Code ausführt (also unser Programm fortsetzt) |
Kurz: SoftICE hält an, wenn Windows eine Nachricht an unseren NAG schickt, daß dieser sich schließen soll.
---------------
So, wir waren bei 'Enter' drücken. Nun geht Ihr mit F5 aus SI raus und schließt den NAG (das Kreuzchen rechts-oben benutzen). SI sollte breaken. Ihr seit irgedwo in user32, drückt nun so lange F12 (SI verarbeitet den aktuellen call fertig) bis Ihr in ACDSee seit. Bei mir war das 12 mal, dann solltest ihr unter einem user32!DialogBoxParamA - call raus kommen. Ok? Drückt danach noch einmal F12 und ihr kommt unter irgendeinen call heraus. Scrollt hoch, ihr seht:
|
Adresse |
Hex |
ASM |
Beschreibuung |
|
43CD52 |
83F8FB |
cmp EAX, -05 |
Hier wird eax mit (-5) verglichen ... |
|
43CD55 |
7513 |
JNZ 0043CD6A |
wenn eax (-5) ist wird NICHT gesprungen ... |
|
43CD57 |
6A00 |
PUSH 00 |
- |
|
43CD59 |
E822050000 |
Call 0043d280 |
... und unser NAG ansgeführt! |
|
43CD5E |
... |
... |
Hier solltet ihr nach den 13x F12 landen. |
EAX wird nach unserer Testphase immer (-5) sein (in SI steht links-oben EAX=FFFFFFFB, das heißt (-05) - einfach mal '?eax' eingeben, dann kann man das auch sehen), dann wird nicht gesprungen und unser call und damit der NAG ausgeführt.
Ok, probieren wir also aus dem JNZ ein JMP zu machen , das machen wir erstenmal als Test nur in SI. Wir löschen alle brakepoints mir 'bc*' und setzen einen neuen auf unser CMP, also 'bpx 43cd52' eingeben. F5 drücken und ACDSee erneut ausführen. SI breakt , wir geben 'd 43cd55' ein und sehen unseren Hexcode im Editier-Fenster. Aus der 75 machen wir ein EB (für JUMP) und drücken F5 damit ACDSee weiter läuft.
Hmm, fuck es startet nicht ... Ok, dann stimmt irgendwas an unseren Registerwerten nicht! Ist es EAX? Versuchen wir etwas anderes: Drehen wir die Systemuhr zurück, so das ACDSee wieder läuft! Starten das Programm erneut, SI breakt, und was sehen wir? 'EAX=00000000'. Aha, also muß in EAX 0 stehen damit das Proggie startet. Löscht alle breakpoints (bc*) und verlasst SI!
Gut, jetzt brauchen wir noch das Hex-Offset damit wir patchen können. Ich nehm 43CD52 und starte W32dasm, jump dahin und lest den Offset unten ab: 3CD52. Jetzt starten wir Hexworks und jumpen zur Offset 3CD52 und ändern wie folgt um:
|
Hex-Adresse |
Original |
Ändern in |
Beschreibung |
|---|---|---|---|
|
3CD52 |
83 - F8 |
33 - C0 |
33C0 = xor EAX, EAX boolesche XOR-Operation, setzt EAX auf 0 |
|
3CD54 |
FB |
90 |
90 = NOP, no Operation, da wir ein Byte übrig haben |
|
3CD55 |
75 |
EB |
EB = Jump, mach aus dem bedingten Jump ein unbedingten (also immer) |
Kurz: Wir patchen also unser 'CMP EAX, -05' zu 'XOR EAX, EAX' damit EAX auf 0 gesetzt wird und ACDSee läuft. Da unser CMP aber 3 Bytes belegte und XOR nur 2 braucht, machen wir aus dem dritten ein 90 (no Operation). Aus unserem bedingten Jump (jump if not equal) machen wir noch einen unbedingten. Fertig.
Abspeichern. ACDSee testen und: Trial period is DONE !!!
So das war unsere Zeitbeschränkung, aber ab-und-zu kommen da noch so hässliche NAGs. Zum Bleistift:

Hier schlage ich vor: Wir üben noch einmal das eben gelernte (aufgefrischte). Also MHOOK, Handel, bmsg *handel* wm_destroy in SI, ein paar mal F12 ... das solltet ihr jetzt selber rausfinden!
Ich sag nur noch eines: der Übeltäter-Jump liegt bei 4B7883. Bei dem NAG müßt Ihr ein paar mal mehr F12 drücken und danach ziemlich weit hochscrollen. Testet Euch selber, ob ihr's verstanden habt ...
Viel Spaß beim cracken, JTK '99!
Jetzt noch das übliche andere:
|
Best regards to: |
Apus (du bist voll cool) stoer (machst' geile GFX) sEVanD02k (das (manchmal) engagierteste tCA-Mitglied) NADA das ganze tCA-Team |
|
Linkz: |
Meine Seite (hier gibt's alle Toolz die ich in meinen Tuts. verwende): http://satanicunderground.da.ru http://satanicunderground.tsx.org |
|
|
tHE cRACKING aNSWER: http://tca2k.da.ru http://tca2k.tsx.org |
|
|
ProTools (alle Crack-Toolz auf einem Haufen): http://w3.to/protools |
|
E-Mail: |