AMOS Pro コンパイラーに同梱されていた古い Amiga BASIC 言語である AMOS Pro 用の拡張子で圧縮されたデータ ファイルを解凍しようとしています。私はまだプログラミング言語を持っており、コンプレッサーとデコンプレッサにアクセスできますが、C を使用してファイルを解凍しようとしています。最終的には、Amiga を使用することなく最新のハードウェアでこれらのファイルを表示できるようにしたいと考えています。まずエミュレータ。
ただし、コンプレッサーがどのように機能したかについてのドキュメントがないため、その動作を監視するだけでリバース エンジニアリングを試みています。これが私がこれまでに得たものです。
これは未加工のファイル (ASCII) です。
AABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZ
圧縮されたバージョン (16 進数) は次のとおりです。
D802C6B5
05048584
4544C5C4
2524A5A4
6564E5E4
15149594
5554D5D4
3534B591
00000007
AD763363
00000051
さまざまなファイルをテストした結果、いくつかの洞察が得られました。
- 最後の 4 バイトは元のファイルのサイズです。
- ファイルはビット ストリームとして機能しているように見えるので、バイト境界は重要ではありません (ASCII コードがいくつかのファイルに表示され、それらがバイト境界に揃えられていないのを見たので、これを言います)。
- ファイル内のすべてのビットが逆に格納されます。
最初の 4 バイトは、シーケンスの長さを表しているようです。上記の例では、値0xD8
は11011000
バイナリです。それをミラーリングすると(ビットが逆になります)00011011
、0x1B
16進数または10進数で27になります。それはシーケンスの長さと一致します。
しかし、私はこれ以上進歩していません。これは標準の圧縮アルゴリズムのように見えますか? 次に何を試しますか?