逆向游戏图像文件,有人能给点提示吗?
我没有多少逆向经验,只搞过那种打包的,没弄过纯图像的,这个过程有点看不太懂,来请教下。
对象是 20 年前的 PC 游戏( 2D ),推测一个文件就是一个素材,这个素材大概是一个图像序列,因为是游戏素材,所以应该是支持透明的格式,但不清楚这个素材本身就是常用的动画序列格式(例如 gif ),还是纯粹的 N 张静态的图像。
下面是这个文件的结构
1 字节,magic number
1032 字节,不知道什么鬼,基本都是 00 00 00 00,偶尔有一个数字,数字大概代表的是第 x 张图像。感觉不是关键
4 个字节,表示次数 n,推测 n 就是图像的数量
28 个字节 * 次数 n,推测是文件头或者是什么,大概是这样的。
00 00 00 00 00 00 00 00 00 00 00 00 E8 FF FF FF DD FF FF FF 19 00 00 00 0E 00 00 00
不同的块各不相同,但总体来说是这种感觉,例如头 12 个字节都是 0,然后 8 个字节都是很大很大的数,之后 8 个字节都比较小。
4 个字节,可能是图像数量,不清楚
8 个字节,大概是下面这样的,有点像是长宽,但有时候又对不上,有时候一个很小的素材却有一个值高达 540
31 00 00 00 31 00 00 00
4 个字节,表示次数 m,和次数 n 相等,大概就是图像的数量
m 次:
4 个字节,块长度
N 个字节,块
4 个字节,块长度
N 个字节,块
逆向的时候,我并没有认真读每一行的代码,前边的就大致走了下,我是直接去看解析“块”的部分的。解“块”的顺序有点诡异,不是一个字节一个字节地读,是很跳跃的,有时候前进 4 个字节,有时候又回退 2 个字节,而且解出来的内容存放方式也有点诡异,大概是一个地方写一点数据,然后又跳到另一个地方继续写,大概像这样 xxxx 00 00 00 00 00 00......xxxx 00 00 00 00 00 有时候会接连着写新的数据,有时候又会跳得很远才写。而且在 od 里看,数据也不是用 00 来填充的。
总体来首,这些代码不算复杂,转换成高级语言问题不大,但问题是即便我把这些代码重新写一遍解开这些块后,我也不知道如何去阅读这些块,这些块到底是什么格式,需要补充什么文件头我都不知道,我推测游戏程序不会也没必要去补充文件头将这些图像变成完整的文件,直接在渲染的时候写死参数就好了。那么,这些参数是什么就很难找了,就算找到了,感觉可能也不好推测出其格式。
我现在最想知道的是如何确定这种图像的格式。对照过 bmp 和 png 的结构,感觉...不太像?但除了这两种我也想不出还有什么格式可以用了,实在没有经验。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.