解码用过时语言压缩的文件



我正在尝试解压缩一个数据文件,该文件最初是用AMOS Pro的扩展名压缩的,AMOS Pro编译器附带了旧的Amiga BASIC语言。我仍然有编程语言,可以访问压缩器和解压缩器,但我正在尝试使用C来解压缩文件。我最终希望能够在现代硬件上查看这些文件,而不必首先使用Amiga模拟器。

然而,没有关于压缩机如何工作的文件,所以我试图仅从观察其行为来对其进行逆向工程。以下是我迄今为止的收获。

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

AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ

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

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

对各种文件的测试让我有了一些见解:

  • 最后4个字节是原始文件的大小
  • 该文件似乎起到了比特流的作用,所以字节边界并不重要(我这么说是因为我看到一些文件中出现了ASCII代码,它们没有与字节边界对齐)
  • 文件中的所有位都以相反的方式存储

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

然而,我没有取得任何进展。这看起来像标准的压缩算法吗?我下一步该怎么做?

正如您在这里发布的,压缩函数被称为"南瓜",是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网站应该会给你一个起点。

最新更新