【.NET 程序初级汉化流程一例】

 

【.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)。

然后在菜单“文件”中点击“转储”,弹出“转储选项”对话框,将“编码”选中“Unicode”其余按默认值不变,见图(2)。

点击“确定”即可得到以下几个文件:
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),这是汉化/翻译了部分字串后重新汇编的程序界面:


【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):

现在 Resource Hacker 资源框树状列表中已有了图标信息了,我们再点菜单“操作”-“添加一个新资源”- 找到 WinMD5.res 打开后 重复上述操作添加“版本”资源即可看到版本信息也被加入了。
然后我们重新保存 000.exe 为 111.exe 即可,现在我们就可以看到程序原本自带的图标和版本信息了,并且运行正常,如图(5):


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

 

本文引自《汉化新世纪论坛》[ 作者: 决斗] 原文网址:http://www.hanzify.org/teach/index.php?Go=Show::444-1119628800

你可能感兴趣的:(【.NET 程序初级汉化流程一例】)