如何给EXE文件添加按纽并响应一个对话框
【软件名称】: Pe_optimizer1.4
【下载地址】
http://cracking.z0ro.com/Reverse-Engineering/EXE-PE-Tools/PE%20Optimizer%201.3/PE_Optimizer.zip
【使用工具】: OD, Restorator. LordPE
如何美化DIY一个可执行文件,给一个汉化好的文件加上自己的对话框,或者直接加上帮助文本,或者显示破解组织信息,或者调用一个插件,或者加载好看的皮肤等。下面我们以Pe_optimizer1.4为例来进行分析,探讨如何为一个exe文件添加一个对话框:
1.预备知识----对话框响应原理:
当我们按下界面上的一个菜单或者一个按钮时,DialogBoxParamA会调用窗口回调
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数来处理,即把包含菜单命令
的信息作为参数送给窗口回调函数,因为一般界面中菜单或按钮有多个,所以很明显会有下面的类型的代码:
cmp ebx, xxxx1 比较按下的按钮ID是否等于xxxx1
jnz short xxxxxxxx1 如果不是,跳过继续判断,xxxxxxxx1为下一个比较的地址
call xxxxxxxx1 如果是,调用该按钮响应的操作
cmp ebx, xxxx2
jnz short xxxxxxxx2
call xxxxxxxx2
.....................
或者
cmp eax,xxxx1 比较点击的菜单ID是否等于xxxx1
jz xxxxxxxx1 如果是,调用该按钮响应的操作
cmp eax,xxxx2 不是,继续判断
jz xxxxxxxx2
...................
或者
cmp ax,xxxx1 比较点击的菜单ID是否等于xxxx1
jz xxxxxxxx1 如果是,调用该按钮响应的操作
cmp ax,xxxx2 不是,继续判断
jz xxxxxxxx2
...................
也许还有其他形式,但总会类似以上列举的几种。
本文的例子就是第一种情况。
2. 添加按钮和对话框并汉化
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
资源
脱壳Pe_optimizer1.4 之后,我们用Restorator.exe来打开并汉化,然后在主界面对话框101上新添加一个按钮,ID改为505 (16进制1F9);
然后再添加一个对话框,将对话框的资源名(其实就是ID)称改为103 (16进制67),再在103对话框上添加一个按钮,ID与关于对话框中关闭的ID (即505)相同即可。最后保存关闭。
运行程序看看,已经出现添加的按钮,但点击不会出现我们添加的对话框,因为还没有响应代码。
3. 分析响应代码。
我们用OD载入PO,右键 -》 查找 -》 常量504
查找常量504来到比较按钮ID这里:1F7是10进制503
00406695 81FB F8010000 cmp ebx, 1F8 典型的ID对比
0040669B 75 05 jnz short Pe_optim.004066A2 ID不正确则执行下一比较
0040669D E8 66FFFFFF call Pe_optim.00406608 ID是的就调用00406608 执行响应操作
004066A2 81FB F6010000 cmp ebx, 1F6 第二个ID对比,为了增加跳转代码,本行及以下二行将被修改
004066A8 75 05 jnz short Pe_optim.004066AF 将被修改
004066AA E8 89FCFFFF call Pe_optim.00406338 将被修改
004066AF 81FB F5010000 cmp ebx, 1F5
004066B5 75 05 jnz short Pe_optim.004066BC
004066B7 E8 C0ECFFFF call Pe_optim.0040537C
004066BC 81FB F7010000 cmp ebx, 1F7
004066C2 75 2E jnz short Pe_optim.004066F2
关于框的按钮ID为503,我们再看这段代码:
004066BC 81FB F7010000 cmp ebx, 1F7 1F7是10进制503
004066C2 75 2E jnz short Pe_optim.004066F2 如果ID不是503,跳转到004066f2
以下就是关于对话框的响应代码
004066C4 6A 00 push 0
004066C6 68 3C664000 push Pe_optim.0040663C
004066CB 8B45 08 mov eax, [ebp+8]
004066CE 50 push eax
004066CF 6A 66 push 66 66是关于对话框的ID,10进制102
004066D1 A1 DC844000 mov eax, [4084DC]
004066D6 50 push eax
004066D7 E8 5CDFFFFF call
004066DC EB 14 jmp short Pe_optim.004066F2
004066DE 8B45 08 mov eax, [ebp+8]
004066E1 A3 E0844000 mov [4084E0], eax
004066E6 E8 F5FDFFFF call Pe_optim.004064E0
004066EB EB 05 jmp short Pe_optim.004066F2
…………………………………
4.补回将被修改nop掉的代码
首先找一处空间,文件末端有很多如: 0040B333,
在0040B333 处补回将要nop掉的三行1F6比较代码,
代码如下:
0040B333 81FB F6010000 cmp ebx, 1F6 补回修改nop掉的1F6比较代码
0040B339 75 05 jnz short Pe_optim.0040B340 不符就转到新的1F9比较地址
0040B33B E8 F8AFFFFF call Pe_optim.00406338 这一句补回不变
0040B340 81FB F9010000 cmp ebx, 1F9 1F9是添加的按钮ID
0040B346 ^ 0F85 63B3FFFF jnz Pe_optim.004066AF 不符就转到下一个1F5比较
5. 以下是我们想要的对话框响应(或者调用一个插件等其它响应)代码:
接下来在我们将上面关于对话框的响应代码二进制复制,在数据窗口粘贴,并修改
在004066CF 6A 66 push 66 这句中的66为67对话框ID即103:
0040B34C 6A 00 push 0
0040B34E 68 3C664000 push Pe_optim.0040663C
0040B353 8B45 08 mov eax, [ebp+8]
0040B356 50 push eax
0040B357 6A 67 push 67 67是我们添加的对话框的ID103
0040B359 A1 DC844000 mov eax, [4084DC]
0040B35E 50 push eax
0040B35F E8 D492FFFF call
0040B364 EB 14 jmp short Pe_optim.0040B37A
6.最后是修改跳转代码
即在004066A2 81FB F6010000 cmp ebx, 1F6 处
直接改为跳转到 0040B333 代码改成下面这样:
00406695 |81FB F8010000 cmp ebx, 1F8
0040669B |75 05 jnz short Pe_optim.004066A2
0040669D |E8 66FFFFFF call Pe_optim.00406608
004066A2 |E9 8C4C0000 jmp Pe_optim.0040B333
004066A7 |90 nop
004066A8 |90 nop
004066A9 |90 nop
004066AA |90 nop
004066AB |90 nop
004066AC |90 nop
004066AD |90 nop
004066AE |90 nop
004066AF |81FB F5010000 cmp ebx, 1F5
004066B5 |75 05 jnz short Pe_optim.004066BC
然后就是保存代码,测试程序
成功,我们添加的对话框显示出来了。
当然, 我们也可依此原理给软件做进一步拓展,增强其实用功能,
比如调用一个DLL插件,启用XN资源管理器:
还可以美化软件资源
更进一步甚至加载好看的皮肤等
相关资料下载http://user.qzone.qq.com/329554301/blog/1373339679
老朽痴拙(QQ329554301)