Cracking Tuturial #2 by WKz_Daedalus Hier is noch ein Tuturial für alle blutigen Beginner... Was soll diesmal dran glauben ? Ich habe mich für Seven Kingdoms entschieden, weil es auch einen sehr einfachen Copylock hat Brauchen wir neue Tools ? Nein, wir brauchen wieder nur Windasm, Hiew und nen Rechner. Let'z go Installiere 7K in der Singleplayer-Installation. So mußt du zwar auf Sound verzichtent, brauchst aber auch bloß 40MB Speicher auf der Platte. Jetzt starte mal 7K ohne CD und was siehst du? Die Option für Singleplayer ist einfach abgedunkelt. Schweinerei ! Lade 7K mit Windasm. Nach der Fehlermeldung brauchen wir diesmal natürlich nicht suchen. Klick stattdessen auf den Button mit "Imp Fn" drauf. Imported Functions sind sogennante Apis, Funktionen die vom Betriebssystem berreit gestellt werden. Wir suchen die Function "GetDriveTypeA" in der Kernel32. GetDriveTypeA gibt die Art eines Laufwerks zurück, z.B. ob man von der Platte oder einer CD startet. Nachdem du den Api gefunden hast müsstest du das hier sehen : * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00484F81(U) | :00484F2A FE45F8 inc [ebp-08] <-----------------------------------------------------------------------| | * Referenced by a (U)nconditional or (C)onditional Jump at Address: ' Dieser Teil der Routine | |:00484F25(U) ' sorgt dafür dass das | | ' nächste Laufwerk gecheckt wird | :00484F2D 33C0 xor eax, eax | :00484F2F 8A45F8 mov al, byte ptr [ebp-08] | :00484F32 83F85A cmp eax, 0000005A | :00484F35 0F8D4B000000 jnl 00484F86 | :00484F3B 8A45F8 mov al, byte ptr [ebp-08] | :00484F3E A248335600 mov byte ptr [00563348], al | :00484F43 8A45F8 mov al, byte ptr [ebp-08] | :00484F46 8845FC mov byte ptr [ebp-04], al | :00484F49 8D45FC lea eax, dword ptr [ebp-04] | :00484F4C 50 push eax | | * Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh ' Überprüft ob Laufwerk ein | | ' CD-Drive ist | :00484F4D FF152C835800 Call dword ptr [0058832C] | :00484F53 83F805 cmp eax, 00000005 ' 00000005 = CDROM | :00484F56 0F8525000000 jne 00484F81 >-------------------------------| | | | * Possible StringData Ref from Data Obj ->"D:\7K.EXE" | | | | | :00484F5C 6848335600 push 00563348 | | :00484F61 B9A8CE5600 mov ecx, 0056CEA8 | | :00484F66 E804FB0000 call 00494A6F | 'callt ein Sub-Prog | :00484F6B 85C0 test eax, eax | 'Checkt ob D:\7K.exe da ist | :00484F6D 0F840E000000 je 00484F81 >-------------------------------| | :00484F73 8A45F8 mov al, byte ptr [ebp-08] | | :00484F76 8B4DF4 mov ecx, dword ptr [ebp-0C] | | :00484F79 884159 mov byte ptr [ecx+59], al | | :00484F7C E905000000 jmp 00484F86 >-----------------| | ' jump aus der Routine raus | | | | * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: | | |:00484F56(C), :00484F6D(C) | | | | | | | :00484F81 E9A4FFFFFF jmp 00484F2A <-------------------------------| ' jumpt zum beginn der Routine zurück | | * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:00484F35(C), :00484F7C(U) | | | :00484F86 E900000000 jmp 00484F8B <----------------| * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00484F86(U) | :00484F8B 5F pop edi Hier meine Erklärung : Mit GetDriveTypeA wird gecheckt ob das aktueller Laufwerk ein CD-Drive ist. Wenn es keines ist, jumpt der Prog über einen Umweg, der uns nur irritieren soll zum Beginn der Routine. Wenn der Drive ein CD-Drive ist geht es weiter zum nächsten Test. Bei 484F66 wird folgender Sub-Prog gecallt : * Referenced by a CALL at Addresses: |:00417B6F , :00417B8D , :0046F72F , :0047EBCF , :004820A3 ' sehr häufig benutzte Sub |:004820BA , :00482142 , :00482159 , :00484A35 , :00484E77 |:00484F66 , :00487B4F , :0048BBE1 , :0049BF88 , :004A1423 |:004A379E , :004A3811 , :004A7CC1 , :004A7D8B , :004B53B6 |:004B53FF , :004B58D4 , :004ED53A , :00532CCE | :00494A6F 55 push ebp :00494A70 8BEC mov ebp, esp :00494A72 81EC48010000 sub esp, 00000148 :00494A78 53 push ebx :00494A79 56 push esi :00494A7A 57 push edi :00494A7B 898DB8FEFFFF mov dword ptr [ebp+FFFFFEB8], ecx :00494A81 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0] :00494A87 50 push eax :00494A88 8B4508 mov eax, dword ptr [ebp+08] :00494A8B 50 push eax * Reference To: KERNEL32.FindFirstFileA, Ord:0079h 'Api der feststellt welche Datei die erste | 'im Verzeichnis ist; normalerweise 7K.Exe :00494A8C FF1580835800 Call dword ptr [00588380] :00494A92 8985BCFEFFFF mov dword ptr [ebp+FFFFFEBC], eax :00494A98 83BDBCFEFFFFFF cmp dword ptr [ebp+FFFFFEBC], FFFFFFFF :00494A9F 0F840A000000 je 00494AAF >---------------------------------| :00494AA5 B801000000 mov eax, 00000001 | :00494AAA E902000000 jmp 00494AB1 >------------------------| | 'überspringt Veränderung | | * Referenced by a (U)nconditional or (C)onditional Jump at Address: | | |:00494A9F(C) | | | | | :00494AAF 33C0 xor eax, eax <--------------------------------| 'verändert eax für Vergleichsoperation | * Referenced by a (U)nconditional or (C)onditional Jump at Address: | |:00494AAA(U) | | | :00494AB1 E900000000 jmp 00494AB6 <------------------------| * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00494AB1(U) | :00494AB6 5F pop edi :00494AB7 5E pop esi :00494AB8 5B pop ebx :00494AB9 C9 leave :00494ABA C20400 ret 0004 ' Hier kehrt das Prog wieder zum normalen Code zurück In diesen Fall können wir aber an dieser Stelle nichts ändern, da diese Sub sehr oft gecallt wird. Kehren wir nun also zu unseren richtigen Code zurück. Der von der Sub geänderte Wert wird nun mit einen anderen verglichen. Wenn beide gleich sind, jumpt er wieder zum Beginn der Routine. Wenn keiner der beiden Jumps ausgeführt wird, kommem wir zu zu den Jump bei 494AAA, der zum Spielstart führt. Wir müssen also diesen Jump erreichen. Dies tuen wir indem wir die beiden anderen Jumps einfach killen ! Zuerst brauchen wir die Offsets : 84356 und 8436D. Gut jetzt öffne die Exe in Hiew und Nope die Beiden Jumps aus. Das Heisst überschreibe die beide Jump-Befehle komplett mit 90. Achtung : wenn du dies hattest... 0F840E000000 8A45F8 ...muss dass rauskommen : 909090909090 8A45F8 In Assembler rutschen manchmal die Zeile durcheinander, wenn du eine veränderst ! So das war's... 2 Tuturialz an einen Tag... Not Bad !!! WKz_Daedalus@gmx.net www.geocities.com/winkillerz Greetz : Alle WKz Memberz ( vorallen matrix ) r!sc Black Check sn00pee gonzo xcrk Laxity Duellist