论坛风格切换切换到宽版
  • 23902阅读
  • 42回复

.NET 程序初级汉化流程一例 [复制链接]

上一主题 下一主题
离线决斗
 
发帖
2068
金钱
0
威望
0
只看楼主 倒序阅读 0 发表于: 2005-06-24
【.NET 程序初级汉化流程一例】

前言:
自从 .NET 程序出现以来,对于目前汉化的工具来说,编辑和翻译/修改等等都基本不支持。几款专业性本地化工具虽然声称支持 .NET 程序的本地化,但目前似乎基本停留在“号称”的阶段。事实上,.NET 程序也可以实现标准资源和/或非标准资源(如果有)的翻译/修改。以前对于 .NET 程序的汉化/修改一直没有什么有利工具,现在,微软自家提供的一个名为 ildasm.exe 的工具就可以实现 .NET 程序的反编译,然后可以利用 ilasm.exe 重新编译程序。在此感谢 orochi_cn 兄(一名程序员)在论坛提出后,给我们大家带来了 .NET 程序汉化/修改的福音。
经过笔者看了网上一点 ildasm 的信息和资料后(部分有关利用 ildasm 破解 .NET 程序),并对反编译后的 *.il 文件初步分析和测试之后,找到了一点 .NET 程序的资源汉化/翻译,和部分字体调整,以及控件调整的方法,本文旨在抛砖引玉,希望得到大家的补充,也希望对于广大想汉化/翻译 .NET 程序的朋友有所帮助。

在开始使用 ildasm.exe 来反编译并汉化/翻译 .NET 程序之前,建议您安装微软的 .NET Framework,但 ildasm.exe 只在 .NET Framework SDK 中提供,大家可以自网上寻找。

流程:
系统平台:WinXP SP2
汉化目标:WinMD5 2.05(一个 .NET 小工具)
官方免费下载:http://www.blisstonia.com/software
系统需求:安装 .NET Framework
所需工具:微软 .NET 工具中的 ildasm.exe 和 ilasm.exe (还有一个“强签名”的工具 sn.exe 对于附带强签名的 .NET 程序有用,以后补充),记事本或其他文本增强编辑工具,Resource Hacker(资源编辑工具)

【1.反编译 .NET 程序 exe 或 dll】
使用 ildasm.exe (微软提供了简体中文版本),将其复制到 WinMD5 软件目录内。执行 ildasm.exe 后,会启动至 GUI 界面,用鼠标将 WinMD5.exe 拖动到 ildasm 界面中,会自行打开。如图(1)。
[attachmentid=15251]
然后在菜单“文件”中点击“转储”,弹出“转储选项”对话框,将“编码”选中“Unicode”其余按默认值不变,见图(2)。
[attachmentid=15252]
点击“确定”即可得到以下几个文件:
WinMD5.il
WinMD5.res
WinMD52.WinMD5Form.resources
以上三个文件,其中 WinMD5.il 和 WinMD5.res 对于我们汉化来说最重要。
现在用记事本或其他文本编辑工具打开 WinMD5.il 文件。(推荐使用增强性文本编辑工具,笔者使用 EmEditor)
这就是反编译的代码文件,在这里可以翻译源字符串,修改字体,调整控件,甚至修改其他代码(如果您懂这些语言代码)
首先查找“ldstr”,这个字串后面跟随双引号中的内容基本都是需要翻译的,例如本例:
ldstr     "Currently Processing:"
ldstr     "&File"
ldstr     "&Open File..."
ldstr     "Open &MD5 File..."
有些 .NET 程序会有“ldstr bytearray(XXX XXX XXX)”的语句代码,这括号 ( ) 中的 XXX 等字符有些是以 Unicode 编码显示。这就需要一些转换编码的工具自己手动来转换显示为正常字串,然后自行修改,再以 Unicode 编码填写回来,本例中没有出现,所以暂略,以后再行补充。
注意:ldstr 后若跟随这类字串,则不能汉化/翻译,因为这些是控件名称,这需要您准确的判断,如本例中的:
ldstr     "webLink"
ldstr     "currentlyProcessingLabel"

