我把可以运行的时候和到期的时候的程序分别分析跟踪找到一个处跳转不同,改JMP后,搞定,系统时候往后面拖几年都不会提示到期了,服务端也运行正常
但是这个程序是服务端和客户端的,用改JMP后的服务端运行,启动。。然后就客户端登的时候确出错,要么是找不到服务器。我又跟了很久还是没有找到答案。望高人来看看
启动的按钮地址为:5659e1
判断时间天数的CALL地址 59B96A
F7进去后再跟2个CALL就可以看到下面的代码
00402F3C FD std
00402F3D F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
00402F3F 89C1 mov ecx,eax
00402F41 83E1 03 and ecx,3
00402F44 83C6 03 add esi,3
00402F47 83C7 03 add edi,3
00402F4A F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]
00402F4C FC cld
这段就是读到断段时间和天的地方,可是不太明白 把时间往后拖了,OD运行到这里寄存器EDX会显示-XXX天
时间往后拉了OD运行程序走到:59b902 这里的时候
正常可以启动的情况下这个跳是跳了的。
我通分两个比较分析后,发现在启动到期的到这里不跳。
我就改JMP了,可是客服端登不了的,出错
爆破不行,改欺骗,把EDX 赋值
发下我的草稿
先在时间CALL下断 地址为59B96A 启动程序断在这里F7进去跟两个CALL后看下面代码
00402F4A F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]
00402F4C FC cld 到里寄存为 edx 00ee2798 ascii“-1037”
00402F4D 5F pop edi
00402F4E 5E pop esi 到这里EDI也变成了 edI 00ee2798 ascii“-1037”
00402F4F C3 retn
00402F50 53 push ebx
edx 00ee24e0 ascii"60" 正常时间 还可用60天
edx 00ee2798 ascii“-1037” 系统时间拉到2013年年就变成负数了
综合比对正常和过期的EDX值,证明越小是正越大,越大负越大
所以我把先试验把EDX的值 sub edx,1000 后保存可以运行,但还是过期
我把edi也减1000保存,程序就双击没反映,而且有点卡,在OD运行是有异常
原地址:402F4C 我准备NOP修改欺骗地址
返回地址: 402f4f 留一个RETN 欺骗地址代码运行完后返回到这里
我选的写入代码的新地址为:41e95a
也可不用把系统时候往后调,就以正常时间改都可以,如果成功的话那么时间应该会大于60天,如果不成功就还是60天
代码走到上面写的 POP ESI 的时候
寄存器为
EAX 00000002
ECX 00000000
EDX 00E8D5B8 ASCII "60"
EBX 0012F3E0
ESP 0012F37C
EBP 0012F504
ESI 0012F3A1
EDI 00E8D5B8 ASCII "60"
EIP 0041E964 3r.0041E964
还有一种想法
59b902 jnb short 0059B917 关键跳,我把可以用和过期的时候走到这一步的寄存值
都复制下来,经过比对只有下面二处不同
AX 00E20020 ASCII "l method"
EDX 40E37280
正常值
EAX 00E20120
EDX 40E42920
过期值
于是又想了个办法跳走,把过期的时候的EAX和EDX赋值同正常的时候的一样
再走到 jnb short 0059B917 去判断,成功了,服务端启动正常,不过期了,
但是还是同样的问题,客服端登陆不上去
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课