有了上面的预备知识,我们现在用 LordPE 的 PE 编辑器打开 dumped.exe 来看看。
现在我们点击一下区段按钮,看看各个区段中有什么内容。
因为上面我们已经看到文件块对齐是 1000H,我们就按 1000H 大小的倍数来在16进制编辑器中选择块,分析数据中是否有区段。先在16进制编辑器中查看一下第一个区段。
偏移 2000 是第二个区段开始的地方。有人可能要问你怎么知道这是原来的第二个区段开始处?呵呵,因为我前面看到文件对齐粒度为 1000,所以我在16进制编辑器中主要注意与 1000 的倍数对应的偏移地址。当我翻到偏移地址为 2000 时,在这个地址的上面是由一大片 0 填充的,到这个地址后又开始有数据了,所以我确定偏移 2000 处应该是另一个区段的开始处。如果你在16进制编辑器中看到一大片 0 后突然看见有数据,你再根据文件对齐粒度注意一下数据的开始地址,一般就可以确定是否已到另一个区段了。由16进制窗口中查看到的信息,我们可以确定 WinUpack 把我们原来的区段都合并了,现在我们要把它们分离出来。
3、分离区段
要说明一下,分离区段和下面的一节修正 PE 头在其他脱壳文件的优化中并不是必须的,这里主要针对 WinUpack 的壳。现在关掉 LordPE,用 WinHEX 打开 dumped.exe,ALT+G,填入偏移 1000,转到相应位置,在偏移 1000 处点右键,选择定义选块,输入相应数据后点确定。
在选好的选块上右键选择复制选块->进入新文件,另存为 text.bin。
其实这个偏移 1000H,长度 1000H 的段不保存也无所谓,这里主要是让大家熟悉一下保存的方法。同样,我们把起始偏移为 3000H,大小为 1000H 的那个段也另存为 data.bin。有人可能要问了,你为什么不把起始偏移为 2000H,大小为 1000H 的那个区段也保存下来?呵呵,因为我知道这里是原来的放输入表信息的那个段,现在已经被破坏了,我就不要了。同样,偏移 4000H 以后的段我也不保存了,那里是资源段,因为在修正过程中我可能要用另外的 RVA 地址来重建资源,所以不保存了。现在我们在 WinHEX 中再定义一个选块,从偏移 2000H 直到文件尾,选中后删除这个选块。
4.修正PE头
现在我们还要做一件事,因为 WinUpack 把 PE 头搞得太乱,我们要找个正常的替换一下。这里我选择 XP_SP2 下的记事本,用 WinHEX 打开记事本,从文件开始偏移为 0 的地方选择一个大小为 1000H 的选块,右键选择复制选块->以十六进制数值方式,现在转到我们正在 WinHEX 中编辑的 dumped.exe,定位到文件开始偏移处,右键选择剪贴板数据->写入(从当前位置覆写),把记事本的文件头粘贴过来。
完成上述工作后保存 dumped.exe,现在文件大小变成 8K 了,用 PETools 的 PE 编辑器来打开这个文件,进行一些修改。先点击文件头按钮。
把区段数由 3 改成 1 后确定,再点击可选头按钮。
改一下上面的镜像基址为 00400000,点击确定。这里可以参考原来备份的 dumped.exe 文件来修改(我前面已经说过要备份原来的那个 dumped.exe 文件用作参考,你不会没备份吧?)。
5、修正及添加区段
现在点击区段按钮,修改一下区段的一些属性。因为前面我们已经把区段改为 1 了,现在打开区段后,只看到一个 .text 区段。在这个区段上右击,选择编辑区段头。
因为我们现在的 .text 段是从偏移 1000H 开始的,大小为 1000H,所以我们要把上面的虚拟偏移和 RAW 偏移都改成 1000,虚拟大小和 RAW 大小也要改成 1000。在弹出的对话框上进行设置。
完成上述修改后点确定,回到区段编辑器中,现在我们要添加一个大小为 1000H 的段,用来存放输入表。这里可能大家也有疑问:你是知道原来的输入表段大小为 1000H,如果你不知道呢?你知道要添加多大的一个区段?其实我这里添加区段的大小是根据 ImportREC 的新建输入表信息中的大小来的。
共4页: 上一页 [1] 2 [3] [4] 下一页
|