试试这个注册码:cdoe1-111184,code2-785826 (3千字)
http://www.winhex.com输入注册码之后关闭该程序,然后用bpx GetVolumeInformationA设断点,
等中断下来后按两次F12,看见如下的判断:
0167:0044E150 MOV AL,03
0167:0044E152 CALL 0040BEF8 //这里头调用GetVolumeInformationA
0167:0044E157 NOT AX
0167:0044E15A MOVZX EAX,AX
0167:0044E15D CMP EAX,[0045321C]
0167:0044E163 JNZ 0044E186
0167:0044E165 MOV EAX,00453258
0167:0044E16A SUB EAX,08
0167:0044E16D SUB EAX,10
0167:0044E170 MOV EAX,[EAX] //取出code1
0167:0044E172 CALL 0042E9E0 //检查code1,并计算code2
0167:0044E177 MOV EDX,00453258
0167:0044E17C SUB EDX,04
0167:0044E17F SUB EDX,10
0167:0044E182 CMP EAX,[EDX] //比较真假code2
0167:0044E184 JZ 0044E18A
0167:0044E186 XOR EAX,EAX //bad flag
0167:0044E188 JMP 0044E18C
0167:0044E18A MOV AL,01 //good flag
0167:0044E18C MOV EDX,00455384
0167:0044E191 INC EDX
0167:0044E192 MOV [EDX],AL //set a flag
0167:0044E194 JMP 0044E1DD
上面的CALL 0042E9E0中会检查code1的合法性,如果合法则返回计算出来的code2,否则返回-1。
对code1的检查是比较麻烦的,如果有兴趣可以跟踪一下,大致上是这样的:求code1的平方,并将该平方值转换为字符串,
再将串的首字符和尾字符去掉,得到一个新串,再将新串转换成整数,然后再进行其它处理。
MOV [EDX], AL这条指令会设一个标志,用BPM EDX设断点监视此标志,很快看见如下的判断,是用来检查code1的:
0167:0043D279 CMP BYTE PTR [00455385],00
0167:0043D280 JNZ 0043D29F
0167:0043D282 CMP DWORD PTR [EDI+00000088],02
0167:0043D289 JLE 0043D29F
0167:0043D28B PUSH 00
0167:0043D28D PUSH 000DBBA0
0167:0043D292 PUSH 02
0167:0043D294 MOV EAX,[004562B0]
0167:0043D299 PUSH EAX
0167:0043D29A CALL USER32!SetTimer
0167:0043D29F LEA EAX,[EDI+000000E0]
0167:0043D2A5 SUB EAX,08
0167:0043D2A8 MOV EAX,[EAX] //取出code1
0167:0043D2AA MOV [00455424],EAX
0167:0043D2AF CMP DWORD PTR [00455424],000D9038
0167:0043D2B9 JG 0043D31C
0167:0043D2BB CMP DWORD PTR [00455424],00008235
0167:0043D2C5 JL 0043D31C
0167:0043D2C7 MOV EAX,[00455424]
0167:0043D2CC MOV EBX,000003E8
0167:0043D2D1 CDQ
0167:0043D2D2 IDIV EBX
0167:0043D2D4 CMP EDX,00000247
0167:0043D2DA JZ 0043D31C
0167:0043D2DC MOV EAX,[00455424]
0167:0043D2E1 MOV EBX,000003E8
0167:0043D2E6 CDQ
0167:0043D2E7 IDIV EBX
0167:0043D2E9 CMP EDX,00000315
0167:0043D2EF JZ 0043D31C
0167:0043D2F1 MOV EAX,[00455424]
0167:0043D2F6 MOV EBX,000003E8
0167:0043D2FB CDQ
0167:0043D2FC IDIV EBX
0167:0043D2FE CMP EDX,7B
0167:0043D301 JZ 0043D31C
0167:0043D303 MOV EAX,[00455424]
0167:0043D308 MOV ECX,00000064
0167:0043D30D CDQ
0167:0043D30E IDIV ECX
0167:0043D310 MOV ECX,EDX
0167:0043D312 CMP ECX,07
0167:0043D315 JZ 0043D327
0167:0043D317 CMP ECX,54
0167:0043D31A JZ 0043D327
0167:0043D31C MOV EAX,004553A0
0167:0043D321 SUB EAX,1B
0167:0043D324 MOV BYTE PTR [EAX],00 //bad guy!
0167:0043D327 XOR EAX,EAX
根据上面的代码可知code1还要满足如下几个条件:
1、code1取值范围为[0x8235,0xD9038];
2、code1除以1000的余数不能等于0x247或者0x315或者0x7B;
3、code1除以100的余数必须为7或者0x54。
经过几次试探就可以找到合适的code1,继而得到对应的code2。
code1: 111184
code2: 785826
dr0/China
