Brad Soblesky Crackme #1 Tuturial А А А А мВ мм АА ммммў ААп ўммм мм олВн мпп пў п АА п ўп ппм ллн ў ммпп ммллпллмм мммлллмм пмм ў мммлллммолл ммллллмм пмм мпп млллп пллВм мллллп пллВм пм ммп мллллп пллВлл мллллп пллВм пп м олллн А оллВн оллллн А оллВн м пп оллллн А оллллн оллллн оллВн ўллммВн лллл АБА лллл лллллммм пппп олммлВ ллллл А ллллл лллллммппппппп олллл АА Вллн АБВБА оллл ммммм пппллллм ллллн Влллн олллл Влллн АААААА А лллн А оВллл АБВБА ВлллнВлллн ААА олллл оВлл Влллн мпп олллл Влллн ААААААА Вллн оВллл АБА ВлллноВллл А Влллн оВлл оВллл Влллн оВллл оВллл оВВллн А оВлллн ВВллн оВллл Влллн ВВллн А оВллл ВВллн ВВВллн ўВВВВлл А Влллллў пВВлм мВллп оВлллл м пВллм мВллп пВллм пВлллм пппллм мВлппп пплпп мВВВпп пплпп пппп js пппппмм А iNSiDE ммппппп А пм А АА мп АА А АА Tutor : duelist Data Wrote : April 6, 1999 Who : Begginers Target : Brad Soblesky Crackme #1 Size : 20kb (!) Tools Used : SoftIce Method : Code Sniffing -=* Protection *=- Well this crackme is a VERY simple one, and requires only a password, which normally (if not always) means that it is hardcoded in the program! -=* Our Aproach *=- Using softice, this should be an EASY work! Knowing that this app uses MFC, i will start with one of the most basic bpx for this type of crackmes written with MFC. 1) Switch to softice (Control + D) and "bpx lstrlen" (you SHOULD break a little before the point were the app compares your code with the correct one) 2) Enter any code you want and press Check, then hit F12 to go back to program code: .0000155F: 50 push eax ; your fake code .00001560: FF1504204000 call [KERNEL32!lstrlen] -> .00001566: 8945F0 mov [ebp-10],eax .00001569: 837DF001 cmp dword ptr [ebp-10],01 ; is code >= 1 char length? /- .0000156D: 7316 jae .000001585 ; if yes, jump to the compare routine | .0000156F: 6A40 push 040 \ | .00001571: 682C304000 push 00040302C | | .00001576: 6834304000 push 000403034 | Opsss, no code was entered, | .0000157B: 8B4DE0 mov ecx,[ebp-20] | showing an error message! | .0000157E: E87B050000 call .000001AFE | | .00001583: EB3C jmps .0000015C1 / \- .00001585: 8D4DE4 lea ecx,[ebp-1C] .00001588: 51 push ecx ; REAL code being push'ed .00001589: 8D55F4 lea edx,[ebp-0C] .0000158C: 52 push edx ; your FAKode being push'ed .0000158D: FF1500204000 call [KERNEL32!lstrcmp] ;stop here and do a "d ecx"... Bingo! .00001593: 85C0 test eax, eax ; compare codes... 3) Did you understand? Stop at lstrcmpA call and do 'd ecx' and you get the real code, which is ... Cheers! -=* Final Notes *=- This was a simple tuturial that should help you when dealing with MFC applications that have an hardcoded password (and sometimes not).