首页
社区
课程
招聘
隆重推出 DT_FixRes 最终版 -- 最好的 PE 资源修复引擎
发表于: 2005-3-13 20:02 69269

隆重推出 DT_FixRes 最终版 -- 最好的 PE 资源修复引擎

2005-3-13 20:02
69269
收藏
免费 0
支持
分享
最新回复 (146)
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
51
翻译进程就放在这里了



Translator:
cyclotron/TT

Introduction:

It is a common problem in packed PE files that after unpacking, their resources cannot be viewed or modified by some resource explorers. The main reason for this is that many packers/protectors move the uncompressable resources(eg. Icon,Version information) into the appended section, while most of the resource explorers cannot recognize correctly the resources distributed in two separate sections(except PE explorer, by the way). DT_FixRes is a professional resource rebuilding engine for PE files, capable of recollecting the resources in different sections into a single one, optimizing structures and removing junks if any. Comparable to resource compilers, DT_FixRes restores the resource structures on an almost perfect basis. PE files, when fixed by DT_FixRes, expose the resources to all the resource explorers for free view or modification.

The functions of DT_FixRes are accessible to programmers and especially to software localizers through specific intefaces.

Disclaimers:

1.DT_FixRes is free for use, subject to the inclusion of copyrights for support to the author.

2.DT_FixRes is presumbly safe to use, but the author holds no responsibility for any damages possibly caused by the engine.

Instructions:

The engine of DT_FixRes is implemented as a dll, exporting five functions in all, sorted into two types.

1st Type: Restoration of PE resources. When done, the engine will unconditionally append a resource section to the PE file, resulting in an increase in size. These functions apply to simple restoration of unpacked PE files.

<1> Export Function Name: FixResFromFile

-Prototype for C
BOOL __stdcall FixResFromFile(const char* PEFile, char* ErrBuff);

-Prototype for Delphi
function FixResFromFile(const AFileName: PChar; ErrMsg: PChar): Boolean; stdcall;

Arguments Specifications:
PEFile --- Pointer to the path of the PE file whose resource is to be fixed;
ErrBuff --- Pointer to buffer with the size of at least 80 bytes, for the reception for error messages.

This function is compatible with all Win32 platforms.

<2> Export Function Name: FixResFromStream

-Prototype for Delphi
function FixResFromStream(AStream: TMemoryStream; ErrMsg: PChar): Boolean;

Arguments Specifications:
AStream represents the memory stream of the PE image. Refer to (1) for the others.

This function is especially applicable to keygen makers. You may fix the resources by operating the memory stream for a reduction on customized code before dumping the PE image onto your harddisk. Note that it is exclusively compatible with Delphi.

2nd Type: Export of restored resource section. There are various schemes of optimization for dumped PE files due to diversified modifications made to the original PE files by different packers/protectors. The engine provides an oppurtunity to the programmers that they can make customed optimization to the dumped PE files. As the caller, you may be quite acquainted with the best optimization scheme for the specific packer/protector as well as the best starting RVA to load the resource section into. So this function is prepared for the customed requirement. Note that the user should be familiar with PE stuctures on account of the relative complexity of this function. Advanced users only.

<1> Export Function Name: DumpResFromFile

-Prototype for C
BOOL __stdcall DumpResFromFile(const char* PEFile, char* ResFile,
  DWORD NewRVA, DWord FileAlign, char* ErrBuff);

