hacktricks/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md

3.6 KiB
Raw Blame History

ネイティブライブラリのリバースエンジニアリング

{{#include ../../banners/hacktricks-training.md}}

詳細情報は次を確認してください: 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関数と相互作用を理解するために重要です。
  • ライブラリのロード、メソッドのリンク、ネイティブ関数の特定を練習するための演習が提供されています。

リソース:

{{#include ../../banners/hacktricks-training.md}}