目次
概要
Android アプリケーションの開発言語は Java ですが、Java 層のコードは逆コンパイルしやすく、C/C++ プログラムの逆コンパイルはより難しいため、現在、多くの Android アプリケーションのコア部分は NDK を使用して開発されています。NDK 開発を使用すると、C/C++ プログラムをコンパイルし、最終的に so ファイルを生成できます。so ファイルはバイナリ ファイルなので、直接解析することはできないため、逆コンパイル ツール IDA Pro を使用する必要があります。IDA Pro は、SO ファイルを逆アセンブルしてバイナリ コードをアセンブリ言語に変換し、IDA Pro の魔法の F5 機能を使用してアセンブリ言語を C/C++ プログラムに逆コンパイルすることもできます。
ダウンロード
リンク: Baidu Netdisk - リンクは存在しません パスワード: tvsn
代替リンク: Baidu ネットワーク ディスク、抽出コードの パスワードを入力してください: kljo
IDA_Pro_v7.0_Portable.zip をダウンロードするだけです。
インストール
直接解凍するだけです。
注: 緑色バージョンの解凍パスには中国語を含めることはできません。また、パスの長さは 72 文字を超えることはできません。(Pythonモジュール自体のバグ)
使用
ida64.exe をダブルクリックしてソフトウェア IDA Pro を開きます
私の理解によれば、逆コンパイルしたい so ファイルが arm64-v8a ディレクトリにある場合は、ida64.exe ファイルのみを開くことができ、逆コンパイルしたい so ファイルが armeabi ディレクトリにある場合は、ida しか開くことができません。 。EXE。しかし、ここでの私のテスト結果は次のとおりです。
ida64.exe : arm64-v8a ディレクトリにある so ファイルを開く (呼び出されたメソッド名が見つかる) のは正常ですが、armeabi ディレクトリにある so ファイルを開くのは正常ではありません (呼び出されるメソッド名が見つからない) );
ida.exe : arm64-v8a ディレクトリの so ファイルと armeabi ディレクトリの so ファイルを開くことは正常ではありません (呼び出されたメソッド名が見つかりません)。
したがって、私の現在の操作は、ダブルクリックして ida64.exe を開き、arm64-v8a ディレクトリ内の so ファイルを逆コンパイルすることです。
so ファイルを上の空の領域にドラッグし、「ELF64 for ARM64 (Shared object) [elf64.ldw]」オプションを選択して、「OK」ボタンをクリックします。
ダブルクリックして ida64.exe を開いたので、開く必要がある so ファイルは armeabi ディレクトリではなく arm64-v8a ディレクトリにあることに注意してください。(HelloWorld プロジェクトを例に挙げます)
しばらく待つと、soファイルを逆アセンブルしたアセンブリコードが表示されます。
表示する関数を見つけます (通常は、HelloWorld プロジェクトのstringFromJNI メソッドなど、プロジェクトで呼び出される最初の関数を見つけます)。
キーボードの F5 を押して、アセンブリ コードを C コードに変換します。
ソースコードは次のとおりです。