http://go3.163.com/~gfcrack/crackme/aLoNg3x.1.zip
http://go3.163.com/~gfcrack/crackme/aLoNg3x.1.zip
看看IDA反汇编的结果:
//---------------------------------------------------------
dd offset sub_442C78
aCodicechange db 12,'CodiceChange'
db 0Eh, 0
dd offset sub_442D64
aOkclick db 7,'OkClick'
db 11h, 0
dd offset sub_442E04
aNomechange db 10,'NomeChange'
db 14h, 0
dd offset sub_442EA8
aCancellaclick db 13,'CancellaClick'
db 11h, 0
//------------------------------------------------------------
上述是控件及其回调函数的地址,即:
函数名 函数入口地址 函数的意义
CodiceChange( ) 442C78 当你修改了注册码时要调用此函数
OkClick( ) 442D64
当你点击OK按钮时要调用此函数
NomeChange( ) 442E04
当你修改了名字时要调用此函数
CancellaClick( ) 442EA8 当你点击Cancel按钮时要调用此函数
在上面4个函数地址处设断点,然后稍微跟一下,你就会看到它是如何判断注册码的了,但跟你的操作顺序有点关系 :)
BF
你每输入一位注册码它都要判断一次,所以一定是处理了TEdit的OnChange( ),找到这个函数就有眉目了。
这不算zen吧
最好有个工具能把Borland的编译器生成的EXE文件中的无用的字符串去掉,这样能够增加破解的难度,就象Unix上的strip一样。
BF
当我遇到实时比较的程序时总感到无处下手。
首先感谢楼上的1212大侠。
闲话不说,let's go!
bpx 442c78
g
016F:00442A93 MOV ECX,[EBP-04] //这里开始由用户名生成一个数A
016F:00442A96 MOVZX ECX,BYTE [ECX+EAX-01]
016F:00442A9B MOV ESI,[EBP-04]
016F:00442A9E MOVZX ESI,BYTE [ESI+EAX]
016F:00442AA2 IMUL ECX,ESI
016F:00442AA5 IMUL ECX,EAX
016F:00442AA8 ADD EBX,ECX
016F:00442AAA INC EAX
016F:00442AAB DEC EDX
016F:00442AAC JNZ 00442A93 //不跳,完成用户名处理
016F:00442AAE MOV EAX,[EBP-08]
016F:00442AB1 CALL 00407670 //这里由注册码生成一个数B
016F:00442AB6 SUB EBX,EAX //A-B
016F:00442AB8 CMP EBX,029A //A-B=29a
016F:00442ABE JNZ 00442AC4 //跳就死
016F:00442AC0 MOV BL,01
----------------------------------------------------------
//注册码的处理部分
016F:004029AA SUB BL,30
016F:004029AD CMP BL,09
016F:004029B0 JA 004029DE
016F:004029B2 CMP EAX,EDI
016F:004029B4 JA 004029DE
016F:004029B6 LEA EAX,[EAX+EAX*4] //eax=eax+eax*4
016F:004029B9 ADD EAX,EAX
016F:004029BB ADD EAX,EBX
016F:004029BD MOV BL,[ESI]
016F:004029BF INC ESI
016F:004029C0 TEST BL,BL
016F:004029C2 JNZ 004029AA
------------------------------------------------------------
还有一点
016F:00442A5A XOR EAX,EAX
016F:00442A5C PUSH EBP
016F:00442A5D PUSH DWORD 00442AE5
016F:00442A62 PUSH DWORD [FS:EAX]
016F:00442A65 MOV [FS:EAX],ESP
016F:00442A68 MOV EAX,[EBP-04]
016F:00442A6B CALL 00403A34
016F:00442A70 CMP EAX,BYTE +05 //用户名是否大于5位
016F:00442A73 JNG 00442AC8 //少于则死
016F:00442A75 MOV EAX,[EBP-04]
整理:
name :THK123
sn: 49763
THK