Cracking Tuturial by WKz_Daedalus Hallo, das ist mein erstes Tuturial. Ich habe es auf Deutsch geschrieben, weil ich meine das es viel zu wenig Deutsche Tuturialz gibt. Als ich vor knapp 1 Jahr angefangen gabe gab es fast nur englisch Tuturialz. euch solls jetz besser gehn. Was wollen wir cracken ? Ich habe mich für Deus Ex entschieden, weil der Copy-Lock mit das Primitivste ist was es gibt und weil Deus Ex ein echt geiles Game ist, in den man meinen Namens-Vetter trifft. Was brauchen wir ? - Windasm 8.93 - einen Hexeditor ( ich bevorzuge HIEW 6.16 ) - denn Kram kriegste bei www.Crackstore.com - Deus Ex - Assembler-Kenntnisse wären nicht schlecht Los gehst : Zuerst mal installierst du Deus Ex voll, nimmst die CD raus und startest. Was, Deus Ex hat doch tatsächlich die Frechheit eine CD zu verlangen ? Merk dir die Meldung und öffne DeuxEx.exe mit Windasm. Klick auf Strn Ref in der Symbolleiste und such nach der Meldung. Entgegen aller Erwartungen steht dieser Ref nicht drin. Scrolle die Liste weiter und suche nach auffäligen Dingen. Irgendwann müsste da sowas wie "InsertCdText" stehen. Klick drauf und schon landest du mitten im schönsten Assembler-Wirrwarr : * Possible StringData Ref from Data Obj ->"InsertCdTitle" ' übergibt Titel für die MessageBoxW | :1090BA0B 68A0D59210 push 1092D5A0 * Reference To: Core.?LocalizeGeneral@@YAPBGPBDPBG1@Z, Ord:03EAh ' übersetzt Titel für die MessageBoxW | :1090BA10 FF15607B9510 Call dword ptr [10957B60] :1090BA16 83C40C add esp, 0000000C :1090BA19 89851CF9FFFF mov dword ptr [ebp+FFFFF91C], eax :1090BA1F 6A00 push 00000000 * Possible StringData Ref from Data Obj ->"Window" | :1090BA21 6828CE9210 push 1092CE28 * Possible StringData Ref from Data Obj ->"InsertCdText" ' übergibt Text für die MessageBoxW | :1090BA26 6890D59210 push 1092D590 * Reference To: Core.?LocalizeGeneral@@YAPBGPBDPBG1@Z, Ord:03EAh ' übersetzt Titel für die MessageBoxW | :1090BA2B FF15607B9510 Call dword ptr [10957B60] :1090BA31 83C40C add esp, 0000000C :1090BA34 898518F9FFFF mov dword ptr [ebp+FFFFF918], eax :1090BA3A 6801200500 push 00052001 :1090BA3F 8B851CF9FFFF mov eax, dword ptr [ebp+FFFFF91C] :1090BA45 50 push eax :1090BA46 8B8D18F9FFFF mov ecx, dword ptr [ebp+FFFFF918] :1090BA4C 51 push ecx :1090BA4D 6A00 push 00000000 * Reference To: USER32.MessageBoxW, Ord:01C3h ' Callt eine MessageBoxW <--- hier wirds interresant | :1090BA4F FF15C07F9510 Call dword ptr [10957FC0] :1090BA55 83F802 cmp eax, 00000002 ' checkt ob "Wiederholen" gewählt wurde :1090BA58 7514 jne 1090BA6E ' wenn Wieder holen gewählt wurde jumpt er... >| | * Reference To: Core.?GIsCriticalError@@3HA, Ord:02DCh | | | :1090BA5A 8B15347C9510 mov edx, dword ptr [10957C34] | :1090BA60 C70201000000 mov dword ptr [edx], 00000001 | :1090BA66 6A00 push 00000000 | | * Reference To: KERNEL32.ExitProcess, Ord:007Dh | | | :1090BA68 FF15BC7D9510 Call dword ptr [10957DBC] 'sonst wird Deus Ex hier beendet | | * Referenced by a (U)nconditional or (C)onditional Jump at Address: | |:1090BA58(C) | | 'hierhin | :1090BA6E E946FFFFFF jmp 1090B9B9 <-------------------------------------------------| Wir können mal ganz stark davon ausgehen das Deus Ex wenn wir auf wiederholen geklickt haben wieder zum Anfang der Routine jumpt Also führe denn letzen Jump mit "Jump to" aus Du müsstest hier raus kommen : * Reference To: Core.?GIsEditor@@3HA, Ord:02DDh | :1090B9B9 8B0D047C9510 mov ecx, dword ptr [10957C04] :1090B9BF 833900 cmp dword ptr [ecx], 00000000 ' Checkt irgendwas :1090B9C2 0F85AB000000 jne 1090BA73 ' wichtiger Jump ! >----------------------------| :1090B9C8 8D8DA4FCFFFF lea ecx, dword ptr [ebp+FFFFFCA4] | | * Reference To: Core.??DFString@@QBEPBGXZ, Ord:01B8h | | | :1090B9CE FF15DC7B9510 Call dword ptr [10957BDC] | :1090B9D4 898524F9FFFF mov dword ptr [ebp+FFFFF924], eax | :1090B9DA 8B9524F9FFFF mov edx, dword ptr [ebp+FFFFF924] | :1090B9E0 52 push edx | :1090B9E1 A1547C9510 mov eax, dword ptr [10957C54] | :1090B9E6 8B08 mov ecx, dword ptr [eax] | | * Reference To: Core.?GFileManager@@3PAVFFileManager@@A, Ord:02D7h ' Hat irgendwas mit dem Dateisystem zu tun | | | :1090B9E8 8B15547C9510 mov edx, dword ptr [10957C54] | :1090B9EE 8B02 mov eax, dword ptr [edx] | :1090B9F0 8B10 mov edx, dword ptr [eax] | :1090B9F2 FF5208 call [edx+08] | :1090B9F5 898520F9FFFF mov dword ptr [ebp+FFFFF920], eax | :1090B9FB 83BD20F9FFFF00 cmp dword ptr [ebp+FFFFF920], 00000000 | :1090BA02 7F6F jg 1090BA73 ' Einer der möglichen Punkte für den Crack >----| :1090BA04 6A00 push 00000000 | | * Possible StringData Ref from Data Obj ->"Window" | | | :1090BA06 6828CE9210 push 1092CE28 | | .... | | :1090BA6E E946FFFFFF jmp 1090B9B9 ' Der Jump von vorhin | | * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: | |:1090B9C2(C), :1090BA02(C) | | | :1090BA73 C645FC31 mov [ebp-04], 31 | :1090BA77 8D8DA4FCFFFF lea ecx, dword ptr [ebp+FFFFFCA4] <-------------------------------------------------| Also wenn einer der Jumps bei 1090B9C2 oder 1090BA02 ausgeführt wird, jumpt das Prog direkt hinter die MessageBox. Klick auf einen der beiden Jumps ( hier reicht es einen zu cracken ) und lies den Offset in der Statusleiste ab. Du müsstest B9C2 bzw. BA02 rauskriegen ( h wird weggelassen , das steht bloß für Hexadezimal ). Nun kannst du Windasm schließen und Hiew starten. Du müsstest jetzt ein ziemliches Wirrwarr sehen ( noch schlimmer als Assembler ) ,also drück F4 und wähl "decode" an. Nun müsstest du wieder meinen geliebten Assembler Code sehen. Drück F5 und gib einen Offset ein. Wenn du denn ersten gewählt hast sieht du am oberen Rand jetzt die Zeichenfolge "0F85AB000000" Das heißt so viel wie wenn beim vorhergehenden Compare nicht gleiches rauskommt, starte Spiel Der Compare checkt ob die CD nicht vorhanden ist ,der jne = Jump if not equal ( = springe wenn falsch ) kehrt das ganze um. also : wenn CD nicht nicht vorhanden , starte Spiel Da hier für das jne die lange Umschreibung ( 0F85 ) gewählt wurde und es keinen 4-teiligen Code für einen direkten Jump gibt, müssen wir den Jump negieren, was dazu führt das man Deus Ex nicht spielen kann, wenn die CD drin ist. Gehe mit den Cursor unter die 85 ,drück F3 und änder 85 in 84. Jetzt müsste da je stehen. Speichere jetzt deine Arbeit mit F9. So und jetzt zu den möglichen Crack-Punkt ( eigentlich reicht ja einer, aber du willst ja sicherlich was lernen...) . Ich würde diesen Jump bevorzugen, da hier bloß 7F6F steht, die Jump-Condition also bloß 2-stellig. Hier können wir den Jump so ändern das er immer jumpt: ändere 7F zu EB, was soviel wie Jump directly to bedeutet. Nachdem du die Änderung gepeichert hast kannst du Deus Ex zum Test mal starten. Kleiner Tip am Rande: während du im Edit-Modus bist, kannst du F2 drücken und den Assembler Befehl eingeben. Die wichtigsten sind : Hex: Assemler: Bedeutung: 75 oder 0F85 jne jump if not equal 74 oder 0F84 je jump if equal 77 or 0F87 ja jump if above 0F86 jna jump if not above 0F83 jae jump if above or equal 0F82 jnae jump if not above or equal 0F82 jb jump if below 0F83 jnb jump if not below 0F86 jbe jump if below or equal 0F87 jnbe jump if not below or equal 0F8F jg jump if greater 0F8E jng jump if not greater 0F8D jge jump if greater or equal 0F8C jnge jump if not greater or equal 0F8C jl jump if less 0F8D jnl jump if not less 0F8E jle jump if less or equal 0F8F jnle jump if not less or equal EB jmp oder jmps jump directly to 84 test test 90 nop no operation by WKz_Daedalus www.geocities.com/winkillerz WKz_Daedalus@gmx.net Greetz : Alle WKz Memberz ( vorallen matrix ) r!sc Black Check sn00pee gonzo xcrk Laxity Duellist ByteBurn