-Prototype for Delphi
function DumpResFromFile(const PEFile: PChar; const ResFile: PChar;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean; stdcall;

Arguments Specifications:
PEFile --- Pointer to the path of the PE file whose resource is to be fixed;
ResFile --- Pointer to the path of the exported resource section;
NewRVA --- RVA for the PE file to load resource section into, or the virtual address of resource data directory;
FileAlign --- File alignment of the resource section, 0x200 or 0x1000 exclusively;
ErrBuff --- Pointer to buffer with the size of at least 80 bytes, for the reception for error messages.

This function is compatible with all Win32 platforms.

<2> Export Function Name: DumpResFromStream

-Prototype for Delphi
function DumpResFromStream(PEStream: TMemoryStream; const ResFile: string;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean;

Arguments Specifications:
AStream represents the memory stream of the PE image. Refer to (1) for the others.

<3> Export Function Name: DumpResFromStreamEx

-Prototype for Delphi
function DumpResFromStreamEx(PEStream: TMemoryStream; ResStream: TMemoryStream;
  NewRVA: DWord; FileAlign: DWord; ErrMsg: PChar): Boolean;

This function is especially applicable to keygen makers. You may fix the resources by operating the memory stream for a reduction on customized code before dumping the PE image onto your harddisk. Note that it is exclusively compatible with Delphi.

Special tips:
The engine restores only the resource of a correctly structured PE file so that please make sure of the validity of the target PE file before calling any of the above five functions. Otherwise, it may result in unexpectable errors.

Demo for 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;

Others:
I wrote a demo to test the engine, which located in the same directory as the dll did. Please feel free to inform me of the bugs if any.

dREAMtHEATER
2005-03-20

E-mail:NoteXPad@163.com
http://dREAMtHEATER.yeah.net



2005-3-21 18:31
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
告诉你一个小问题,加多层壳就不能用了。
2005-3-23 17:12
0
雪    币: 191
活跃值: (205)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
53
敬仰+支持+期待更多精品
2005-3-24 09:55
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
特别感谢 cyclotron 对我的大力支持,使得我的作品更加完整,再次感谢!
由于工作繁忙,我现在暂时无法继续维护代码,也无法回复所有朋友的帖子,抱歉!
2005-3-26 09:56
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
最初由 鸡蛋壳 发布
告诉你一个小问题,加多层壳就不能用了。


运用本引擎之前请保证:PE文件已经脱壳,包括多层壳,并且能够正常运行,在这种情况下,理论上都可以正确修复,
2005-3-26 10:00
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
最初由 fly 发布
是否可以增加一个选项:

把资源各项列出来,能够手动定义挪移的目标资源地址
某些脱壳后,只需要移动几个图标资源


fly小弟看来还是不太理解本引擎的真正工作原理,最后的修订版本是对资源节进行了最佳修复和优化,不会有垃圾数据,至于你说的只想移动几个图标资源,我理解的是不想增加太多的文件体积,就是说优化,这个应该是你在某种脱壳类型的基础上,手工或者通过编程方式来实现,可通过我的引擎高级接口实现,那个接口就能定制资源RVA,请再次仔细阅读我的说明文档,他完全可以满足你的要求,

其实我本来想用一个例子来解释如何应用该引擎的高级接口,但实在没有精力了,另外一方面能手工或者编程方式修复/优化PE结构的用户,我想都是具有一定实力的,所以也没必要写,如果确实需要写,等我有时间吧
2005-3-26 10:08
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
不错确实是好东西
楼主你真是辛苦了
神会保佑你的
2005-3-30 20:30
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
希望 DT 老大能使 DT_FixRes GUI 对文件拖拽支持,那样就方便多了
2005-4-6 10:03
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
最初由 xukl26a 发布
希望 DT 老大能使 DT_FixRes GUI 对文件拖拽支持,那样就方便多了


那是我写的demo,而不是完善的工具GUI,只是教你如何应用这个引擎。
2005-4-6 18:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
怎么不能下载了?
2005-4-7 09:20
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
最初由 逍遥浪子 发布
怎么?


在发言之前,思考好再说,否则会给别人错误的引导,遇到这种问题,稍候再试,而不是下不了。
2005-4-7 18:18
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
62
学习中,长
2005-4-7 20:05
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
Thinstall.V2.521.UnPacKed.CracKed.WinAll.By.CUG加壳以后,使用这个软件释放资源,再想加变得壳,不可以,释放资源度不可以,楼主试试看,是不是还没有这个功能,
2005-4-12 17:05
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
最初由 bokonger 发布
Thinstall.V2.521.UnPacKed.CracKed.WinAll.By.CUG加壳以后,使用这个软件释放资源,再想加变得壳,不可以,释放资源度不可以,楼主试试看,是不是还没有这个功能,


仔细阅读说明!
2005-4-13 20:09
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
预计下周就有时间来更新了,准备推出final release
2005-4-13 20:10
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
最初由 dREAMtHEATER 发布
预计下周就有时间来更新了,准备推出final release


期待中!!辛苦了,谢谢!!
2005-4-13 21:05
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
67
可以支持 壳将 rsrc 只调整 RVA 的 DUMP 资源文件吗?
意思是脱壳后的资源RVA 太高了,不好改动成section 连 section
你的dll被其结构轻轻地骗了一下,当然不是说结构不正常

最近在脱 Arm4.x,发现(不知是不是使用者手下留情)那个壳对资源表不改动到其它section,解压后就好好的, 但RVA 与section之间不连续(因为除去了壳的尸体)
2005-4-14 22:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
虽然我不知道是什么东西,顶顶,以后可能就会用了
2005-4-14 23:52
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
69
dREAMtHEATER兄没有明白我的意思
算了,我还是手动恢复部分资源项
2005-4-15 00:38
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xcm
70
尝试了两天,总是连结不上主页,下载不了档案!
不知是否有出问题了!     还是我自己的问题?
2005-4-16 04:18
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
最初由 xcm 发布
尝试了两天,总是连结不上主页,下载不了档案!
不知是否有出问题了!   还是我自己的问题?


空间合同已到期,本周末会将主页搬到更稳定的空间,敬请期待。。。。。
2005-4-18 21:01
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
最初由 fly 发布
dREAMtHEATER兄没有明白我的意思
算了,我还是手动恢复部分资源项


相信我明白你的意思,你的意思是就是想移动几个图标资源的RVA,而不想无端地增加一个section,这个当然可以作到,用其中的高级接口DumpResFromFile
来做这件事情,section的位置不会改变,也不会改变section的体积,而接口FixResFromFile会无条件地增加一个section,不管rsrc是不是最后一个节,其中原因我不多讲了,总之我认为目前的功能足可以满足你的要求
2005-4-18 21:11
0
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
最初由 askformore 发布
可以支持 壳将 rsrc 只调整 RVA 的 DUMP 资源文件吗?
意思是脱壳后的资源RVA 太高了,不好改动成section 连 section
你的dll被其结构轻轻地骗了一下,当然不是说结构不正常

最近在脱 Arm4.x,发现(不知是不是使用者手下留情)那个壳对资源表不改动到其它section,解压后就好好的, 但RVA 与section之间不连续(因为除去了壳的尸体)


不太理解你要表达的意思,大致认为dump的功能可以满足你的要求
2005-4-18 21:14
0
雪    币: 100
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
多看多学!~
2005-4-18 21:48
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
75
最初由 dREAMtHEATER 发布


不太理解你要表达的意思,大致认为dump的功能可以满足你的要求


dump功能还差点的说
举个例:
有一壳脱壳后 section 如下:
name   va    vsize  offset size
.text  1000  1000   1000   1000
.rdata 2000  1000   2000   1000
.data  3000  1000   3000   1000
……(中间的是垃圾)
.rsrc 36000  51000  36000 51000
.pack 87000  2000   87000 2000

.rsrc是资源节,脱壳Dump出来时资源表已经是正常能用资源编辑器浏览,但若我要改 它的RVA 到 31000 就不得了,因为你的DLL只会分析资源结构,总是说正赏,当然不能说不正常,只能说我无法让你的Dll工作,这个工作应该说只调节 里面 item 的 RVA,而无须移动资源。。。这样说你该明白了吧,不明我不知能说什么了...

那资源可是脱壳出来的,属于资源正常,位置不理想

我也写了一篇使用 Dump 功能的文章,如有使用不当,请指教指教。。。
2005-4-19 14:57
0
游客
登录 | 注册 方可回帖
返回
//