动手修改EXE,给他人程序添加皮肤
来源:互联网 发布:tcl网络电视遥控器 编辑:程序博客网 时间:2024/05/16 13:04
遇到一个MFC程序,想给它加上皮肤,涉及到一些PE文件的修改,下面与大家分享一下。
我选择的皮肤库是SkinMagic,它的使用还是比较简单的。
一个MFC小程序,先用PEiD扫描,看看概况:
LordPE重构PE设置中勾选“使PE可用”和“清除重定位”,重构后发现程序运行异常,是因为LordPE将重定位段去除后,没有去掉文件特征中相应的值,按下图勾选保存即可:
勾选后值为0x103,此时程序已经可以正常运行了。
皮肤库我准备用的是SkinMagic,使用前先破解SkinMagic.dll,去掉烦人的NAG。如果此时加入IID(镜像导入描述符),LordPE会重新生成导入表到新区段,.rsrc资源段不再是最后一个区段,再加入皮肤文件进资源时会出错(当然外置皮肤文件就没关系了),所以我先加入皮肤文件进资源部分:
加入后程序又运行不了了,应该是加入资源后,镜像大小没有修正的缘故。LordPE再次重建,只勾选“使PE可用”。
现在加入IID。在LordPE中打开导入表,添加镜像导入描述符:
看到LordPE添加的区段,只装有导入表信息和刚才新加的IID、Thunks:
接下来用C32Asm扩大区段,向文件末尾也就是新区段的尾部追加空数据:
共添加了256(0x100)字节,保存文件。用LordPE扩大区段大小:
RawSize更改为1D4h+100h=2D4h,VirtualSize在1000h以内,虚拟内存页4K对齐,VS不改。同时将区段特征中勾选“包含可执行代码”、“可执行”:
原本的大小是1D4,也就是LordPE添加IID、Thunks所用的大小,我们的代码要在它们之后添加。
区段RVA是00B5B000,将00B5B1D4设置为入口点,保存文件。
然后计算一下刚才添加的三个函数的IAT位置:
加上镜像基址为00F5B048(InitSkinMagicLib)、00F5B04C(LoadSkinFromResource)、00F5B050(SetDialogSkin),它们的调用方式如下,其中第二个函数的后面两个参数是皮肤文件在资源中的位置,在开始用Restorator添加资源时看到的。
载入到Ollydbg中,添加调用代码,需要用到字符串的直接在代码后面一点的位置写入就好了,最后记得跳回原入口点,RVA是002F40C0,加上镜像基址为006F40C0。
保存文件,大功告成~
做壳那么久,我对PE格式有了大概的认识。PE文件是有灵魂的文件,只有它们能直接在Windows上运行。本文尚有不到之处,恳请网友与前辈们多指教!
任天(Ratin)
2015-02-05
- 动手修改EXE,给他人程序添加皮肤
- 修改他人程序,在请求里添加自己的用户
- 给硬盘添加皮肤
- 给QT程序的EXE添加图标
- 给程序换皮肤
- 给程序加上皮肤
- MFC给按钮添加皮肤
- 给未加皮肤的EXE文件加皮肤
- 给VC程序换皮肤
- 给VC程序换皮肤
- 给Delphi程序(exe,dll)添加版本信息
- VC6.0给控制台程序exe文件添加图标
- VC6.0给控制台程序exe文件添加图标
- 给Delphi程序(exe,dll)添加版本信息
- VC6.0给控制台程序exe文件添加图标
- 给Qt生成的exe执行程序添加版本信息
- VC6.0给控制台程序exe文件添加icon图标
- 给QT 程序的EXE文件添加图标
- android 手把手教你10分钟快速接个推推送服务
- php编译情况
- Netty系列之一介绍
- hdu2596LCA公共祖先问题(离线Tarjan算法)
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- 动手修改EXE,给他人程序添加皮肤
- Deepin搭建Eclipse C/C++环境
- uva 1509(dfs)
- Android 之我的开源框架
- HDOJ 题目4857 逃生(逆序拓扑排序,优先队列)
- 20150204学习总结
- 注意!!!获取数据库服务器主机ip
- int bool double float各类型数值相同数值是否存在差异
- ubuntu下的基本操作