Und hier ist noch ein Cracking Tut von WKz_Daedalus . Diesmal widmen wir uns Heroes 3 ( Deutsche Version , naja mit der englischen müssts eigentlich genauso gehn ) Tja ihr wollt wissen wie man den Shit crackt, ich weisses : sieht fast so aus als wären wir'n gutes Team ! Ach ja wenn ihr die restlichen Tutz von mir gelesen habt, habt ihr vielleicht ein paar Rechtschreibfelha gemerkt : DAS LIEGT ALLES AN DER SCHEISS SIEMENS TASTATUR UND AN DEN SCHEISS SIEMENS CELERON !!!! ICH HASSE SIEMENS !!!!!!!!!!!!!!!!!!!!!!!!!!! So jetzt zum Cracken : Also an Tools brauchen wir das übliche ( Hiew, Windasm, Gehirn) und zusätzlich noch nen anderen Hexeditor um nachher in die ausgenoptete Protection unsere Greetz reizuschreiben. Lach nich !!! Das is alte Daedalus-Tradition !!! So dann lass uns mal anfangen. Ich hoffe installierst kriegst du's alleine ! So dann nimm mal die CD raus und starte Heroes3. Und was passiert... Nachdem uns Das Shit-Prog darüber aufgeklärt hat wie böse wir doch sind einfach keine CD reinzulegen, sehen ( oder besser sehen wir nicht ) ,dass es keinen Singleplayer-Mode gibt. Sowas aber auch ! Also Standart-Prozedur : Datei mit WinDasm öffnen und nach denn allseits geliebten GetDriveTypeA suchen. Während ihr sicherlich die File schon lange diasembeld habt, is mein geiler Celeron noch am Arbeiten; In der nächsten Viertelstund kann ich euch also mal'n bisschen über das Zeug erzählen was ir so brauchen könntet: - Softice Cooler Debugger sollte es unter www.crackstore.com geben - PatchfX Patchmaker ( das heißt er erstellt Exen die, die orginal-Datein in die gecrackten patchen ) keine Ahnung wo's den gibt, aber mailt mal Perf@gmx.net ( und sag dem bloß nich woher du die Addresse has ! ) - Visual C++ oder ein anderer C++ Compiler musste wohl kaufen, wenn du nen' wirklich guten haben willst ( oder du lädst dir knapp 400 MB runter !) - Visual Basic Version 6 ist weitaus besser als 4 ( aber auch 30mal so groß) - Mein Hex-Ascii String Translator wär vielleich auch nicht schlecht zum Passwort Cracken in Soft ice ( oder willste du etwa Strings im Kopf umrechnen ?) Ooooohhhh.... schon fertig, in unglaublichen 4 Minuten; So'n Glück, ich war schon nahe am Geschwindigkeits-Rausch Na los, öffne die Improted Functions. Nein Bitte !!! Nicht so schnell !!!!! Nachdem du ein paarmal geclickt hast, müsstest du es zweimal finden : 1. Ziemlich in der Mitte; Der GetLogicalDrives sieht ziemlich gut aus 2. Ziemlich weit unten; eher uninterresante Gegend ---> versuchen wir's mit Nummer 1 * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004E70F7(C), :004E7178(C) ' Von hier wird die Routine gecallt | :004E7190 33C0 xor eax, eax :004E7192 C644242000 mov [esp+20], 00 :004E7197 B906000000 mov ecx, 00000006 :004E719C 8D7C2421 lea edi, dword ptr [esp+21] :004E71A0 F3 repz :004E71A1 AB stosd :004E71A2 AA stosb * Reference To: KERNEL32.GetLogicalDrives, Ord:0120h ' Listet alle Drives auf | :004E71A3 FF15F8A05B00 Call dword ptr [005BA0F8] * Reference To: KERNEL32.GetDriveTypeA, Ord:0104h ' Das Heiligtum aller Copylock-Coder | :004E71A9 8B35F4A05B00 mov esi, dword ptr [005BA0F4] :004E71AF 33ED xor ebp, ebp :004E71B1 8BF8 mov edi, eax :004E71B3 896C2410 mov dword ptr [esp+10], ebp :004E71B7 BB02000000 mov ebx, 00000002 :004E71BC BA01000000 mov edx, 00000001 :004E71C1 8BCB mov ecx, ebx :004E71C3 D3E2 shl edx, cl :004E71C5 85D7 test edi, edx :004E71C7 7522 jne 004E71EB ' Nein dieser Jump beschleunigt bloß das ( fast ) unvermeidbare :004E71C9 8AC3 mov al, bl :004E71CB 0441 add al, 41 * Possible StringData Ref from Data Obj ->"A:\" | :004E71CD 68A44A5E00 push 005E4AA4 ' Pusht Variablen für den Call hier :004E71D2 A2A44A5E00 mov byte ptr [005E4AA4], al | :004E71D7 FFD6 call esi <-----------------------| ' Da das aber ein Call Esi ist, können wir den nicht nachgehen :004E71D9 83F805 cmp eax, 00000005 ' Der Allbekannte Compare ( Lustig : Compare so ändern, das Game nur noch von Diskette aus gestartet werden kann ) :004E71DC EB0D jmp 004E71EB --------| ' Kein Conditional Jump ???? Was soll'n das ??? :004E71DE 8B442410 mov eax, dword ptr [esp+10] | :004E71E2 885C0420 mov byte ptr [esp+eax+20], bl | :004E71E6 40 inc eax | :004E71E7 89442410 mov dword ptr [esp+10], eax | | * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: | |:004E71C7(C), :004E71DC(U) | | | :004E71EB 43 inc ebx <----------------------------| :004E71EC 83FB1A cmp ebx, 0000001A :004E71EF 90 nop :004E71F0 90 nop :004E71F1 0FBE4C2410 movsx ecx, byte ptr [esp+10] * Reference To: USER32.wsprintfA, Ord:02ACh ' Wahrscheinlich die geile Fehlermeldung | :004E71F6 8B35A8A25B00 mov esi, dword ptr [005BA2A8] :004E71FC 896C2418 mov dword ptr [esp+18], ebp * Reference To: WINMM.mciSendStringA, Ord:0035h ' Hier der Rest von der Meldung | :004E7200 8B2DC8A25B00 mov ebp, dword ptr [005BA2C8] :004E7206 894C241C mov dword ptr [esp+1C], ecx * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004E736D(C) | :004E720A 8B44241C mov eax, dword ptr [esp+1C] Tja Jungs, sieht schlecht aus. Kein Conditional Jump denn wir einfach ändern können ? Der Jump bei 4E71C7 überprüft bloß, ob es das aktuelle Laufwerk überhaupt gibt ( eigentlich schwachsinnig ). Schade tut mir wirklich leicht, das is uncrackbar, würden andere jetzt sagen. Aber ihr habt ja noch mich. Also mal nachdenken... Hmmm, das ist wirklich ne schöne Protection Scheme, wirklich Schade wenn die garnicht erst zum Einsatz käme Gute Idee an sich also werfen wir mal nen Blick auf diese Zeilen : * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004E70F7(C), :004E7178(C) | :004E7190 33C0 xor eax, eax :004E7192 C644242000 mov [esp+20], 00 War schliessen wir daraus : 004E70F7 und 004E7178 sind die Bösewichte. Springe nun zu 4E70F7 ( mit goto Code Location ) und Schau dir das mal an : * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004E7094(C), :004E70CD(C) ' Hieraus können wir schließen, dass die obere Routine nur eine Unter-Routine ( aber die wichtigste ) einer anderen Routie ist | :004E70DF 50 push eax :004E70E0 E85C960B00 call 005A0741 ' Callt Sub, die sooft gecallt wird, das wir da lieber nichts dran rumwerkeln :004E70E5 83C9FF or ecx, FFFFFFFF :004E70E8 33C0 xor eax, eax :004E70EA 83C404 add esp, 00000004 :004E70ED BF1C136000 mov edi, 0060131C :004E70F2 F2 repnz :004E70F3 AE scasb :004E70F4 F7D1 not ecx :004E70F6 49 dec ecx :004E70F7 0F8493000000 je 004E7190 ' Einer unserer beiden Jumps :004E70FD 83C9FF or ecx, FFFFFFFF :004E7100 33D2 xor edx, edx * Possible StringData Ref from Data Obj ->"d;^kIwuL{"d;^kIwuL{"d;^kIwuL{"d;^kIwuL{-----------------------| | * Referenced by a (U)nconditional or (C)onditional Jump at Address: | |:004E7173(C) | | | :004E715B 0092087E5E00 add byte ptr [edx+005E7E08], dl <----| | :004E7161 83C9FF or ecx, FFFFFFFF | | :004E7164 33C0 xor eax, eax | | :004E7166 42 inc edx | | | | * Possible StringData Ref from Data Obj ->"d;^kIwuL{