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

时间:2014-02-08 19:27:42

标签: algorithm binary compression amiga

我正在尝试解压缩最初使用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。这匹配序列长度。

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

1 个答案:

答案 0 :(得分:12)

当你发布here时,压缩函数被称为“squash”,是AMOS Pro的一个功能部分。

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

  • 通过分析其输出来反向设计算法:这肯定不是一个可行的选项。你只会浪费时间。
  • 阅读,注释,了解AMOS Pro中的unsquash功能的源代码
  • 请联系AMOS Pro的作者

阅读源代码

AMOS Pro的源代码现在为apparently in the public domain,可在此处找到:

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

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

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

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

请联系AMOS Pro的作者

AMOS Pro的作者是FrançoisLionet,正如User Guide所显示的那样,他在90年代中期创立了Clickteam来制作游戏和多媒体制作软件。他似乎仍然坐在那家公司,根据其他人的论坛帖子,他们似乎很愿意回复电子邮件。可悲的是,我不知道他的电子邮件,但上面的Clickteam网站应该给你一个起点。