6

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 バイトは、シーケンスの長さを表しているようです。上記の例では、値0xD811011000バイナリです。それをミラーリングすると(ビットが逆になります)000110110x1B16進数または10進数で27になります。それはシーケンスの長さと一致します。

しかし、私はこれ以上進歩していません。これは標準の圧縮アルゴリズムのように見えますか? 次に何を試しますか?

4

1 に答える 1

12

ここに投稿したように、圧縮機能は「スカッシュ」と呼ばれ、AMOS Pro の機能部分です。

そのため、次の攻撃方法のいずれかを試すことをお勧めします。

  • 出力を分析してアルゴリズムをリバース エンジニアリングします。これは実行可能なオプションではありません時間を無駄にするだけです。
  • AMOS Pro の unsquash 関数のソース コードを読んで、注釈を付けて、理解する
  • AMOS Pro の作者に連絡する

ソースコードを読む

AMOS Pro のソース コードは明らかに現在パブリック ドメインにあり、ここで見つけることができます。

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

68000 のアセンブリ コードとかなりの数のコンパイル済みオブジェクト ファイルで構成されています。

unsquash 関数は、ファイルの+header.s1061 行目以降にあります。少なくとも良いエントリレジスタ値を除いて、文書化されていません。それほど大きな関数ではないように見えるので、試してみる価値があるかもしれません。

基本的な 68000 マシン コードを持っているか、取得/学習する必要があります。システム ライブラリなどを呼び出しているようには見えず、メモリ上で直接動作しているように見えるだけです。これは、これが実際に実行可能であることを示唆しています (つまり、コードを理解しています)。それでも、人生で68000コードを書いたり読んだりしたことがないので、何を知っていますか。

AMOS Pro の作者に連絡する

AMOS Pro の作成者は François Lionet であり、ユーザー ガイドで明らかなように、彼は 90 年代半ばにClickteamを設立し、ゲームおよびマルチメディア作成ソフトウェアを作成しました。彼はまだその会社にいるようで、AMOS Pro を調査している他のユーザーのフォーラムへの投稿によると、彼は喜んで電子メールに返信しているようです。残念ながら彼のメールアドレスはわかりませんが、上記の Clickteam の Web サイトを参考にしてください。

于 2014-02-08T20:07:43.273 に答える