动手修改EXE,给他人程序添加皮肤
2015-02-05 00:21
232 查看
遇到一个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
我选择的皮肤库是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
相关文章推荐
- 修改他人程序,在请求里添加自己的用户
- 怎样给没有源代码的.net程序添加修改功能
- 用Nhibernate怎么实现数据的添加、删除、修改简单程序
- 通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序
- 在js中添加信任站点,禁用xinxp弹出窗口阻止程序,修改IE ActiveX安全设置
- 如何将 .exe 程序添加到系统的服务中
- 用Nhibernate怎么实现数据的添加、删除、修改简单程序
- 修改makefile,为程序添加 build号和build日期
- 修改MFC模板写的程序的EXE文件的图标
- VC6.0给控制台程序exe文件添加图标
- 连接MySQL并提供查询,删除,修改和添加的java程序
- 给Delphi程序(exe,dll)添加版本信息
- 根据表生成添加、修改语句的程序
- (2356)在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤
- 怎样给没有源代码的.net程序添加修改功能
- NHibernate+GridView构建添加,删除,修改程序
- 自己根据“XDOWNPAGE ASP版本”分页程序修改(添加前十页,后十页功能)
- VC6.0给控制台程序exe文件添加图标
- 用Nhibernate怎么实现数据的添加、删除、修改简单程序
- 通过网页修改activex安全设置,添加信任站点,禁用弹出窗口阻止程序