使用中再发现一些问题,现在补充一下! (1千字)
使用了几次发现这个程序还有几个很黑的暗桩,写出来和大家交流一下:004F6CD2 E8E5C8F0FF call 004035BC〈--以使用次数为参数的运算
:004F6CD7 83F803 cmp eax, 00000003
:004F6CDA 0F8512080000 jne 004F74F2〈--如出口参数EAX不等于3就跳过程序再次检测密码
:004F6CE0 8BC3 mov eax, ebx
:004F6CE2 E8F10C0000 call 004F79D8
:004F6CE7 E906080000 jmp 004F74F2
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F6C57(C)
|
:004F6CEC 8D55F4 lea edx, dword ptr [ebp-0C]
:004F6CEF 8B45FC mov eax, dword ptr [ebp-04]
:004F6CF2 E855FAFFFF call 004F674C
其实程序要经过很多个地方(使用很多种算法)检测密码的,
每一个正确都是会使程序跳到004F74F2的,
我们从下面这段文字就能看到了
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F6CDA(C), :004F6CE7(U), :004F6DA1(C), :004F6DAE(U), :004F6E5D(C)
|:004F6E6A(U), :004F6F19(C), :004F6F26(U), :004F6FD5(C), :004F6FE2(U)
|:004F7091(C), :004F709E(U), :004F7152(C), :004F7158(U), :004F7207(C)
|:004F7214(U), :004F72C1(C), :004F72CE(U), :004F737D(C), :004F738A(U)
|
:004F74F2 33C0 xor eax, eax
:004F74F4 5A pop edx
但我们只需要把第一个比较的地方改为跳就可了
也就是把
:004F6CDA jne 004F74F2
改为
:004F6CDA jmp 004F74F2
再补上一个NOP(使程序字节数一样)就能破解掉这些暗桩了