【2.字体修改】
那么翻译完之后,由于源程序的字体有时并不适合中文用户阅读,那么哪些是字体呢?幸好,这个 il 反编译代码文件中提供了字体名称和字号大小,也是跟随于 ldstr 之后,本例中找到如下两种字体:
ldstr     "Courier New"
ldc.r4   8.25
ldstr     "Microsoft Sans Serif"
ldc.r4   12.
对字体名称熟悉的朋友一下可以看出上述两个字串就是两种字体命名,而下面紧跟的“ldc.r4 8.25”和“ldc.r4 12.”就是字号大小尺寸。那么我们可以将上述的“Courier New”和“Microsoft Sans Serif”都改为“宋体”,紧跟的字号改为“9”,至于“12”是大字体可以保留不变。当然您也可以修改为在 2K/XP 上字体较美观的“Tahoma”8 号字。(Tahoma 8 号字与 宋体 9 号字在 2K/XP 上基本大小等同)
ldstr     "宋体"
ldc.r4   9
ldstr     "宋体"
ldc.r4   12.

【3.重新编译】
翻译完这份 il 代码文件之后,就要重新将代码编译为 exe (或 dll)文件了,那么现在需要用到 .NET Framework 安装后系统 Windows 目录下“Microsoft.NET”文件夹的子目录中去寻找到 ilasm.exe 这个文件,注意:这个是编译程序,比反编译程序 ildasm.exe 少一个 d ,找到后也将其复制到 WinMD5 软件目录内。
现在以 控制台 窗口启动到当前目录。(开始菜单“运行”,输入 cmd 确定启动后,用 cd 命令转到当前目录,也可以自注册表中修改文件夹右键菜单,加上一个“命令提示符启动”的功能,此处略)
好了,现在了解一下 ilasm.exe 的命令方式和参数:

ilasm xxx.il (注意空格)
此命令表示将 MSIL 文件 xxx.il 汇编生成 xxx.exe 可执行文件
ilasm xxx.il /dll (注意空格)
此命令表示将 MSIL 文件 xxx.il 汇编生成 xxx.dll 扩展库文件
ilasm xxx.il /output:test.exe (注意空格)
此命令表示将 MSIL 文件 xxx.il 汇编生成以 test 为新名称的 test.exe 可执行文件
ilasm xxx.il /output:test.dll (注意空格)
此命令表示将 MSIL 文件 xxx.il 汇编生成以 test 为新名称的 test.dll 扩展库文件

本例为 exe 文件,那么我们将 ilasm.exe 复制到 WinMD5 目录后,启动控制台窗口以如下命令编译:
ilasm WinMD5.il /output:000.exe
回车之后就会在当前目录下创建了一个新的 000.exe 文件,现在双击执行如图(3),这是汉化/翻译了部分字串后重新汇编的程序界面:
[attachmentid=15253]

【4.资源重组】
程序执行正常,界面也汉化/翻译为中文了,那么有朋友会发现:程序的图标,以及右键“属性”中的“版本”信息却没有了?用资源编辑类工具 Resource Hacker 打开原版程序一看,可以看到“图标/图标组/版本”等内容,那么这些内容怎么找到,再重新加入汉化/翻译并重新编译的 exe 文件中呢?别担心,现在就来告诉您如何用 Resource Hacker 帮您重组资源加上原版的图标和版本信息。
记得在我们用 ildasm.exe 对原版反编译之后得到的三个文件吗?
WinMD5.il
WinMD5.res
WinMD52.WinMD5Form.resources
我上文曾说过“以上三个文件,其中 WinMD5.il 和 WinMD5.res 对于我们汉化来说最重要”这句话,您可能已猜到了,没错,图标和版本等信息就在 WinMD5.res 这个文件中,现在用 Resource Hacker 来重新添加这些资源进去,借用 CS 游戏的一句“follow me”,跟着我以下列方法做:

