6

我正在尝试解压缩最初使用 AMOS Pro 扩展名压缩的数据文件,这是旧的 Amiga BASIC 语言,随 AMOS Pro 编译器一起提供。我仍然拥有编程语言并且可以访问压缩器和解压缩器,但我正在尝试使用 C 解压缩文件。我最终希望能够在现代硬件上查看这些文件,而不必求助于使用 Amiga先模拟器。

但是,没有关于压缩机如何工作的文档,所以我试图仅通过观察它的行为来对其进行逆向工程。这是我到目前为止所得到的。

这是一个原始文件(ASCII):

AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ

这是压缩版本(十六进制):

D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051

使用各种文件进行测试给了我一些见解:

  • 最后 4 个字节是原始文件的大小。
  • 该文件似乎用作位流,因此字节边界并不重要(我之所以这么说是因为我已经看到 ASCII 代码出现在一些文件中并且它们未与字节边界对齐)。
  • 文件中的所有位都反向存储。

前 4 个字节似乎代表一个序列长度。在上面的例子中,值0xD811011000二进制的;镜像它(位是相反的),你会得到00011011,它是0x1B十六进制或十进制的 27。这与序列长度匹配。

但是,我没有取得任何进展。这看起来像标准压缩算法吗?我接下来要尝试什么?

4

1 回答 1

12

正如您在此处发布的那样,压缩功能称为“squash”,是 AMOS Pro 的功能部分。

因此,我的建议是尝试以下攻击方式之一:

  • 通过分析其输出对算法进行逆向工程:这绝对不是一个可行的选择。你只会浪费时间。
  • 阅读、注释、理解AMOS Pro中的unsquash函数源码
  • 联系AMOS Pro的作者

阅读源代码

AMOS Pro 的源代码现在显然在公共领域,可以在这里找到:

http://www.pianetaamiga.it/downloads/AMOSPro_Sources.zip

它由 68000 个汇编代码和相当多的编译目标文件组成。

unsquash 函数可以在+header.s第 1061 行及以后的文件中找到。它没有记录,除了它的入口寄存器值,这至少是好的。它似乎不是一个非常大的功能,所以这可能值得一试。

您将需要拥有或获得/学习基本的 68000 机器代码。它似乎没有调用系统库或任何东西,似乎只直接在内存上操作,这表明这实际上是可行的(即理解代码)。尽管如此,我一生中从未编写或阅读过 68000 条代码,所以我知道什么。

联系AMOS Pro的作者

AMOS Pro 的作者是 François Lionet,正如用户指南所证明的那样,他在 90 年代中期创立了 Clickteam,以制作游戏和多媒体制作软件他似乎仍然在那家公司工作,根据其他人在论坛上发布的关于 AMOS Pro 的帖子,他似乎愿意回复电子邮件。遗憾的是,我不知道他的电子邮件,但上面的 Clickteam 网站应该可以为您提供一个起点。

于 2014-02-08T20:07:43.273 回答