·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化时事 >> 汉化动态 >> DT_FixRes--PE 文件资源修复、重建引擎(4月27日更新)    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

DT_FixRes--PE 文件资源修复、重建引擎(4月27日更新)

作者: dREAMtHEATER 来源:dREAMtHEATER 的个人编程网站 时间:2005-04-30 点击:14179



PE 资源修复引擎 DT_FixRes 最终版(2005-04-27)
-> DT_FixRes 下  载  
     引擎 DT_FixRes 应用于 Win32 平台,用户通过编程方式调用该引擎,可将微软 PE 格式文件中的非标准资源(Resource)进行标准化修复,同时它还为高级用户提供了资源导出功能,为 PE 资源修复、重建提供了高度的灵活性。该引擎特别适合进行软件汉化工作的朋友。

   很多被加壳的 PE 文件在脱壳以后,往往该 PE 文件的资源部分无法用某些资源工具进行查看、编辑,同时也不利于脱壳文件的优化工作。这其中的主要原因是由于很多加壳程序将部分资源(如 Icon、Version Information) 从资源节 (resource section) 移到了壳增加的节里,这导致很多资源工具不能正确识别分布在两个节里的资源数据。DT_FixRes 作为 PE 文件资源修复、重建引擎,为此提供了完美解决方案。它可以将分布在多个节里的资源重新移到一个资源节里,并且对资源进行了完全优化,修复后的资源不含有任何垃圾数据,如同资源编译器的编译效果,可以媲美未加壳前的原始资源。这样资源工具也就能够顺利地对修复后的 PE 资源进行查看、编辑,另外也大大简化了对脱壳文件的手工优化工作。



请下载

更新时间:4月22日 
1.代码进行细小调整,更符合标准 resource 格式;
2.根据 askformore 建议,修改了 dump resource 部分的代码,现在 dump 的功能更强大


更新时间:3月20日 pm 5:16准备收工了,又将代码框架稍微调整了一下,请大家重新下
载。也许这个版本就是最后发布版了!

更新时间:3月20日 重新了三遍源码,这个版本还原的资源非常完美,正如我说
明中写的:对资源进行了完全优化,修复后的资源不含有任何垃圾数据,如同资源编译器的
编译效果,可以媲美未加壳前的原始资源。另外我增加了重要接口,功能更强大,使用前一
定看说明

更新时间:3月17日 pm 3:20 修正如下:
1.由于接口函数参数的类型,可能会导致一些潜在的 bug,因此我修改了部分接口函数参数,
  并去掉了一个接口函数;
2.改写了对没有资源部分的 PE 格式的分析代码;
3.增加了对非法 resource RVA 的判断

版本更新说明:
我重写了大部分代码,并进行了大量测试,被测试的加壳程序:UPX v0.72, v1.25, FSG v2.0,
Aspack v2.12,其中UPX 0.72 对资源的处理比较变态,不过引擎针对此情况做了正确的分析,
目前完全可以正确地修复、重建 PE 资源,修复后 PE 文件资源可以被eXeScope、ResHacker、
PE Explorer 查看、编辑,非常好用了。

为了证明我的程序我更具有优越性,我测试了几个 fly 给我的俄国老写的类似程序,包括
pResFix v.0.2 by hapatsa,
ResFixer v 1.0 beta 1 by seeQ,
Resource Rebuilder v1.0 by Dr.Golova
他们只是简单地将重建后的 resource section 保存成数据文件,如果你想生成真正能运行的
修复资源后的PE文件可能你自己还要做很多辅助工作,对PE格式、资源结构不熟悉的朋友我估
计很困难恢复到可用状态,而我的程序把所有这一切均简单化、自动化,生成真正的资源修复
后的可执行PE文件。


简介:
    很多被加壳的 PE 文件在脱壳以后,往往该 PE 文件的资源部分无法用某些资源查看器进行
查看、修改。这其中的主要原因是由于很多加壳程序将部分资源(如 Icon、Version 
Information) 从资源节 (resource section) 移到了壳增加的节里,这导致很多资源查看器不能
正确识别分布在两个节里的资源(顺便说一下,PE Explorer 基本能识别大部分这种情况的资
源),DT_FixRes 是一个 PE 文件资源修复、重建引擎,它可以将分布在多个节里的资源重新移
到一个资源节里,并且对资源进行了完全优化,修复后的资源不含有任何垃圾数据,如同资源编
译器的编译效果,可以媲美未加壳前的原始资源。通过本引擎修复、重建脱壳后的 PE 文件资源,
可以让所有资源查看器能够对资源部分进行查看、修改。使用者须通过编程方式在自己的程序中
使用该引擎。该引擎特别适合进行软件汉化工作的朋友。

声明:
   1.您可以免费使用该引擎,如果您发布了使用该引擎的程序,请在相关说明中注明该引擎的版
权信息,以表示支持作者的辛勤劳动;
   2.本软件是安全的,但是作者不承诺对任何由于使用本软件而引起的损失或者伤害负责。

使用说明:
   本引擎以动态链接库(dll)形式实现,该 dll 共输出五个函数,函数按功能分为两大类。

第一类:PE 文件资源修复功能。修复后,引擎会无条件地为 PE 文件增加一个资源节,会导致文
        件体积变大,该功能适合进行简单修复脱壳后 PE 资源部分。

<1> 输出函数 FixResFromFile

