Welcome 微信登录

首页 / 软件开发 / JAVA / Quartett!的二进制脚本分析

Quartett!的二进制脚本分析2011-10-28 javaeye RednaxelaFX我前两天在NetOA方面确实是有点懈怠了。不为别的,正是为了这篇将提到的脚本的分析。虽然没把分 析做彻底,不过我觉得现在已经足够使用,顺便拿出来说说。

上个周末,汉公突然跟我提起FFDSystem的话题,然后有人联系我做Quartett!的汉化。自从跟汉公和 明大合作参与汉化以来,我基本上就是做脚本处理的相关工作比较多;汉公解决破解的棘手问题,而明大 主要完成打包问题,也兼做脚本编辑器,视具体分工而定。这次也不例外,汉公主攻了资源文件的破解和 资源抽取,资源的打包还没做,脚本这块就暂时交给了我。一般,如果脚本是没经过处理的文本,那也就 没我什么事了;这次遇到的果然还是经过处理了的二进制脚本。

一拿到已经从Script.dat中提取出来的脚本文件,我吓了一跳:文件名居然都是MD5……汉公那边果然 还没把资源破解完善。不过没关系,只要文件内容是对的就能开工。可以确认的是,脚本(准确说是给到 我手上的脚本)的后缀名是tkn。

打开其中的第一个文件,0a69b4afebd6d64527a21e3f1aa993f9.tkn。内容如下:

Java代码

Offset01234567 89ABCDEF00000000 54 4F 4B 45 4E 53 45 5464 00 00 00 76 08 00 00 TOKENSETd...v...00000010 0C 00 00 00 85 23 00 0C00 00 00 81 62 61 73 65 ....?.....|ase00000020 5F 70 61 74 68 00 0C 0000 00 83 2E 2E 2F 00 16 _path.....?./..00000030 00 00 00 85 23 00 16 0000 00 81 69 6E 63 6C 75 ...?.....(nclu00000040 64 65 00 16 00 00 00 8353 63 72 69 70 74 2F 42 de.....ゴcript/B00000050 61 73 65 49 6E 73 74 7275 63 74 69 6F 6E 2E 74 aseInstruction.t00000060 78 74 00 20 00 00 00 816D 6F 74 69 6F 6E 00 20 xt. ...[otion. 00000070 00 00 00 81 4D 61 69 6E00 20 00 00 00 85 28 00 ...`ain. ...?.
读起来似乎很郁闷(?),其实看到有那么多ASCII字符我已经很开心了。可以辨认出最开头的 TOKENSET(但此时还无法判断那个d是什么)、ase_path、nclude等等。进一步观察可以发现那些看似被 剪掉了的字符都在,前面的base_path、include就是如此。编辑器里显示不出来只是因为大于0x7F的字节 被解释成双字节字符编码(DBCS)中一个双字节字符的首字节,也就是例如说0x81把base_path中的b (0x62)给“吃”了。

在上述截图范围内,我总共识别出了这些:base_path、include、Script/BaseInstruction.txt、 motion、Main等字串。观察它们前后的规律:这些字串总是以0结尾,是标准的C string;这些字串的前 面总是有一个大于0x7F的字节(留意到0x81和0x83),而在那个字节之前似乎总是有3个00字节,前面又 是一个非00的字节。

为了方便分析,我写了一个小程序来抽取出我感兴趣的信息,辅助分析。

对应上面内容而提出出来的内容:

(格式是:字符串起始地址 一个奇怪的数字 字符串之前的那个字节 字符串内容)

Java代码

0x1C 0xC 0x81 base_path0x2B 0xC 0x83 ../0x3B 0x16 0x81 include0x48 0x16 0x83 Script/BaseInstruction.txt0x68 0x20 0x81 motion0x74 0x20 0x81 Main