Hex Edit 2.1.13 for Win95 Cracked by Hambo.H Written in 4:09 98-1-2 这是一个Hex的编辑器,很好用,与Ultra Edit有得比!! Crack的方法也很简单,是程序会将你输入的S/N(是一个数值, 不含字母)转换成16进制。S/N是由Name生成一个16进制数值 ,然后与你输入的(转换后的)进行比较。^_^ 需要说明的是,我Crack的时候,这个软件已经过期了,是在 程序开头的时候Crack的,如果你也要再跟一次,请先将日期 调到使该软件过期的时间再跟,否则可能有所不同。 费话少说,开始啦...... 01)首先设BPX GetWindowTextA 然后回到程序,在Name输入"Hambo.H" 在Registration输入"1122334455" 其16进制值是0x42e576f7 按一下OK,将会被SoftIce拦截下,然后BD * 关掉所下的BreakPoint。 按以下F12将看到如下程序: 0137:00428567 PUSH EAX 0137:00428568 CALL 004217C9 0137:0042856D PUSH EAX 0137:0042856E PUSH ESI 0137:0042856F CALL [USER32!GetWindowTextA] 上面的Call是读取Name 0137:00428575 MOV ECX,[EBP+10] <--返回在此位置 0137:00428578 PUSH FF 0137:0042857A CALL 004217A1 0137:0042857F JMP 0042858C 0137:00428581 MOV EAX,[EBP+10] 0137:00428584 PUSH DWORD PTR [EAX] 0137:00428586 PUSH ESI 0137:00428587 CALL 00426C81 0137:0042858C POP EDI 0137:0042858D POP ESI 0137:0042858E POP EBP 再按一下F12会见到如下程序: 0137:00401D38 LEA EAX,[ESI+5C] 0137:00401D3B PUSH EAX 0137:00401D3C PUSH 00000407 0137:00401D41 PUSH EDI 0137:00401D42 CALL 00428540 0137:00401D47 ADD ESI,60 <--返回在此位置 0137:00401D4A PUSH ESI 0137:00401D4B PUSH 00000408 0137:00401D50 PUSH EDI 0137:00401D51 CALL 004284E2 <--这是读取Registration,以及将其转换为Hex 0137:00401D56 POP EDI 0137:00401D57 POP ESI 0137:00401D58 RET 0004 按两次F12 0137:00401DB9 MOV EDI,[EAX+04] 0137:00401DBC PUSH 01 0137:00401DBE MOV ECX,ESI 0137:00401DC0 CALL 00420173 0137:00401DC5 TEST EAX,EAX 0137:00401DC7 JZ 00401E03 0137:00401DC9 MOV EAX,[ESI+60] <--换算后的Registration的值"0x42e576f7" 0137:00401DCC MOV ECX,[ESI+5C] <--Name所在的地址 0137:00401DCF PUSH EAX 0137:00401DD0 PUSH ECX 0137:00401DD1 MOV ECX,EDI 0137:00401DD3 CALL 004038B0 <--用Name进行计算和比较 0137:00401DD8 TEST EAX,EAX 0137:00401DDA JZ 00401DF5 2)现在主要的工作是进入Call 004038B0找出注册码,好进去.... 运行到 0137:00401DD3 CALL 004038B0 然后按F8进入 0137:004038B0 MOV EAX,[ESP+04] <--Name所存放的地址 0137:004038B4 SUB ESP,00000100 <--由这个0x100可以看出Name可以输入255个字符 0137:004038BA LEA ECX,[ESP+00] 0137:004038BE PUSH EBX 0137:004038BF PUSH 00000100 0137:004038C4 PUSH EAX 0137:004038C5 PUSH ECX 0137:004038C6 CALL 0040AF00 <--将Name拷贝到CX指向的地址 0137:004038CB ADD ESP,0C 0137:004038CE LEA EDX,[ESP+04] 0137:004038D2 PUSH EDX 0137:004038D3 CALL 0041B150 <--将Name转换为大写 0137:004038D8 ADD ESP,04 0137:004038DB MOV ECX,00000004 下面一段是进行S/N的计算,根据Name来算: ============================================= 0137:004038E0 MOV EAX,ECX 0137:004038E2 CDQ 0137:004038E3 XOR EAX,EDX 0137:004038E5 SUB EAX,EDX 0137:004038E7 AND EAX,03 0137:004038EA XOR EAX,EDX 0137:004038EC SUB EAX,EDX 0137:004038EE MOV DL,[ECX+ESP+04] 0137:004038F2 MOV BL,[EAX+ESP+04] 0137:004038F6 LEA EAX,[EAX+ESP+04] 0137:004038FA XOR BL,DL 0137:004038FC INC ECX 0137:004038FD CMP ECX,00000100 0137:00403903 MOV [EAX],BL 0137:00403905 JL 004038E0 =============================================== 0137:00403907 MOV EAX,[ESP+04] <--看看这里,注册码就在这里"0x42056f07" 0137:0040390B TEST EAX,EAX 0137:0040390D JGE 00403911 0137:0040390F NEG EAX 0137:00403911 CMP EAX,[ESP+0000010C] <--将算到的数值(在AX里)与你输入的(换算后的)想比较 0137:00403918 JNZ 0040392D <--不相等则跳转 0137:0040391A TEST EAX,EAX 0137:0040391C JZ 0040392D 0137:0040391E MOV EAX,00000001 0137:00403923 POP EBX 0137:00403924 ADD ESP,00000100 0137:0040392A RET 0008 0137:0040392D XOR EAX,EAX 0137:0040392F POP EBX 0137:00403930 ADD ESP,00000100 0137:00403936 RET 0008 3)整理得: Name: Hambo.H Registration: 1107652359 (这是将0x42056f07转换回十进制得来的) 4)其实它算注册码的程序很简单,就是循环将前四个字符与后面的进行XOR 运算,然后存回前四个。 下面是用Turbo C 2.0写的注册器: #include <stdio.h> #include <string.h> void main() { unsigned int i,j,l=0; unsigned char name[255]; unsigned long int sn; clrscr(); printf("Hex Edit 2.1 for Win95 KeyMaker\n"); printf("Programming by Hambo.H Cracked by Hambo.H\n"); printf("Shenzhen China Jan 2 1998\n\n"); printf("Please Enter Your Name(1-255 Chars): "); scanf("%s",name); j=0; l=strlen(name); strupr(name); for (i=4;i<l;i++) { name[j]=name[j]^name[i]; j++; j=j&3; } sn=name[0]+name[1]*0x100+name[2]*0x10000+name[3]*0x1000000; printf("\nRegistration: %ld\n",sn); } 5)这个软件在注册方面的程序是有一些问题的,你只要是Name小于4个 字符的,就是用计算器和ASCII表也能很容易算出S/N. 如:Name为"H"或"h",那它的S/N就是"72",这就是"H"的ASCII码。 Name为"Hamb","Hamb"对应的大写的ASCII码是0x48 0x41 0x4d 0x42 则S/N(十六进制)为0x424d4148, 将它换算为十进制就是1112359240。