·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 汉化脱壳 >> 脱壳程序资源重建后的再减肥    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

脱壳程序资源重建后的再减肥

作者: 沈忠良 来源:汉化新世纪 时间:2006-04-16 点击:7656

脱壳程序资源重建后的再减肥

 

目标程序:iuVCR v4.11

所用工具:FreeResPE ExplorerHex WorkshopLordPE

优化目的:资源重建后的脱壳程序进行减肥,使其恢复到资源重建前的大小。

 

我们知道,正常编译出来的程序的资源区段一般处于程序的最后一个区段;而进行手工脱壳后的程序,如果对导入表进行了重建的话,导入表一般重建在程序的最后,也就是放到了资源区段的后面。

汉化软件的标准资源其实就是在对资源区段中的资源进行修改,因此,汉化后软件的资源区段一般情况下其的大小都会有一定的改变。正常程序由于资源段在程序的最后,因此其大小的改变一般不会对程序有影响(自校验除外)。而手工脱壳后的程序,由于其资源区段处于导入表的前面,因此程序汉化后就会产生程序找不到导入表的情况,具体表现就是程序汉化后无法运行或者运行出错。因此,我们对于手工脱壳后的程序,在汉化前首先要确定其资源表的位置,以确定是否需要对程序在汉化前进行预处理。具体我们可以用 PE Explorer 来打开程序来查看程序中各个区段的在程序中的位置和大小,具体操作如下:用PE Explorer 打开要查看的文件,然后在菜单中选择“视图”——“区段头”即可查看各区段的相关信息。

这是 iuVCR v4.11 脱壳后的区段信息:

在这里我们可以看到iuVCR v4.11资源段并不在程序的最后,它的后面还有四个区段,因此如果直接对此程序进行汉化的话,汉化后的程序肯定是不能正常运行的。

现在我们所要做的是将程序的资源段移到程序的最后,以保证汉化后的程序能够正常运行。搬迁区段位置最好是直接进行搬迁,但是我不会 PE DIY 不知道如何操作,但我知道 FreeRes 可以在程序的最后重建一个资源区段。

现在让我们用 FreeRes 打开要处理的程序:

如图所示,执行“功能”菜单中的“释放压缩资源”,之后会弹出一个对话框,不用管它,点“确定”,然后再执行“功能”菜单下的“建立可编辑资源”。这样我们就已经在程序的最后重建了一个新的资源区段。这时我们再用 PE Explorer 来杳看的话,可以看到程序的最后已经多出了一个新的资源区段了。

经过上面的处理后,程序汉化后就不会出现运行错误了。

但是我们可以看到,经这样处理后,程序比原来的大了好多。程序之所以变大,是因为我们进行资源重建后,并没删除原来程序中存在的资源区段。上图中我们也可以看到程序中原来的资源区段只是改了一下区段名(改成了 rsrc0 而已。

现在我们的问题是如何将原来的那个现已无用的资源区段给删除掉。当然 PE Explorer 中有删除区段的功能,同时它还会自动为你调整区段表中的数据,但是,虽然它提示“可能可以删除”,可直接删除后往往会损坏程序,导致程序无法运行。对此,我尝试了多次,都无法使程序正常运转,当然可能我还需要对程序做什么修改,但以我现有的水平还没有这个能力,据此我换了个思路——想办法将这个无用区段的大小尽可能的缩小,从而达到给程序减肥的目的。

为此,我们还要用到另一个软件——LordPE

我知道 LordPE 有一个 PE 重建功能,在重建过程中 LordPE 能够对 PE 结构进行优化,删除空白区域、优化 PE 结构。

据此特性,我们首先对 iuVCR v4.11 进行预处理,想办法将无用资源区段中的数据清除,使其成为空白区。

具体操作如下:

首先,根据上图中显示的内容记录下的图中无用资源区段的偏移位置和大小(如图中无用资源段的实际开始的偏移位置为:0015F000、大小为:00068000)。

然后我们用 Hex Workshop 十六进制编辑器打开我们要处理的文件;

打开“编辑”菜单,执行“转到”,在转到对话框中填入我们记下的区段的偏移位置。

执行“转去”,来到要处理的区段开始位置(如图)

我们将光标移到要处理区段的第二行(0015F010),

然后打开“编辑”菜单,选择“选择块”,弹出如下对话框:

在字块大小输入框中填入减去一行后的区段大小,即 00067FF0,也就是我们上面记下的 00068000-00000010,点“确定”。将鼠标移到选中区域点击鼠标右键

选择“填充”,填充对话框中选择填充“0”。

按“确定”将选定块中的数据全部用“0”替换,将修改后的iuVCR v4.11保存备份。

通过以上对iuVCR v4.11 的预处理,我们没没有看到 iuVCR v4.11 的程序大小有任何的改变。现在该 LordPE 出场了。

运行 LordPE ,选“重建 PE”,选择打开我们刚才处理过的 iuVCR v4.11 主程序,然后点确定,程序一会儿就重建完了,现在我们再来看看程序的大小,怎么样,是不是又恢复到资源重建前的大小了?

有人或许会问,为什么不将无用的资源区段全部充零?

这是因为如果将区段头也清零的话,LordPE 重建后是不会改变大小的,具体什么原因我也说不清。

下面是重建后的区段信息,我们可以看到原资源区段的大小已经变得微不足道了:

题外话:事实上以上处理方法是我在为 iuVCR v4.11 减肥过程中的意外收获。我的本意是删除脱壳后的 iuVCR v4.11中残存的加密数据块。

因为我发现脱壳后的iuVCR v4.11特别大,有近 5M,用WINRAR压缩后仍有近 3M。而原程序压缩后正好是压缩的脱壳后程序的一倍,因此我怀疑程序中还残留着原程序的尸体。于是就用LordPE 将未脱壳的iuVCR v4.11运行时的内存镜像给Dump 下来,利用Hex Workshop的比较功能,将它和脱壳后的程序进行比较,发现在程序后半部分有一大块连续的区块其内容是一模一样的。

经过查看偏移,发现就存在于程序的最后第二个区段(也就在导入表的前面)。尝试着将这块相同的区块整个给充零,发现对程序没有任何影响,这也就证明了我先前的猜测。最后用上面介绍的方法处理后重建程序,iuVCR v4.11的大小就缩小到了 3M左右,一下子就减去了 2M。如果再将程序压缩一下的话,就仅剩下1.5M左右了。

 

 

 

汉化新世纪 责任编辑: 沈忠良 .:|:. 标签(Tag): 删除 多余资源 区段

·上一篇: CX工作室的新軟件 cx_word v1.002 及 cxw_conv v3.505 ·下一篇: 一种简单的CreateFontA、CreateFontIndirectA字体修改方法

· 版权申明: 本文引自《汉化新世纪》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化新世纪》[ 作者: 沈忠良],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号