动手修改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

0 0