用 Resource Hacker 打开汉化/翻译后重新编译过的 000.exe 资源框一片空白,没关系,点菜单“操作”(这里以 世纪主页上吕老大汉化的 Resource Hacker 3.4.0.79 为例),再选择“添加一个新资源”,在弹出界面中选“打开新资源文件”,找到 WinMD5.res 这个文件后打开,先选中“图标组”中“32512”下的“0”资源,然后点击“添加资源”即可,如图(4):
[attachmentid=15254]
现在 Resource Hacker 资源框树状列表中已有了图标信息了,我们再点菜单“操作”-“添加一个新资源”- 找到 WinMD5.res 打开后 重复上述操作添加“版本”资源即可看到版本信息也被加入了。
然后我们重新保存 000.exe 为 111.exe 即可,现在我们就可以看到程序原本自带的图标和版本信息了,并且运行正常,如图(5):
[attachmentid=15255]

【5.小结】
现在 WinMD5 2.05 这个免费的 .NET 小工具已经被汉化/翻译完毕并重新编译成功了。但现在很多 .NET 程序都有强签名/资源加密等等措施,对于这些 .NET 程序,微软的反编译工具 ildasm.exe 通常会拒绝打开。那么这就要用被修改/破解过的 ildasm.exe 和上文提到的 sn.exe 了,大家可以自网上找到,或到汉化工具 FTP 交流区寻找,限于篇幅,本文暂时不讨论 sn.exe 的使用,限于时间关系,笔者也暂时不附上“控件调整”的代码修改方法,以后有时间我再行补上。(其他知道的朋友也可以补充本文)
最后再次感谢 orochi_cn 兄为我们带来对 il 代码文件汉化/翻译后重新编译的方法和福音。

本文以上方法部分为笔者自网上查阅资料后总结,包括字体调整,控件位置代码调整的分析。允许自由转载,但请保留本文出处以及文章完整性。

风中决斗 2005.6.24 午

【6.补充】
拳拳 兄 和 orochi_cn 指出【4.资源重组】中不需要用编辑工具来添加资源,也可能出现问题,正确用法应该是使用 ilasm 的命令来添加所有资源,示例命令如下:
ilasm xxx.il /res:xxx.res /output:test.exe (注意空格)
此命令表示将 MSIL 文件 xxx.il 重新编译输出为 test.exe 文件并附加所有资源

续篇【.NET 程序初级汉化流程一例2:控件调整】见这里:
http://bbs.hanzify.org/index.php?showtopic...ndpost&p=220381

有关 sn.exe 对具有强名称签名的 .net 程序去除签名和重新签名的使用方法见这里:
http://bbs.hanzify.org/index.php?showtopic...ndpost&p=247758
Nearby or far apart, friends are always close in heart.......
离线zhansh

发帖
1058
金钱
10
威望
1
只看该作者 1 发表于: 2005-06-24
好文章,感谢决斗兄和 orochi_cn 兄带来 。NET 程序汉化的方法和福音!
离线xiaosd

发帖
249
金钱
0
威望
0
只看该作者 2 发表于: 2005-06-24
写的真详细~~感谢~~

ps:楼上兄台江苏哪里人氏的?
你很聪明,可总是浪费太多的时间,你太贪玩;你很够朋友,可你做事不稳重,象孩子一样,缺乏理性和稳重;你很矛盾,明知道有些时候你要收敛,要改变,可你控制不住自己,对很多东西都抱有太多幻想!你是XiaoSD!为了明天你要努力!休息了!揽活做东东了!谁来?

www.china-army.cn
离线xxd
发帖
472
金钱
0
威望
0
只看该作者 3 发表于: 2005-06-24
写得好啊!
刚才我把所有工具下载下来测试,确实不错。在测试过程中,我发现 il 文件中的可翻译字串可以使用 Passolo 进行提取,这样可以大幅提高翻译效率。
欢迎访问我的Blog
来看看,提提意见吧。

User Posted Image
离线拳拳

发帖
1879
金钱
0
威望
0
只看该作者 4 发表于: 2005-06-24
好!写得很详细。
补充一点:不需使用Resource Hacker添加资源,使用
“ilasm.exe ?????.il /resource:?????.res”命令就可以了。
离线restools

