本帖最后由 青霄 于 2016-4-29 17:53 编辑
小白文,大牛请飘过。。。
今天研究飘零破解,突然想起某大神的通过修改push 窗体ID弹出功能窗体的方法,但是经修改后程序崩溃,于是便有了下文(方法是借鉴的大神的方法,优点:破解后有功能。缺点:是要比直接修改窗口ID麻烦点。)
第一步。CTRL+F搜PUSH 10001,发现只有两个窗口
00415D1E |. 68 01020152 push 0x52010201
与00401112 |. 68 01000152 push 0x52010001
经比较,结合E的结构可知52010201为功能窗口,我用这个窗口替换52010001,程序崩溃
于是我想能不能通过推出按钮直接定位到功能窗体呢
第二步。说干就干,用FF 55 FC 5F 5E(嗯?你是问这是啥?这是E的按钮特征)定位到按钮位置,点退出按钮,断下后F7进入CALL可以看到如下代码
[Asm] 纯文本查看 复制代码 00401015 /. 55 push ebp
00401016 |. 8BEC mov ebp,esp
00401018 |. E8 D5000000 call 飘零网络.004010F2
0040101D |. 6A 00 push 0x0
0040101F |. E8 06660100 call 飘零网络.0041762A
00401024 |. 83C4 04 add esp,0x4
00401027 |. 8BE5 mov esp,ebp
00401029 |. 5D pop ebp ; 飘零网络.00438F30
0040102A \. C3 retn //该部分是退出按钮事件
第三步。接下来将第一步中找到的窗体位置代码一整块复制到一边,后面备用
[Asm] 纯文本查看 复制代码 00415D02 |. 68 02000080 push 0x80000002
00415D07 |. 6A 00 push 0x0
00415D09 |. 68 00000000 push 0x0
00415D0E |. 6A 00 push 0x0
00415D10 |. 6A 00 push 0x0
00415D12 |. 6A 00 push 0x0
00415D14 |. 68 01000100 push 0x10001
00415D19 |. 68 00020106 push 0x6010200
00415D1E |. 68 01020152 push 0x52010201
00415D23 |. 68 03000000 push 0x3
00415D28 |. BB A07A4100 mov ebx,2.00417AA0
00415D2D |. E8 F2180000 call 2.00417624
00415D32 |. 83C4 28 add esp,0x28//窗体
第四步。经过仔细对比第三步与第二步代码发现,第二步代码行数太少,因为需要将第三步的窗体代码复制进去,行数不够是不行的(担心没有功能或者崩溃)
于是 随便找到一个空白处004940D1,记下地址后并将第三步代码的特征码通过二进制代码粘贴过去,就是这行代码
68 02 00 00 80 6A 00 68 00 00 00 00 6A 00 6A 00 6A 00 68 01 00 01 00 68 00 02 01 06 68 01 02 01
52 68 03 00 00 00 BB A0 7A 41 00 E8 F2 18 00 00 83 C4 28
注意事项:一行都不能少,粘过去后00415D2D |. E8 F2180000 call 2.00417624会变化,需要手动修改回去(这里原因不明)
粘贴完毕后在代码后面加上JMP 00401027,先保存
第五步。找到第二步中00401018 |. E8 D5000000 call这个位置替换成JMP 004940D1(刚才粘贴代码的空白地指处),保存
教程结束,有什么不懂可以问我,快升级了,只求热心,不求CB压缩文件我不知道怎么免费,所以也整个练习文件屌丝通道链接:http://pan.baidu.com/s/1kV92vyR 密码:nry2
|