首页
社区
课程
招聘
[旧帖] [原创]eXeScope, XNResourceEditor & IDR 之Form中文显示补丁 0.00雪花
发表于: 2012-7-4 11:40 5989

[旧帖] [原创]eXeScope, XNResourceEditor & IDR 之Form中文显示补丁 0.00雪花

2012-7-4 11:40
5989
  在分析Borland Delphi或Borland C++程序时,一项非常重要的工作就是查找Forms中的事件处理过程,从而快速定位到目标代码。Forms通常是将DFM文件编码后以类型为"RC Data"的资源保存在可执行文档中,所以除了专用的分析软件,一些资源编辑器也可用来完成这项工作。
  中文或者说双字节编码的文字在Form中是以Unicode表示的。这些分析、资源编辑/查看软件在处理Form中的Unicode时基本上采用了相同的标准流程或库:对小于0x20、等于0x27(字符"'")和大于0x7F的字符,一律通过类似SysUtils.IntToStr的调用,将Unicode值转换为十进制的字符串,前面再加一个井字符来表示,即#ddddd。
  例如,以下Form片段:
object f_reg: Tf_reg
...
  object Label1: TLabel
...
    Caption = #26426#22120#30721#65306
...
  end
  object Label2: TLabel
...
    Caption = #36755#20837#27880#20876#30721#65306
...
  end
...
end

  这些字符串犹如天书,看着头大。将这些Unicode转换为ANSI,实际上就是:
object f_reg: Tf_reg
...
  object Label1: TLabel
...
    Caption = '机器码:'
...
  end
  object Label2: TLabel
...
    Caption = '输入注册码:'
...
  end
...
end

  总不至于还要准备一个编码转换软件,不断地复制粘贴、复制粘贴…,这可是体力活。或者会编程呐,就把这些个Forms保存为.dfm文件,再写个脚本来批量翻译。当然,最方便的是Patch这些软件,在中文环境中直接显示汉字。
  早期DeDe的原版也不支持直接显示中文,要patch过的版本才行。以下为eXeScope(作者为日本人)中的一个Form片段,DeDe显示为:
object FConf: TFConf
...
  Font.Name = MS Pゴシック
...
  object NextCB: TCheckBox
...
    Caption = 
      &Don't display this message from next time;次回からはこのメッセージを表示しない(&D)
...
  end
...
end

  比较简单的处理,仅仅用于显示。不能编辑,也不能写回去。能保存修改的正确格式为:
object FConf: TFConf
...
  Font.Name = 'MS Pゴシック'
...
  object NextCB: TCheckBox
...
    Caption = 
      '&Don'#39't display this message from next time;次回からはこのメッセージを表示しない(&D' +
      ')'
...
  end
...
end

  未经“汉化”的正确格式为:
object FConf: TFConf
...
  Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
...
  object NextCB: TCheckBox
...
    Caption = 
      '&Don'#39't display this message from next time;'#27425#22238#12363#12425#12399#12371#12398#12513#12483#12475#12540#12472#12434#34920#31034#12375#12394#12356'(&D' +
      ')'
...
  end
...
end

  事实上,DeDe并未完善,很多功能都"Not implemented yet!",DaFixer也不再继续开发。对含有Unicode的Form的编辑根本就没有实现——点"DFM Editor"按钮试试看,会提示:


  它不知道怎么处理FConf中Font.Name数据类型为0x12的内容。数据类型0x12是指Unicode字符串,UTF-8字符串的数据类型为0x14,在DFM的编码、解码标准流程中调用相同的例程。Font.Name是长度为8的Unicode字符串:
004EF790:                         .46 6F 6E 74.2E 4E 61 6D          Font.Nam
004EF7A0:  65 12 08 00.00 00 2D FF.33 FF 20 00.30 FF B4 30  e.....-.3. .0..0
004EF7B0:  B7 30 C3 30.AF 30                                .0.0.0

  不管怎么说,那些年DeDe确是分析Delphi最好的工具。
  这里将用过的、经patch的三个软件分享出来:eXeScope、XNResourceEditor和IDR(Interactive Delphi Reconstructor),前两个支持Form直接中文编辑保存,第三个软件本身仅支持查看。

