Die interessante Routine beginnt bei 0x00402E90.
//Den IsDebuggerPresent fixen
00402EAF |. FF15 00604000 CALL DWORD PTR DS:[<&KERNEL32.SetProcessDEPPoli>; kernel32.SetProcessDEPPolicy
00402EB5 |. FF15 04604000 CALL DWORD PTR DS:[<&KERNEL32.IsDebuggerPresent>; [IsDebuggerPresent
00402EBB |. 85C0 TEST EAX,EAX
00402EBD EB 08 JMP SHORT crackme.00402EC7
00402EBF |. 6A 00 PUSH 0 ; /status = 0
// Mnemonic wird geladen und befindet sich dann bei 0x0012FCD0
00402F3C C74424 18 739E7B>MOV DWORD PTR SS:[ESP+18],847B9E73
00402F44 C74424 1C C5457B>MOV DWORD PTR SS:[ESP+1C],A47B45C5
00402F4C C74424 20 C57508>MOV DWORD PTR SS:[ESP+20],0C0875C5
00402F54 C74424 24 FC0D51>MOV DWORD PTR SS:[ESP+24],5510DFC
00402F5C C74424 28 C5F278>MOV DWORD PTR SS:[ESP+28],5178F2C5
usw. bis
004033C6 |. C78424 D801000>MOV DWORD PTR SS:[ESP+1D8],55D184CC
004033D1 |. C78424 DC01000>MOV DWORD PTR SS:[ESP+1DC],999D9195
004033DC |. C78424 E001000>MOV DWORD PTR SS:[ESP+1E0],898D8185
004033E7 |. C78424 E401000>MOV DWORD PTR SS:[ESP+1E4],5595B1B5
// "Verschlüsselte Mnemonics"
0012FCD0 73 9E 7B 84 C5 45 7B A4 C5 75 08 0C FC 0D 51 05 sž{„ÅE{¤Åu.ü.Q
0012FCE0 C5 F2 78 51 55 55 63 BF 46 51 55 55 08 97 DB FF ÅòxQUUc¿FQUU—Ûÿ
0012FCF0 97 4F FF 97 4E FF 97 4A FF 97 4D FF 97 C6 63 9F —Oÿ—Nÿ—Jÿ—Mÿ—ÆcŸ
0012FD00 07 55 55 55 57 AD 84 80 28 FF 97 DE FF 97 48 FF UUUW*„€(ÿ—Þÿ—Hÿ
0012FD10 97 4F FF 97 C6 FF 97 CD FF 95 56 FF 63 9C 89 57 —Oÿ—Æÿ—Íÿ•Vÿcœ‰W
0012FD20 AD 80 80 44 91 56 7B A5 C5 7B 84 C5 45 B3 65 55 *€€D‘V{¥Å{„ÅE³eU
0012FD30 55 55 9A CF 71 72 80 51 54 7B A5 C5 7B 84 C5 45 UUšÏqr€QT{¥Å{„ÅE
0012FD40 14 B3 65 55 55 55 E7 48 FD 48 AA D2 B2 34 71 72 ³eUUUçHýHªÒ²4qr
0012FD50 80 51 54 F6 87 55 55 55 F6 7C 55 55 55 52 F6 5D €QTö‡UUUö|UUURö]
0012FD60 28 5B B6 51 84 05 FA 59 28 2C 28 63 9F 73 51 55 ([¶Q„úY(,(cŸsQU
0012FD70 55 57 AD 4C 84 D9 91 8E FA 29 F4 3B 55 55 55 51 UW*L„Ù‘Žú)ô;UUUQ
0012FD80 05 C5 5B B2 51 84 51 5A 38 63 9F C7 51 55 55 69 Å[²Q„QZ8cŸÇQUUi
0012FD90 EB 96 57 AD 18 84 5D 91 8E 0C 91 72 E7 50 75 56 ë–W*„]‘Ž.‘rçPuV
0012FDA0 80 BE 70 2C 9A C7 5A 38 28 2C 14 91 56 B3 AA AA €¾p,šÇZ8(,‘V³ªª
0012FDB0 AA AA 08 9E EF 28 8A 12 70 10 08 63 BF B0 51 55 ªªžï(Špc¿°QU
0012FDC0 55 9A C7 2C 3B 3A DA 9A 69 E8 7F B0 51 55 55 30 UšÇ,;:Úšiè°QUU0
0012FDD0 63 BF B0 51 55 55 9A C7 9A 69 E8 5F B0 51 55 55 c¿°QUUšÇšiè_°QUU
0012FDE0 CC 69 B6 52 CC 69 EA 72 CC 69 8C 52 CC 69 0A 56 Ìi¶RÌiêrÌiŒRÌi.V
0012FDF0 91 72 18 1C 91 1E BB AA AA 55 55 8A 9A 74 51 16 ‘r‘»ªªUUŠštQ
0012FE00 71 56 80 51 50 3C 38 34 51 76 18 5A 7B A4 C5 45 qV€QP<84QvZ{¤ÅE
0012FE10 7B 84 C5 75 91 72 50 52 D2 59 5B 52 45 1C 48 4C {„Åu‘rPRÒY[REHL
0012FE20 7F 08 AA 7F 8C AA B5 9E D2 86 3C 71 72 80 51 54 ªŒªµžÒ†<qr€QT
0012FE30 5A 91 72 0C E7 50 75 56 80 BE 70 7B A5 C5 2C E7 Z‘r.çPuV€¾p{¥Å,ç
0012FE40 56 76 59 85 FF FF DE 8A 5A 55 55 55 55 55 55 55 VvY…ÿÿÞŠZUUUUUUU
0012FE50 55 55 55 55 55 55 55 55 55 4C D0 E4 98 D8 F4 E5 UUUUUUUUULÐä˜Øôå
0012FE60 D5 8C C0 9C 98 80 D8 F4 C9 98 D5 EC E8 D8 F4 E0 ÕŒÀœ˜€ØôɘÕìèØôà
0012FE70 D0 E4 D1 55 18 C0 F4 9C D5 C8 80 84 E5 D5 C4 80 ÐäÑUÀôœÕÈ€„åÕÄ€
0012FE80 D5 F4 D0 98 84 D5 C0 98 D5 C8 C0 98 D8 F4 D0 CC ÕôИ„ÕÀ˜ÕÈÀ˜ØôÐÌ
0012FE90 CC 84 D1 55 95 91 9D 99 85 81 8D 89 B5 B1 95 55 Ì„ÑU•‘™…‰µ±•U
Die Mnemonics werden mit ROR 2 und einem XOR 55 entschlüsselt. Das sieht dann so aus:
00344E50 89 F2 8B 74 24 04 8B 7C 24 08 57 56 6A 16 01 14 ‰ò‹t$‹|$WVj
00344E60 24 E9 4B 01 00 00 8D BA C4 01 00 00 57 B0 A3 AA $éK..ºÄ..W°£ª
00344E70 B0 86 AA B0 C6 AA B0 C7 AA B0 06 AA B0 E4 8D B2 °†ª°Æª°Çª°ª°ä²
00344E80 94 00 00 00 80 3E 74 75 5F AA B0 E2 AA B0 47 AA ”...€>tu_ª°âª°Gª
00344E90 B0 86 AA B0 E4 AA B0 26 AA 30 C0 AA 8D 72 37 80 °†ª°äª°&ª0Àªr7€
00344EA0 3E 75 75 44 31 C0 8B 3C 24 8B 74 24 04 B9 0C 00 >uuD1À‹<$‹t$¹..
00344EB0 00 00 F3 A6 09 C9 75 01 40 8B 3C 24 8B 74 24 04 ..ó¦.Éu@‹<$‹t$
00344EC0 50 B9 0C 00 00 00 AC 47 2A 47 FF E1 F9 58 09 C9 P¹....¬G*GÿáùX.É
00344ED0 75 01 40 E8 B4 00 00 00 E8 4A 00 00 00 C1 E8 02 u@è´...èJ...Áè
00344EE0 5F 83 F8 01 74 14 EB 03 5F 5E 5F 8D B2 89 01 00 _ƒøtë_^_²‰.
00344EF0 00 80 3E 46 74 23 31 F6 EB 1F 68 9B 00 00 00 01 .€>Ft#1öëh›...
00344F00 14 24 83 F9 01 74 01 C3 5B 8D B2 A4 01 00 00 0F $ƒùtÃ[²¤..
00344F10 AF F0 80 3E 53 74 02 31 F6 56 31 C9 AC 41 08 C0 ¯ð€>St1öV1ɬAÀ
00344F20 75 FA 49 5E F3 A4 C3 5B 5F 5E 50 31 C0 B9 FF FF uúI^ó¤Ã[_^P1À¹ÿÿ
00344F30 FF FF 57 F2 AE 5F F7 D1 49 51 57 8D BA 79 01 00 ÿÿWò®_÷ÑIQWºy.
00344F40 00 F3 A4 5E 9B DB E3 F3 0F 6F 8A 79 01 00 00 59 .ó¤^›ÛãóoŠy..Y
00344F50 8D BA 79 01 00 00 F3 A4 F3 0F 6F 82 79 01 00 00 ºy..ó¤óo‚y..
00344F60 66 0F F8 C1 66 0F EF C9 66 0F 76 C1 66 0F D7 C0 føÁfïÉfvÁf×À
00344F70 31 C9 53 52 31 D2 BB FF FF 00 00 F7 F3 48 01 D0 1ÉSR1Ò»ÿÿ..÷óHÐ
00344F80 09 C0 75 01 41 5A 5B 58 01 C8 53 C3 8B 7C 24 04 .ÀuAZ[XÈSË|$
00344F90 8B 74 24 08 31 C9 41 C1 E1 03 83 C1 04 52 47 46 ‹t$1ÉAÁáƒÁRGF
00344FA0 8A 57 FF 8A 76 FF 38 F2 E1 F4 5A 09 C9 75 01 40 ŠWÿŠvÿ8òáôZ.Éu@
00344FB0 C3 31 C9 56 AC 41 08 C0 75 FA 49 8B 3C 24 5E AC Ã1ÉV¬AÀuúI‹<$^¬
00344FC0 C0 C8 03 34 AA AA E2 F7 C3 00 00 00 00 00 00 00 ÀÈ4ªªâ÷Ã.......
00344FD0 00 00 00 00 00 00 00 00 00 46 61 6C 73 63 68 2C .........Falsch,
00344FE0 20 76 65 72 73 75 63 68 27 73 20 6E 6F 63 68 6D versuch's nochm
00344FF0 61 6C 21 00 53 65 68 72 20 67 75 74 2C 20 64 75 al!.Sehr gut, du
00345000 20 68 61 73 74 20 65 73 20 67 65 73 63 68 61 66 hast es geschaf
00345010 66 74 21 00 30 31 32 33 34 35 36 37 38 39 30 00 ft!.01234567890.
Nun müssen wir uns diesen Code nur noch anschauen und die passenden Stellen fixen.
00344E61 E9 4B010000 JMP 00344FB1
00344E66 8DBA C4010000 LEA EDI,DWORD PTR DS:[EDX+1C4]
00344E6C 57 PUSH EDI
00344E6D B0 A3 MOV AL,0A3
00344E6F AA STOS BYTE PTR ES:[EDI]
00344E70 B0 86 MOV AL,86
00344E72 AA STOS BYTE PTR ES:[EDI]
00344E73 B0 C6 MOV AL,0C6
00344E75 AA STOS BYTE PTR ES:[EDI]
00344E76 B0 C7 MOV AL,0C7
00344E78 AA STOS BYTE PTR ES:[EDI]
00344E79 B0 06 MOV AL,6
00344E7B AA STOS BYTE PTR ES:[EDI]
00344E7C B0 E4 MOV AL,0E4
00344E7E 8DB2 94000000 LEA ESI,DWORD PTR DS:[EDX+94]
00344E84 803E 74 CMP BYTE PTR DS:[ESI],74
00344E87 90 NOP <-- gefixt
00344E88 90 NOP <-- gefixt
00344E89 AA STOS BYTE PTR ES:[EDI]
00344E8A B0 E2 MOV AL,0E2
00344E8C AA STOS BYTE PTR ES:[EDI]
00344E8D B0 47 MOV AL,47
00344E8F AA STOS BYTE PTR ES:[EDI]
00344E90 B0 86 MOV AL,86
00344E92 AA STOS BYTE PTR ES:[EDI]
00344E93 B0 E4 MOV AL,0E4
00344E95 AA STOS BYTE PTR ES:[EDI]
00344E96 B0 26 MOV AL,26
00344E98 AA STOS BYTE PTR ES:[EDI]
00344E99 30C0 XOR AL,AL
00344E9B AA STOS BYTE PTR ES:[EDI]
00344E9C 8D72 37 LEA ESI,DWORD PTR DS:[EDX+37]
00344E9F 803E 75 CMP BYTE PTR DS:[ESI],75
00344EA2 90 NOP <-- gefixt
00344EA3 90 NOP <-- gefixt
00344EA4 31C0 XOR EAX,EAX
00344EA6 8B3C24 MOV EDI,DWORD PTR SS:[ESP]
00344EA9 8B7424 04 MOV ESI,DWORD PTR SS:[ESP+4]
00344EAD B9 0C000000 MOV ECX,0C
00344EB2 F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00344EB4 09C9 OR ECX,ECX
00344EB6 75 01 JNZ SHORT 00344EB9
00344EB8 40 INC EAX
00344EB9 8B3C24 MOV EDI,DWORD PTR SS:[ESP]
00344EBC 8B7424 04 MOV ESI,DWORD PTR SS:[ESP+4]
00344EC0 50 PUSH EAX
00344EC1 B9 0C000000 MOV ECX,0C
00344EC6 AC LODS BYTE PTR DS:[ESI]
00344EC7 47 INC EDI
00344EC8 2A47 FF SUB AL,BYTE PTR DS:[EDI-1]
00344ECB ^E1 F9 LOOPDE SHORT 00344EC6
00344ECD 58 POP EAX
00344ECE 09C9 OR ECX,ECX
00344ED0 75 01 JNZ SHORT 00344ED3
00344ED2 40 INC EAX
00344ED3 E8 B4000000 CALL 00344F8C
00344ED8 E8 4A000000 CALL 00344F27
00344EDD C1E8 02 SHR EAX,2
00344EE0 5F POP EDI
00344EE1 83F8 01 CMP EAX,1
00344EE4 EB 14 JMP SHORT 00344EFA <-- gefixt
00344EE6 EB 03 JMP SHORT 00344EEB
00344EE8 5F POP EDI
00344EE9 5E POP ESI
00344EEA 5F POP EDI
00344EEB 8DB2 89010000 LEA ESI,DWORD PTR DS:[EDX+189]
00344EF1 803E 46 CMP BYTE PTR DS:[ESI],46
00344EF4 74 23 JE SHORT 00344F19
00344EF6 31F6 XOR ESI,ESI
00344EF8 EB 1F JMP SHORT 00344F19
00344EFA 68 9B000000 PUSH 9B
00344EFF 011424 ADD DWORD PTR SS:[ESP],EDX
00344F02 83F9 01 CMP ECX,1
00344F05 EB 01 JMP SHORT 00344F08 <-- gefixt
00344F07 C3 RETN
00344F08 5B POP EBX
00344F09 8DB2 A4010000 LEA ESI,DWORD PTR DS:[EDX+1A4]
00344F0F 90 NOP <-- gefixt
00344F10 90 NOP <-- gefixt
00344F11 90 NOP <-- gefixt
00344F12 803E 53 CMP BYTE PTR DS:[ESI],53
00344F15 74 02 JE SHORT 00344F19
00344F17 31F6 XOR ESI,ESI
00344F19 56 PUSH ESI
00344F1A 31C9 XOR ECX,ECX
00344F1C AC LODS BYTE PTR DS:[ESI]
00344F1D 41 INC ECX
00344F1E 08C0 OR AL,AL
00344F20 ^75 FA JNZ SHORT 00344F1C
00344F22 49 DEC ECX
00344F23 5E POP ESI
00344F24 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00344F26 C3 RETN
Für den Fix müssen wir die "Verschlüsselung" zurück rechnen. Also XOR 55 mit einem ROL 2. Die gefixten Stellen
müssen dann nur noch bei dem Ladevorgang angepasst werden. Das sind folgende Stellen:
_____________________________________________________________
Das hier
00402FA8 C74424 4C 57AD84>MOV DWORD PTR SS:[ESP+4C],8084AD57
00402FB0 C74424 50 28FF97>MOV DWORD PTR SS:[ESP+50],DE97FF28
Wird zu:
00402FA8 C74424 4C 57AD84>MOV DWORD PTR SS:[ESP+4C],1784AD57
00402FB0 C74424 50 28FF97>MOV DWORD PTR SS:[ESP+50],DE97FF17
______________________________________________________________
Das hier
00402FE0 C74424 68 AD8080>MOV DWORD PTR SS:[ESP+68],448080AD
Wird zu:
00402FE0 C74424 68 AD8080>MOV DWORD PTR SS:[ESP+68],171780AD
______________________________________________________________
Das hier
00403089 C78424 AC000000 >MOV DWORD PTR SS:[ESP+AC],59FA0584
Wird zu:
00403089 C78424 AC000000 >MOV DWORD PTR SS:[ESP+AC],59FA05FA
______________________________________________________________
Das hier
004030E1 C78424 CC000000 >MOV DWORD PTR SS:[ESP+CC],5A518451
Wird zu:
004030E1 C78424 CC000000 >MOV DWORD PTR SS:[ESP+CC],5A51FA51
______________________________________________________________
Das hier
004030F7 C78424 D4000000 >MOV DWORD PTR SS:[ESP+D4],69555551
00403102 C78424 D8000000 >MOV DWORD PTR SS:[ESP+D8],AD5796EB
Wird zu:
004030F7 C78424 D4000000 >MOV DWORD PTR SS:[ESP+D4],17555551
00403102 C78424 D8000000 >MOV DWORD PTR SS:[ESP+D8],AD571717
Dabei war wichtig
0x90 = 0xC5 = 0x17
0xEB = 0xBE = 0xFA
0x01 = 0x54 = 0x51
0x14 = 0x41 = 0x05