发帖
2848
金钱
1430
威望
143
只看该作者 5 发表于: 2005-06-24
好文章,还没时间试验,我想,做一个小工具一条龙处理,应该比较简单得多。
我的BLOG:   http://restools.hanzify.org (Inno Setup 增强版, 插件 发布站点)
离线决斗
发帖
2068
金钱
0
威望
0
只看该作者 6 发表于: 2005-06-24
QUOTE(xxd @ 2005年06月24日 16时26分)
写得好啊!
刚才我把所有工具下载下来测试,确实不错。在测试过程中,我发现 il 文件中的可翻译字串可以使用 Passolo 进行提取,这样可以大幅提高翻译效率。
[snapback]220143[/snapback]


赶快请 xxd 兄贴上 passolo 对 il 文件提取可翻译字串的 “文本解析规则” 共享!

QUOTE(拳拳 @ 2005年06月24日 18时18分)
好!写得很详细。
补充一点:不需使用Resource Hacker添加资源,使用
“ilasm.exe ?????.il /resource:?????.res”命令就可以了。
[snapback]220171[/snapback]


多谢 拳拳 兄告知,我对 ilasm 汇编文件时的命令还不熟悉,这下方便多了,无需劳动更多工具来重组文件的资源

QUOTE(restools @ 2005年06月24日 18时43分)
好文章,还没时间试验,我想,做一个小工具一条龙处理,应该比较简单得多。
[snapback]220176[/snapback]


阿信 终于出现了,ilasm.exe 在 命令提示符 下运行操作也稍嫌麻烦了点,期望能做个 GUI 给它,期待这个“一条龙处理的小工具”能够与广大汉化人见面,那样操作上就方便许多。
Nearby or far apart, friends are always close in heart.......
离线xxd
发帖
472
金钱
0
威望
0
只看该作者 7 发表于: 2005-06-24
QUOTE(决斗 @ 2005年06月24日 18时58分)
QUOTE(xxd @ 2005年06月24日 16时26分)
写得好啊!
刚才我把所有工具下载下来测试,确实不错。在测试过程中,我发现 il 文件中的可翻译字串可以使用 Passolo 进行提取,这样可以大幅提高翻译效率。
[snapback]220143[/snapback]


赶快请 xxd 兄贴上 passolo 对 il 文件提取可翻译字串的 “文本解析规则” 共享!

QUOTE(拳拳 @ 2005年06月24日 18时18分)
好!写得很详细。
补充一点:不需使用Resource Hacker添加资源,使用
“ilasm.exe ?????.il /resource:?????.res”命令就可以了。
[snapback]220171[/snapback]


多谢 拳拳 兄告知,我对 ilasm 汇编文件时的命令还不熟悉,这下方便多了,无需劳动更多工具来重组文件的资源

QUOTE(restools @ 2005年06月24日 18时43分)
好文章,还没时间试验,我想,做一个小工具一条龙处理,应该比较简单得多。
[snapback]220176[/snapback]


阿信 终于出现了,ilasm.exe 在 命令提示符 下运行操作也稍嫌麻烦了点,期望能做个 GUI 给它,期待这个“一条龙处理的小工具”能够与广大汉化人见面,那样操作上就方便许多。
[snapback]220178[/snapback]



效果如图所示:

[attachmentid=15258]

规则如下:

[attachmentid=15259]

说明,这个规则是根据决斗兄文章中所举程序来制作的。这里仅提供一种处理的思路,也许其他的程序会稍有不同,到时再根据其情况作出修改。
附件: getstr.rar (0 K) 下载次数:52
欢迎访问我的Blog
来看看,提提意见吧。

User Posted Image
离线决斗
发帖
2068
金钱
0
威望
0
只看该作者 8 发表于: 2005-06-24
好,多谢 徐兄 发上 il 文件文本解析规则。现在方便多了。试了两个 .net 小工具,好象都可以使用,ldstr 到 引号 之间的空格数似乎相同。
Nearby or far apart, friends are always close in heart.......
离线orochi_cn
发帖
10
金钱
0
威望
0
只看该作者 9 发表于: 2005-06-24
资源一定要用ilasm添加,否则某些情况下会出问题的。