zerOOne's Crackme #1 Tuturial А А А А мВ мм АА ммммў ААп ўммм мм олВн мпп пў п АА п ўп ппм ллн ў ммпп ммллпллмм мммлллмм пмм ў мммлллммолл ммллллмм пмм мпп млллп пллВм мллллп пллВм пм ммп мллллп пллВлл мллллп пллВм пп м олллн А оллВн оллллн А оллВн м пп оллллн А оллллн оллллн оллВн ўллммВн лллл АБА лллл лллллммм пппп олммлВ ллллл А ллллл лллллммппппппп олллл АА Вллн АБВБА оллл ммммм пппллллм ллллн Влллн олллл Влллн АААААА А лллн А оВллл АБВБА ВлллнВлллн ААА олллл оВлл Влллн мпп олллл Влллн ААААААА Вллн оВллл АБА ВлллноВллл А Влллн оВлл оВллл Влллн оВллл оВллл оВВллн А оВлллн ВВллн оВллл Влллн ВВллн А оВллл ВВллн ВВВллн ўВВВВлл А Влллллў пВВлм мВллп оВлллл м пВллм мВллп пВллм пВлллм пппллм мВлппп пплпп мВВВпп пплпп пппп js пппппмм А iNSiDE ммппппп А пм А АА мп АА А АА Tutor : duelist Data Wrote : June 12, 1999 Who : Newbies Target : zerOOne's Crackme #1 Size : 116kb Tools Used : SoftIce - INTRODUCTION: - Ok people i'm back to the tuts scene and i hope both me and you will enjoy my stay. First of all, notice the size of this app, 116kb, that's way too much for a dos app! I loaded it using windows quikview and then i saw that it had tons of imports, and zer00ne's said in his intro file: "Es sieht zwar aus wie ein Dos proggi ist aber ein Win32 proggi. Also benutzt es auch MessageBoxen ;)" Well i'm not german but i can understand that this is a Win32 console mode program and that our result will be indicated by a messagebox! - PROTECTION: - This program accepts only one password, so as a tip, we can expect it is hardcoded in the program (later we'll see that it is not that easy) and it will inform us of the result by a messagebox! - CRACKING STEPS: - 1) Switch into softice and put a bpx on 'MessageBoxA', so we can break when the program tells us that our serial is incorrect. 2) Goto the application and enter any serial you want, hit enter! 3) Bingo, we'll break right in this snippet: :00401010 55 push ebp :00401011 8BEC mov ebp, esp :00401013 83EC08 sub esp, 00000008 :00401016 C745FCF1FB0900 mov [ebp-04], 0009FBF1 :0040101D 68509D4100 push 00419D50 ; "Bitte Registration code eingeben: " :00401022 B9A8D14100 mov ecx, 0041D1A8 :00401027 E8C4040000 call 004014F0 :0040102C 8D45F8 lea eax, dword ptr [ebp-08] :0040102F 50 push eax :00401030 B958D14100 mov ecx, 0041D158 :00401035 E856000000 call 00401090 :0040103A 8B4DF8 mov ecx, dword ptr [ebp-08] :0040103D 3B4DFC cmp ecx, dword ptr [ebp-04] :00401040 7516 jne 00401058 :00401042 6A00 push 00000000 :00401044 68749D4100 push 00419D74 ; "Danke" :00401049 687C9D4100 push 00419D7C ; "Sie haben mich gecrackt :)" :0040104E 6A00 push 00000000 :00401050 FF15ACF24100 Call USER32!MessageBoxA :00401056 EB14 jmp 0040106C :00401058 6A01 push 00000001 ; "Error" :0040105A 68989D4100 push 00419D98 :0040105F 68A09D4100 push 00419DA0 ; "Nein, versuchen Sie es nochmal :(" :00401064 6A00 push 00000000 :00401066 FF15ACF24100 Call USER32!MessageBoxA :0040106C 33C0 xor eax, eax <- you break here, but since we want to start tracing at the beggining of this call, set a breakpoint on 401010 4) Repeat step 2, enter any serial you like and you'll break at the beggining of the call this time: :00401010 55 push ebp :00401011 8BEC mov ebp, esp :00401013 83EC08 sub esp, 00000008 :00401016 C745FCF1FB0900 mov [ebp-04], 0009FBF1 :0040101D 68509D4100 push 00419D50 ; "Bitte Registration code eingeben: " :00401022 B9A8D14100 mov ecx, 0041D1A8 :00401027 E8C4040000 call 004014F0 :0040102C 8D45F8 lea eax, dword ptr [ebp-08] :0040102F 50 push eax :00401030 B958D14100 mov ecx, 0041D158 :00401035 E856000000 call 00401090 <- asks us for the reg code AND converts :0040103A 8B4DF8 mov ecx, dword ptr [ebp-08] it from string to dec, stores in ecx :0040103D 3B4DFC cmp ecx, dword ptr [ebp-04] ; compares our code with some dec at location ebp-4 (!), so do a "d ebp-4" and you'll get "F1 FB 09 00", just reverse it and use a "? 09FBF1" and you'll get the correct code! - FINAL NOTES: - Ok, from now on you can expect a lotta tuts from me (well at least that's what i hope)... Thx 2: E_Bliss for kinda 'forcing' me to write tuturials tC for being such a nice friend with some nice crackmes MisterE for showing me the way to go ;) R!SC for being a frenzy cracker and to have cracked my #3 All the other dudes i don't remember right now...