|
楼主 |
发表于 2008-9-2 00:32:40
|
显示全部楼层
x80x88兄弟的工具不错啊,要是能有个自动去除空格就完美了!俺也去下一个来玩玩:loveliness:
不知是程序的bug还是有意为之!/:L
对于你说的这个问题,俺还真没有发现,又看了下程序大概是这里的问题!
004011EA |. 6A 13 PUSH 13 ; /Count = 13 (19.)
004011EC |. 52 PUSH EDX ; |Buffer = 006D0000
004011ED |. 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
004011F2 |. 50 PUSH EAX ; |hWnd = 00000003
004011F3 |. FFD7 CALL EDI ; \GetDlgItemTextA
004011F5 |. 6BC0 03 IMUL EAX,EAX,3
004011F8 |. C1E0 02 SHL EAX,2
004011FB |. 05 CD000000 ADD EAX,0CD
00401200 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00401203 |. 817D FC A5010>CMP DWORD PTR SS:[EBP-4],1A5
0040120A |. 0F85 BC000000 JNZ k4n3.004012CC
从00401203 |. 817D FC A5010>CMP DWORD PTR SS:[EBP-4],1A5这一句判断往上推,可以推算出EAX=12,也就是我们输入的注册码必须是12(18)位,但为什么输入的位数大于18位不报错呢???
004011EA |. 6A 13 PUSH 13 ; /Count = 13 (19.) //是这个参数进行了限制
看这数字的意思,好像可以取到19位的,但实际上最大只能取到18位(没搞懂总要差一位/:L ),
所以你输入大于18的位数,程序也只能取到前18位,18位以后的数程序看不到/:017 /:017 /:017 就出现了x80x88兄所说的情况!
我把004011EA |. 6A 13 PUSH 13 这一行改为PUSH 15 再运行程序,输入大于18位的数,程序报错/:017 /:017
好了就到这里我也是自己理解的,毕竟俺也不懂编程语言,如果有什么错误的地方还请大家指正!
如果有高手路过请写个算法注册机源码让俺也学习下!先谢了/:013 |
|