Reversing Native Libraries

HackTricksをサポートする

詳細情報は次を確認してください: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html

Androidアプリは、パフォーマンスが重要なタスクのために通常CまたはC++で書かれたネイティブライブラリを使用します。マルウェア作成者もこれらのライブラリを使用します。なぜなら、DEXバイトコードよりもリバースエンジニアリングが難しいからです。このセクションは、アセンブリ言語を教えるのではなく、Androidに特化したリバースエンジニアリングスキルを強調しています。互換性のためにARMおよびx86バージョンのライブラリが提供されています。

重要なポイント:

  • Androidアプリのネイティブライブラリ:

  • パフォーマンス集約型タスクに使用されます。

  • CまたはC++で書かれており、リバースエンジニアリングが難しいです。

  • Linuxバイナリに似た.so(共有オブジェクト)形式で見つかります。

  • マルウェア作成者は分析を難しくするためにネイティブコードを好みます。

  • Javaネイティブインターフェース(JNI)とAndroid NDK:

  • JNIはJavaメソッドをネイティブコードで実装することを可能にします。

  • NDKはネイティブコードを書くためのAndroid特有のツールセットです。

  • JNIとNDKはJava(またはKotlin)コードとネイティブライブラリを橋渡しします。

  • ライブラリの読み込みと実行:

  • ライブラリはSystem.loadLibraryまたはSystem.loadを使用してメモリに読み込まれます。

  • JNI_OnLoadはライブラリの読み込み時に実行されます。

  • Javaで宣言されたネイティブメソッドはネイティブ関数にリンクし、実行を可能にします。

  • Javaメソッドをネイティブ関数にリンクする:

  • 動的リンク: ネイティブライブラリ内の関数名は特定のパターンに一致し、自動リンクを可能にします。

  • 静的リンク: RegisterNativesを使用してリンクし、関数名や構造に柔軟性を提供します。

  • リバースエンジニアリングツールと技術:

  • GhidraやIDA Proなどのツールはネイティブライブラリの分析に役立ちます。

  • JNIEnvはJNI関数と相互作用を理解するために重要です。

  • ライブラリの読み込み、メソッドのリンク、ネイティブ関数の特定を練習するための演習が提供されています。

リソース:

HackTricksをサポートする

Last updated