我正在尝试解压缩最初使用AMOS Pro编译器附带的AMOS Pro(旧Amiga BASIC语言)扩展名压缩的数据文件。我仍然使用编程语言并可以访问压缩器和解压缩程序,但我正在尝试使用C解压缩文件。我最终希望能够在现代硬件上查看这些文件而无需使用Amiga首先是模拟器。
然而,没有关于压缩机如何工作的文档,所以我试图仅仅通过观察其行为来对其进行逆向工程。这是我到目前为止所做的。
这是一个原始文件(ASCII):
AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
这是压缩版本(十六进制):
D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
使用各种文件进行测试给了我一些见解:
前4个字节似乎代表序列长度。在上面的示例中,值0xD8
为二进制的11011000
;镜像它(位是反向的),你将获得00011011
,其中十六进制为0x1B
或十进制为27。这匹配序列长度。
但是,我没有取得任何进展。这看起来像标准压缩算法吗?接下来我该尝试什么?
答案 0 :(得分:12)
当你发布here时,压缩函数被称为“squash”,是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的作者是FrançoisLionet,正如User Guide所显示的那样,他在90年代中期创立了Clickteam来制作游戏和多媒体制作软件。他似乎仍然坐在那家公司,根据其他人的论坛帖子,他们似乎很愿意回复电子邮件。可悲的是,我不知道他的电子邮件,但上面的Clickteam网站应该给你一个起点。