逆アセンブラは、機械語をアセンブリ言語に変換するコンピュータ プログラムです。これは、アセンブラの逆の操作です。逆アセンブラの出力は、通常、アセンブラへの入力用ではなく、人間が読める形式にフォーマットされるため、逆アセンブラは主にリバース エンジニアリングツールとなります。一般的な用途としては、高水準プログラミング言語コンパイラの出力とその最適化の分析、元のソース コードが失われた場合の復元、マルウェア分析の実行、ソフトウェアの変更 (バイナリ パッチなど)、ソフトウェア クラッキングなどがあります。
逆アセンブラは、アセンブリ言語ではなく 高級言語を対象とする逆コンパイラとは異なります。
アセンブリ言語のソース コードでは、一般に定数とプログラマーコメントを使用できます。これらは通常、アセンブラーによってアセンブルされたマシン コードから削除されます。その場合、マシン コードで動作する逆アセンブラーは、これらの定数とコメントのない逆アセンブリを生成します。逆アセンブラーの出力は、注釈付きの元のソース コードよりも人間が解釈するのが難しくなります。一部の逆アセンブラーは、組み込みのコード コメント機能を提供しており、生成された出力には、呼び出された API 関数または呼び出された関数のパラメーターに関するコメントが追加されます。一部の逆アセンブラーは、ELFなどのオブジェクト ファイルに存在するシンボリック デバッグ情報を使用します。たとえば、IDA を使用すると、人間のユーザーは対話型セッションで値またはコード領域のニーモニック シンボルを作成できます。逆アセンブリ プロセスに適用される人間の洞察力は、コード作成プロセスにおける人間の創造性とよく似ています。
課題
バイナリ内の実行可能コードとデータを区別することが常に可能であるとは限りません。ELFやPEなどの一般的な実行可能形式では、コードとデータが別々のセクションに分離されますが、フラット バイナリではそうではないため、特定の場所に実行可能命令が含まれているのか、実行不可能なデータが含まれているのかが不明瞭になります。この曖昧さにより、逆アセンブリ プロセスが複雑になる可能性があります。
さらに、CPUは実行時に計算される動的ジャンプを許可することが多く、命令として実行される可能性のあるバイナリ内のすべての場所を特定することは不可能です。
多くのCISCアーキテクチャなどの可変幅命令を備えたコンピュータ アーキテクチャでは、同じバイナリに対して複数の有効な逆アセンブリが存在する場合があります。
逆アセンブラでは、静的分析では実行時の変更を考慮できないため、実行中に変更されるコードも処理できません。
暗号化、パッキング、難読化は、リバースエンジニアリングやクラッキングを阻止するためのデジタル著作権管理の一環として、特にコンピュータプログラムによく適用されます。これらの手法は、意味のある分析を開始する前に、まずコードを解凍または復号化する必要があるため、逆アセンブリにさらなる課題をもたらします。
逆アセンブラの例
逆アセンブラは、スタンドアロンまたは対話型のいずれかになります。スタンドアロンの逆アセンブラは、実行時にアセンブリ言語ファイルを生成し、それを検査することができます。対照的に、対話型の逆アセンブラは、ユーザーによる変更を即座に反映します。たとえば、逆アセンブラが最初にプログラムの一部をコードではなくデータとして扱う場合、ユーザーはそれをコードとして指定できます。逆アセンブルされたコードは即座に更新され、表示されるため、ユーザーは同じセッション中にコードを分析し、さらに変更を加えることができます。
対話型デバッガには、デバッグ中のプログラムの逆アセンブリを表示する何らかの方法が含まれています。多くの場合、同じ逆アセンブリツールがデバッガと一緒に配布されるスタンドアロンの逆アセンブラとしてパッケージ化されています。たとえば、GNU Binutilsの一部であるobjdumpは、対話型デバッガgdbに関連しています。[1]
- バイナリ忍者[2]
- デバッグ[3]
- インタラクティブ逆アセンブラ(IDA)
- ギドラ
- ヒュウ
- ホッパー分解装置[1]
- PEエクスプローラ逆アセンブラ[4]
- Netwide Disassembler (Ndisasm) は、Netwide Assembler (NASM) の補助ツールです。
- OLIVER ( CICS対話型テスト/デバッグ) には、アセンブラ、COBOL、PL/1用の逆アセンブラが含まれています。
- x64dbg は、動的逆アセンブリも実行する Windows 用デバッガーです。
- OllyDbgは32ビットのアセンブラレベルの解析デバッガーです。
- レーダー2
- Rizin [5]とCutter [6](Rizinのグラフィカルインターフェース)
- SIMON(バッチインタラクティブテスト/デバッグ)には、アセンブラ、COBOL、PL/1用の逆アセンブラが含まれています。
- Sourcerは、 1990年代にV Communicationsが開発したDOS、OS/2、Windows用のコメント付き16ビット/32ビット逆アセンブラである[7]
逆アセンブラとエミュレータ
動的逆アセンブラーをエミュレーターまたはハイパーバイザーの出力に統合して、マシン命令のリアルタイム実行をトレースし、行ごとに表示することができます。この設定では、逆アセンブラーは、逆アセンブルされたマシン コードとともに、各命令によって生じたレジスタ、データ、またはその他の状態要素 (条件コードなど) の変更を表示できます。これにより、問題解決のための強力なデバッグ情報が提供されます。ただし、特にプログラムの実行全体を通じてトレースがアクティブになっている場合は、出力サイズがかなり大きくなる可能性があります。これらの機能は、1970 年代初頭に OLIVER によってCICSデバッグ製品の一部として初めて導入され、現在はCompuwareの XPEDITER 製品に組み込まれています。
長さ分解器
長さ逆アセンブラは長さ逆アセンブラエンジン(LDE )とも呼ばれ、バイトシーケンス(命令)が与えられると、解析された命令が使用するバイト数を出力するツールです。x86アーキテクチャの注目すべきオープンソースプロジェクトには、ldisasm、[8]、 Tiny x86 Length Disassembler [9] 、Extended Length Disassembler Engine for x86-64 [10]などがあります。
参照
参考文献
- ^ ab “Hopper”。2022年1月8日時点のオリジナルよりアーカイブ。2022年1月25日閲覧。
- ^ “Binary Ninja”. 2022年1月24日時点のオリジナルよりアーカイブ。2022年1月25日閲覧。
- ^ ポール、マティアス R. (1997-07-30)。 「Kapitel II.5. Allgemeines: Undokumentierte Möglichkeiten von DEBUG」 [文書化されていない DEBUG の機能]。 NWDOS-TIP — Novell DOS 7 に関するヒントとコツ、詳細、バグ、回避策を含む Blick です。 MPDOSTIP (ドイツ語) (第 3 版)。 2017-09-10 のオリジナルからアーカイブ。2014 年 9 月 6 日に取得。(注: NWDOSTIP.TXT はNovell DOS 7およびOpenDOS 7.01に関する包括的な作業であり、多くの文書化されていない機能と内部の説明が含まれています。これは、2001 年まで維持され、当時多くのサイトで配布されていた、著者のさらに大規模な MPDOSTIP.ZIP コレクションの一部です。提供されているリンクは、HTML に変換された NWDOSTIP.TXT ファイルの古いバージョンを指しています。)
- ^ 「PEExplorer Windows 逆アセンブラー (Win 32 ビット プログラム EXE DLL OCX、コード バイナリ分析ツール用)」 。 2022 年 4 月 25 日閲覧。
- ^ “Rizin”. 2023年11月28日時点のオリジナルよりアーカイブ。2023年12月9日閲覧。
- ^ “Cutter”. 2023年11月28日時点のオリジナルよりアーカイブ。2023年12月9日閲覧。
- ^ Sourcer - コメント付き逆アセンブラー(1989年9月版)。V Communications, Inc. 1988年。部品番号S0989-164 。 2019年12月21日閲覧。
- ^ “ldisasm”. GitHub . 2020年10月28日時点のオリジナルよりアーカイブ。2020年2月26日閲覧。
- ^ “Tiny x86 Length Disassembler”. GitHub . 2020年10月31日時点のオリジナルよりアーカイブ。2019年12月10日閲覧。
- ^ “Extended Length Disassembler Engine for x86-64”. GitHub . 2020-10-08時点のオリジナルよりアーカイブ。2019-12-10に取得。
さらに読む
- Vinciguerra, Lori; M. Wills, Linda; Kejriwal, Nidhi; Martino, Paul; Vinciguerra, Ralph L. (2003)。「C++ および Java の逆アセンブリおよび逆コンパイル ツールを評価するための実験フレームワーク」。第10 回リバース エンジニアリング ワーキング カンファレンス、2003。WCRE 2003。議事録。pp. 14–23。doi :10.1109/ WCRE.2003.1287233。ISBN 0-7695-2027-8.S2CID 10398240 。
- Schwarz, Benjamin; Debray, Saumya; Andrews, Gregory (2002)。「実行可能コードの逆アセンブリの再考」。リバースエンジニアリングに関する第 9 回ワーキング カンファレンス (WCRE) の議事録。アリゾナ大学コンピュータ サイエンス学部: 45–54。CiteSeerX 10.1.1.85.6387 。
外部リンク
- ウィキブックの x86 逆アセンブラーのリスト
- 分解に関する変換Wiki
- Boomerang 汎用的でオープンソースの再ターゲット可能なマシンコードプログラムの逆コンパイラ
- オンライン逆アセンブラは、 Wayback Machineに 2012-04-26 にアーカイブされています。arms 、mips、ppc、x86 コードの無料オンライン逆アセンブラです。