C 形式函数原型:
BOOL __stdcall FixResFromFile(const char* PEFile, char* ErrBuff);

Delphi 形式函数原型:
function FixResFromFile(const AFileName: PChar; ErrMsg: PChar): Boolean; stdcall;

参数说明:
PEFile --- 指向你需要进行资源修正的 PE 文件路径指针;
ErrBuff --- 指向一块至少具有 80 个字节空间的 Buffer 指针,在执行该函数返回错误时,接收
            错误消息。

该函数适用任何 Win32 平台的编程语言去调用。

<2> 输出函数 FixResFromStream

Delphi 形式函数原型:
function FixResFromStream(AStream: TMemoryStream; ErrMsg: PChar): Boolean;

参数说明:
AStream 为 PE 映象的内存流,其他说明同 <1> 。

此函数对写注册机的朋友特别适用,当你将 dump 出来的 PE 内存映象保存到硬盘之前,你可以先
进行资源修复,通过对内存流的操作,可以减少代码工作量。注意:该函数仅适用于 Delphi 语言。

第二类:导出重建后的资源节功能。由于不同的加壳程序对原始 PE 文件的结构改变的千差万别,
        导致对脱壳文件的 PE 结构优化方案也是千差万别的,因此很难在一个程序里完成对所有
        脱壳类型的 PE 结构优化,引擎将机会留给用户自己。作为使用者,你可能知道如何脱某
        种类型的壳以及如何优化脱壳后的 PE 结构,那么你也就可能需要将修复后的资源节加载
        在你认为更合适的 RVA 地址起始处。该功能接口能满足你的这个定制需要,由于该功能的
        相对复杂性,要求使用者对 PE 结构必须十分属性,因此本功能仅适合高级用户使用。

<1> 输出函数 DumpResFromFile

C 形式函数原型:
BOOL __stdcall DumpResFromFile(const char* PEFile, char* ResFile, 
  DWORD NewRVA, DWord FileAlign, char* ErrBuff);

Delphi 形式函数原型:
function DumpResFromFile(const PEFile: PChar; const ResFile: PChar;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean; stdcall;

参数说明:
PEFile --- 指向你需要进行资源修正的 PE 文件路径指针;
ResFile --- 指向你需要导出的资源节的保存文件路径;
NewRVA --- 你希望修复后的 PE 文件资源的加载 RVA 地址,即 resouce data directroy 的
           virtual address。该地址应该大于 0x1000,并且应该是 DWORD 边界对齐,建议是
           0x1000 的倍数。
FileAlign --- 资源节的文件对齐方式,值只能是 0x200 或者 0x1000。
ErrBuff --- 指向一块至少具有 80 个字节空间的 Buffer 指针,在执行该函数返回错误时,接收
            错误消息。

该函数适用任何 Win32 平台的编程语言去调用。

<2> 输出函数 DumpResFromStream

Delphi 形式函数原型:
function DumpResFromStream(PEStream: TMemoryStream; const ResFile: string;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean;

参数说明:
PEStream 为 PE 映象的内存流,其他说明同 <1> 。

通过对内存流的操作,可以减少代码工作量。注意:该函数仅适用于 Delphi 语言。

<3> 输出函数 DumpResFromStreamEx
 
Delphi 形式函数原型:
function DumpResFromStreamEx(PEStream: TMemoryStream; ResStream: TMemoryStream;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean;

此函数对写注册机的朋友特别适用,当你将 dump 出来的 PE 内存映象保存到硬盘之前,你可能需
要进行 PE 结构的优化,在优化之前很可能需要导出重建的资源节。通过对内存流的操作,可以减
少代码工作量。注意:该函数仅适用于 Delphi 语言。

特别提示:引擎只在正确 PE 格式的基础上修复、重建 PE 资源,因此应用以上五个函数之前请保
证被操作文件或者内存流均具有正确的 PE 格式,否则可能造成不可预期的错误。

调用范例(Delphi 语言):
procedure FixResDemo;
type
  TFixPERes = function(const AFileName: PChar; ErrBuff: PChar): Boolean; stdcall;
var
  ErrBuff: array[1..80] of Char;
  Handle: THandle;
  FixPERes: TFixPERes;
begin
  Handle := LoadLibrary(DT_FixRes.dll);
  if Handle <> 0 then
  begin
    @FixPERes := GetProcAddress(Handle, FixResFromFile);
    if @FixPERes <> nil then
      if not FixPERes(PChar(ur PE file), @ErrBuff) then
        ShowMessage(ErrBuff);
    FreeLibrary(Handle);
  end;
end;

其他:
我写了一个测试该引擎的 Demo,请与该引擎 dll 放在同一文件目录下测试,发现 bug 请发信通
知我。

dREAMtHEATER
2005-04-22
  
E-mail:NoteXPad@163.com
http://dREAMtHEATER.reg365.com

 



看雪论坛原始帖
汉化新世纪发布帖

 

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): FixRes 原创工具 资源修复

·上一篇: 【公告】国内首个收费汉化补丁:梦幻之星4 05新中文版 ·下一篇: 我对软件汉化工具的几点看法, 不要追求多多益善

· 版权申明: 本文引自《dREAMtHEATER 的个人编程网站》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《dREAMtHEATER 的个人编程网站》[ 作者: dREAMtHEATER],如需转载请直接联系原始作者,并请注明原始出处。

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

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