精灵图形的一些帮助

逆向工程 数字取证 二进制格式
2021-06-14 05:39:26

我正在尝试从 1997 年一款名为 Swing(美国:Marble Master)的游戏中获取精灵。该文件名为NORMAL.SET,包含一组精灵。有一个名为 SHOWSET.EXE 的可执行文件,它在每个精灵上打印一个数字后显示整个集合。

还有一个文件叫做HINTERH.SWG(SWG 可能代表 SWING)。我能够弄清楚使用 TiledGGD 的文件类型是什么!它是没有标题的原始数据,大小为 640x480,16 bpp,大端,(A)RGB。请参阅下面的屏幕截图。

HINTERH.SWG 在 TiledGGD 开业

在 TiledGGD 中使用相同的设置,我得到了NORMAL.SET图像近似值下面是 SHOWSET.EXE 的输出(左),以及 TiledGGD 显示它的图像(右)。

在游戏和 TiledGGD 中显示的 NORMAL.SET

使用 SHOWSET.EXE 输出的屏幕截图,我能够接近用于 NORMAL.SET 中像素数据的编解码器(?正确术语?)。我相信它基于 16 位 ARGB1555,但仍然不同。下面您会看到从屏幕截图中提取的图像。我们称之为屏幕截图精灵。

从截图中提取的精灵

这些是 NORMAL.SET 的前 192 个字节

47 69 62 20 6D 69 72 20 27 6E 65 20 4B 75 67 65
6C 0A 00 1A 73 74 61 6E 64 61 72 64 00 00 00 00
00 00 00 00 9D 4F DD 32 00 00 00 00 68 27 01 00
14 00 01 0F 1E 00 1E 00 2C 03 00 00 03 00 00 00
00 00 00 00 03 00 0A 00 90 08 90 08 90 08 90 08 <1,2---
8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 03 00 0A 00
03 00 08 00 90 08 91 08 91 08 91 08 91 08 91 08
90 08 90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04
03 00 08 00 03 00 06 00 91 08 91 08 B2 08 B2 08
B2 08 B2 08 B2 08 B2 08 B2 08 91 08 90 08 8F 08
8E 08 6D 08 6C 04 6B 04 49 04 48 04 03 00 06 00
03 00 05 00 90 08 B2 08 B2 08 B3 08 B3 0C B3 0C

这些是屏幕截图精灵的前 192 个字节。

42 4D 50 07 00 00 00 00 00 00 46 00 00 00 38 00
00 00 1E 00 00 00 E2 FF FF FF 01 00 10 00 03 00
00 00 0A 07 00 00 3B 00 00 00 3B 00 00 00 00 00
00 00 00 00 00 00 00 7C 00 00 E0 03 00 00 1F 00
00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 <1---
00 00 00 00 00 00 00 00 00 00 90 08 90 08 90 08 <2---
90 08 8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 90 08 91 08 91 08 91 08 91 08 91 08 90 08
90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

您可以看到数据可能开始的点(箭头 1),您会看到类似的十六进制字符串90 08 90 08 90 08

您还看到截图精灵中的数据可能以 10 个字节对开始(箭头 2)。在 NORMAL.SET 中,您可以找到0A 00. 现在我读到了 RLE 并且有一些幻想,我可以看到 10 个字节对之间的链接0A 00,我可以将其转换为“黑色像素的十倍”。

我仍然很困惑为什么我在 NORMAL.SET 中看到两个蓝色精灵,而截图中只有一个蓝色球体。但这是我以后会关心的事情。

注意
在这一点上,我非常确定我走在正确的轨道上!我认为 RLE 解压缩是这里唯一缺少的东西,除了弄清楚数据从哪里开始以及标题应该是什么意思。也许它们对我来说甚至没有多大用处。

我不确定,如果我现在还有问题。如果没有人不同意,我会把这个留在这里,直到我弄清楚其余的,希望有一天,这对某人会有所帮助。我会在解开谜语后立即更新。

在此之前,如果您已准备好 RLE 的解决方案,请不要羞于发布 ;)

1个回答

快速答案是:

14 00是精灵的前两个字节。原始位图数据从偏移量 20 开始,在本例中为03 00 0A 00. 该文件是 RLE 编码的,03 00作为转义序列,0A 00并告诉我 20 个像素00 00(16 bpp) 跟随。

有了这些信息,我就能够对精灵组进行逆向工程。