`
bulote
  • 浏览: 1311055 次
文章分类
社区版块
存档分类
最新评论

一个最简单GAL游戏资源文件黑盒分析(一)

 
阅读更多

早就有人叫我写个封包分析教程

我今天有点时间写个

http://blog.csdn.net/luozhuang/archive/2010/12/31/6110010.aspx

游戏文件黑盒分析吧。

黑盒来源于软件测试词语http://baike.baidu.com/view/51274.htm

也就是我们不分析任何程序汇编。

三大妈有个封包分析组,也是类似的。黑盒分析下资源文件

工具 大家可以找自己喜欢二进制编辑工具 比如winhex

这个封包是最简单的,因为没有任何压缩。。。

分析文件名:日文原版script.dat 文件

没有装游戏这里可以下载:

http://hotfile.com/dl/100048813/d53730d/script.dat.html

0000h: 50 41 43 4B 44 41 54 2E 01 04 00 00 01 04 00 00 PACKDAT.........
0010h: 69 39 35 5F 30 31 2E 74 78 00 00 00 00 00 00 00 i95_01.tx.......
0020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030h: 40 C0 00 00 00 00 00 20 62 00 00 00 62 00 00 00 @...... b...b...
0040h: 69 39 35 5F 30 32 2E 74 78 00 00 00 00 00 00 00 i95_02.tx.......
0050h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060h: A4 C0 00 00 00 00 00 20 94 00 00 00 94 00 00 00 ....... ........

应该知道的:

游戏汉化中的一个重要的步骤是对资源的解包以及封包。

这个游戏引擎名叫InnocentGrey

前8个byte(0x0-0x7)
PACKDAT->magic
magic 作为识别该引擎的表示,因为很多游戏都采用.dat后缀名。

01 04 00 00 我们没有知道确切意思标记为Unkown 未知吧


后面又来个01 04 00 00 请大家看看winhex 数据解释器
代表32bit数据类型的1025
可能就是说这个包里面有1025个文件?
其实可以比较下Crass输出结果,这个文件解包以后有1025个文件,符合我们分析结果。


0010h: 69 39 35 5F 30 31 2E 74 78 00 00 00 00 00 00 00 i95_01.tx.......
0020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
很明显是文件名 不说了

0030h: 40 C0 00 00 这是什么呢
winhex 数据解释器 显示为32bit的 49216
这又是什么意思?
Alt+G 把这个数据扔进去看看
很明显 跳转到这里:
C020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
C030h: 0C F6 1E 00 00 00 00 20 E6 00 00 00 E6 00 00 00 ....... ........
C040h: 81 40 94 92 8D 9C 89 BB 82 B5 82 BD 8A D4 8B 7B .@.............{
C050h: 94 FC 90 E1 82 C6 8E 76 82 ED 82 EA 82 E9 88 E2 .......v........


81 40这里明显肯定这个值是偏移地址,而且是对应于文件开头偏移。
C语言有个fseek函数
fseek( stream, 偏移地址, SEEK_SET);

00 00 00 20 我们没有知道确切意思标记为Unkown 未知吧

62 00 00 00这两个我简单说明下
这个引擎存在压缩格式
遇到压缩算法就必须给出 压缩前长度和解压缩后长度。
类似这样的调用:
uncompress(uncompressbuf,compresslen,uncompresslen);


这个文件没有压缩,所以这两个值完全一样的。

这个封包经过分析以后 格式如下


文件头:
char [8];//"PACKDAT." 50 41 43 4B 44 41 54 2E
32bit ?;
32bit 索引数目;


索引:
char [32];
32bit 偏移地址;
32bit ?
32bit 压缩/解压缩后大小;
32bit 压缩/解压缩后大小;

压缩/解压缩后大小 我没有继续辨认,这个可以从其他文件辨认,压缩后大小必然小于解压缩后大小。

将32bit 这些转换成程序格式:


8bit char-〉BYTE
16bit-〉short
32bit-〉int

现在可以提取/写回这个封包了。不管写代码还是手工都可以试试看吧。

加密部分:

剧本部分

加密比较简单 Xor FF

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics