2

たとえば、いくつかのパターンの逆アセンブリをテストすることにより、既にコンパイルされたファイルのアルゴリズムを識別する手法を知っている人はいますか?

私が持っているまれな情報は、ライブラリに Byte[] の内容を解凍する (エクスポートされていない) コードがあるということですが、それがどのように機能するかはわかりません。未知の方法で圧縮されていると思われるファイルがいくつかありますが、ファイルには圧縮ヘッダーやトレーラーが含まれていないように見えます。暗号化はないと思いますが、解凍方法がわからない限り、私には何の価値もありません。

私が持っているライブラリは、低容量ターゲット用の ARM9 バイナリです。

編集:これは可逆圧縮であり、バイナリ データまたはプレーン テキストを格納します。

4

5 に答える 5

3

IDA Pro のようなもので静的解析を行うか、GDB やエミュレーターにロードしてその方法でコードをたどることができます。データを XOR してアルゴリズムを隠している可能性があります。これは、損失の少ない優れた圧縮技術がすでに数多くあるためです。

于 2009-02-18T19:10:07.653 に答える
2

解凍アルゴリズムには、タイトなループでの大幅なループが含まれます。最初にループを探し始めるかもしれません (レジスターをデクリメントし、0 でない場合は逆方向にジャンプします)。

これは小さなターゲットであるため、手でデコードする可能性は十分にありますが、実際に掘り下げてみると、さまざまなプログラミング構造を自分で識別できることがわかります。

また、それを高水準言語に逆コンパイルすることを検討することもできます。これは、アセンブリよりも簡単ですが、コンパイル方法がわからない場合は依然として困難です。

http://www.google.com/search?q=arm%20逆コンパイラ

-アダム

于 2009-02-18T16:13:39.467 に答える
1

これを行う確実な方法は、ライブラリを逆アセンブルし、圧縮解除ルーチンのアセンブリ コードを読み取って (おそらくデバッガでステップ実行して)、ライブラリが何を行っているかを正確に確認することです。

ただし、圧縮ファイルのマジック ナンバーを調べることで、どのような種類の圧縮が使用されたかを把握できる場合があります。たとえば、 DEFLATEで圧縮されている場合、最初の 2 バイトは 16 進数になります78 9cbzip2の場合、42 5a; gzipの場合、1f 8b.

于 2009-02-20T16:11:32.483 に答える
0

アセンブリを表示して行うリバース エンジニアリングには、著作権の問題がある可能性があります。特に、解凍用のプログラムを作成するためにこれを行うことは、著作権の観点から、アセンブリを自分で使用するのと同じくらい悪いことです。しかし、後者ははるかに簡単です。したがって、独自の圧縮解除ユーティリティを作成できるようにすることが動機である場合は、持っているアセンブリを移植するだけの方がよいかもしれません。

于 2009-02-18T16:59:55.190 に答える
0

私の経験から、ほとんどの場合、ファイルは単純な古い Deflate を使用して圧縮されます。zlib を使用して、異なるオフセットから開始して、カスタム ヘッダーを補正することができます。問題は、zlib 自体が独自のヘッダーを追加することです。Python では (他の実装にもその機能があると思います)、zlib.decompress -15 を履歴バッファー サイズとして渡すことができます (つまり、zlib.decompress(data,-15))。 、zlib のヘッダーなし。

于 2009-02-18T20:41:40.570 に答える