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

Ant*_*Ant 6 compression algorithm binary amiga

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

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

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

AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)

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

D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ang*_*son 12

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

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

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

阅读源代码

AMOS Pro的源代码现在显然属于公共领域,可在此处找到:

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

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

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

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

联系AMOS Pro的作者

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