1. eXeScope
  版本6.50,2004/5/23发布,用Borland Delphi 7编写。有汉化版,但不支持中文显示和编辑。想来汉化的Rule No.1就是忠实于原著。
  官方下载:http://hp.vector.co.jp/authors/VA003525/eXeSc650.zip
  共享软件,需要注册。可参考“Exescope v6.50 注册算法分析”。

eXeScope.exe            Size          MD5
   原版                 1,018,368     BE6C523369E811E94F417F5F378F5600
   补丁版               1,018,368     9B5ACE719F7640F0A075541F56188B36


2. XN Resource Editor
  版本:3.0.0.1,2005/12/17发布,开源软件。用Borland Delphi 2006编写。
  官方下载:http://www.btinternet.com/~wilsoncpw/xn_resourceeditor_setup.exe
  之前一直用Resource Hacker,但它到版本3.6.0.92后作者停止了更新,对RCData处理不好。
  个人认为这个软件好于eXeScope。

XNResourceEditor.exe    Size          MD5
   原版                 1,945,600     A0E4B835ABA9809EE6C067C2B1A89CD0
   补丁版               1,946,112     A4E7B3B03A252DDE72F9F80F7942114B


3. IDR(Interactive Delphi Reconstructor)
  版本:2.5.3 beta,2011/10/17发布,免费软件。用Borland C++ 2002编写。
  官方网址:http://kpnc.org/idr32/en/
  DeDe的继任者,强大的Delphi分析工具。能生成很好的map和注释文件,可通过插件mapimp载入OllyDbg中。
  虽然仅支持Form的显示,但是“Forms(F5)”标签下提供文本和图形两种显示模式。图形模式很直观地显示窗体,且本身就能够显示中文;本Patch用于文本模式下显示中文,同时“Save Delphi Project”命令保存的.dfm文件也是中文的。

Idr.exe                 Size          MD5
   原版                 2,738,688     530140E345884616E0047C7ECDBB2F59
   补丁版               2,739,200     A65EAF1C13EF7603E48F5F27F414A288


  Form编辑说明:
      a) 无论是中文还是西文字符串,前后各用一个单引号“'”括符。
      b) ASCII码小于0x20的字符,使用#dd的形式表示。
      c) 如果字符串中含有字符“'”,使用#39表示。
      d) 字符“+”用作续行。
  中西文混合及含字符“'”的情况,参见上面例子。

  Patch说明:未加壳、加密,方便交流。
      a) eXeScope.exe,增加0xD1字节的patch代码在区段CODE的末尾部分,文件大小保持不变。
      b) XNResourceEditor.exe,由于区段.text和.itext没有足够的空间,将文件头部增加0x200字节后,0xD1字节的patch代码放在00400400处。
      c) Idr.exe,区段.text增加0x200字节后,0xE4字节的patch代码放在尾部。

  下载:用附件中的文件覆盖对应软件的同名文件。
eXeScope.v6.50.patched.by.stillHiM.7z
XNResourceEditor.v3.0.0.1.patched.by.stillHiM.7z
IDR.2.5.3.beta.patched.by.stillHiM.7z

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 50
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢MistHill分享!!!MistHill辛苦啦~
2012-7-27 16:51
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享!!!
2014-11-29 18:20
0
雪    币: 8227
活跃值: (3376)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼主的辛勤工作,顺便提一句,delphi的资源编译工具我一向用的ResScope
2014-12-1 18:54
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Download  exescope  with  keygen:
http://www.sctzine.com/araclar/
2017-5-1 16:29
0
游客
登录 | 注册 方可回帖
返回
//