home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Reverse Code Engineering RCE CD +sandman 2000
/
ReverseCodeEngineeringRceCdsandman2000.iso
/
RCE
/
E_bliss
/
brad_crackme2.txt
< prev
next >
Wrap
Text File
|
2000-05-25
|
6KB
|
122 lines
Brad Soblesky's Crack Me 2
--------------------------
Tools Used:
Softice
---
Protection:
Name/serial prot
---
Ok, start the crackme, enter a name and a junk serial, set a breakpoint on hmemcpy and press the Ok button
now proceed until you come here:
:0040156A 8D4DEC LEA ECX,[EBP-14]
:0040156D E8DE020000 CALL 00401850 ; eax = len of name
:00401572 8945E4 MOV [EBP-1C],EAX ; ebp-1c = eax
:00401575 837DE405 CMP DWORD PTR [EBP-1C],05 ; check if name < 5
:00401579 7D43 JGE 004015BE ; jump if greater or equal
:0040157B 6A40 PUSH 40
:0040157D 6820404000 PUSH 00404020 ; push the label of the msg box
:00401582 6828404000 PUSH 00404028 ; and the 'at least 5 chars' text
:00401587 8B8D40FEFFFF MOV ECX,[EBP-01C0]
:0040158D E8F2070000 CALL 00401D84 ; print it out
:00401592 C645FC01 MOV BYTE PTR [EBP-04],01
:00401596 8D4DDC LEA ECX,[EBP-24]
:00401599 E8C2070000 CALL 00401D60
:0040159E C645FC00 MOV BYTE PTR [EBP-04],00
:004015A2 8D4DE8 LEA ECX,[EBP-18]
:004015A5 E8B6070000 CALL 00401D60
:004015AA C745FCFFFFFFFF MOV DWORD PTR [EBP-04],FFFFFFFF
:004015B1 8D4DEC LEA ECX,[EBP-14]
:004015B4 E8A7070000 CALL 00401D60
:004015B9 E9F9010000 JMP 004017B7
:004015BE C745E000000000 MOV DWORD PTR [EBP-20],00000000 ; ebp-20 = 0
:004015C5 EB09 JMP 004015D0
:004015C7 8B55E0 MOV EDX,[EBP-20] ; edx = ebp-20 (counter)
:004015CA 83C201 ADD EDX,01 ; edx = edx + 1
:004015CD 8955E0 MOV [EBP-20],EDX ; counter = edx
:004015D0 8B45E0 MOV EAX,[EBP-20] ; eax = counter
:004015D3 3B45E4 CMP EAX,[EBP-1C] ; is eax < len of name
:004015D6 7D42 JGE 0040161A ; jump if greater or equal
:004015D8 8B4DE0 MOV ECX,[EBP-20] ; ecx = counter
:004015DB 51 PUSH ECX
:004015DC 8D4DEC LEA ECX,[EBP-14]
:004015DF E81C030000 CALL 00401900
:004015E4 0FBED0 MOVSX EDX,AL ; edx = char[counter]
:004015E7 8B45F0 MOV EAX,[EBP-10] ; eax = ebp-10 (which from the beginning is 81276345h)
:004015EA 03C2 ADD EAX,EDX ; eax = eax + edx
:004015EC 8945F0 MOV [EBP-10],EAX ; ebp-10 = eax
:004015EF 8B4DE0 MOV ECX,[EBP-20] ; ecx = counter
:004015F2 C1E108 SHL ECX,08 ; ecx = ecx shl 8
:004015F5 8B55F0 MOV EDX,[EBP-10] ; edx = ebp-10
:004015F8 33D1 XOR EDX,ECX ; edx = edx xor ecx
:004015FA 8955F0 MOV [EBP-10],EDX ; ebp-10 = edx
:004015FD 8B45E0 MOV EAX,[EBP-20] ; eax = counter
:00401600 83C001 ADD EAX,01 ; eax = eax + 1
:00401603 8B4DE4 MOV ECX,[EBP-1C] ; ecx = length of name
:00401606 0FAF4DE0 IMUL ECX,[EBP-20] ; ecx = ecx * counter
:0040160A F7D1 NOT ECX ; not ecx
:0040160C 0FAFC1 IMUL EAX,ECX ; eax = eax * ecx
:0040160F 8B55F0 MOV EDX,[EBP-10] ; edx = ebp-10
:00401612 0FAFD0 IMUL EDX,EAX ; edx = edx * eax
:00401615 8955F0 MOV [EBP-10],EDX ; edp-10 = edx
:00401618 EBAD JMP 004016C7 ; jump to beginning of routine
:0040161A 8B45F0 MOV EAX,[EBP-10] ; eax = the REAL serial
:0040161D 50 PUSH EAX
:0040161E 6854404000 PUSH 00404054
:00401623 8D4DDC LEA ECX,[EBP-24]
:00401626 51 PUSH ECX
:00401627 E852070000 CALL 00401D7E
:0040162C 83C40C ADD ESP,0C
:0040162F 8D4DDC LEA ECX,[EBP-24]
:00401632 E879020000 CALL 004018B0
:00401637 50 PUSH EAX
:00401638 8D4DE8 LEA ECX,[EBP-18]
:0040163B E880020000 CALL 004018C0
:00401640 85C0 TEST EAX,EAX ; test if the entered serial = the real serial
:00401642 0F85FF000000 JNZ 00401747
so the routine starts at 4015BE and is pretty simple.. here follows a sample c source for a keygen
//Keygen source by Klefz
int main(){
unsigned char name[500]={0};
int i,len=0;
unsigned long ebp10=0x81276345,ecx,counter=0,length=0;
tryagain:
length=0;
clrscr();
printf("Brad Soblesky's Crack Me2 Keygen by Klefz\n");
printf("Enter your name: ");
gets(name);
/* work out length (tnx prophecy ;) */
while (name[length] != '\0'){ length++; }
if(length==0){
printf("\nYou must enter a name!"); getch();
goto tryagain; }
if(length<5){
printf("\nYour name must contain at least 5 chars!"); getch();
goto tryagain; }
for(i=0;i<length;i++){
ebp10=ebp10+name[i]; // movsx edx,al mov eax,[ebp10] add eax,edx mov [ebp10],eax
ecx=i<<8; // mov ecx,[counter] shl ecx,8
ebp10=ebp10^ecx; // mov edx,[ebp10] xor edx,ecx mov [ebp10],edx
counter=i+1; // mov eax,[counter] add eax,1
len=i*length; // mov ecx,[length] imul ecx,[counter]
asm { not [len] } // not ecx
counter=counter*len; // imul eax,ecx
ebp10=ebp10*counter; // mov edx,[ebp10] imul edx,eax mov [ebp10],edx
}
printf("\nYour reigistration code is: %lu",ebp10);
getch();
return 0; }
---
/Klefz - http://klefz.cjb.net