我正在尝试解压缩最初使用 AMOS Pro 扩展名压缩的数据文件,这是旧的 Amiga BASIC 语言,随 AMOS Pro 编译器一起提供。我仍然拥有编程语言并且可以访问压缩器和解压缩器,但我正在尝试使用 C 解压缩文件。我最终希望能够在现代硬件上查看这些文件,而不必求助于使用 Amiga先模拟器。
但是,没有关于压缩机如何工作的文档,所以我试图仅通过观察它的行为来对其进行逆向工程。这是我到目前为止所得到的。
这是一个原始文件(ASCII):
AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
这是压缩版本(十六进制):
D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
使用各种文件进行测试给了我一些见解:
- 最后 4 个字节是原始文件的大小。
- 该文件似乎用作位流,因此字节边界并不重要(我之所以这么说是因为我已经看到 ASCII 代码出现在一些文件中并且它们未与字节边界对齐)。
- 文件中的所有位都反向存储。
前 4 个字节似乎代表一个序列长度。在上面的例子中,值0xD8
是11011000
二进制的;镜像它(位是相反的),你会得到00011011
,它是0x1B
十六进制或十进制的 27。这与序列长度匹配。
但是,我没有取得任何进展。这看起来像标准压缩算法吗?我接下来要尝试什么?