Reversing Native Libraries

支持 HackTricks

更多信息请查看: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html

Android 应用可以使用本地库,通常用 C 或 C++ 编写,以满足性能关键任务的需求。恶意软件创建者也使用这些库,因为它们比 DEX 字节码更难以反向工程。该部分强调针对 Android 的反向工程技能,而不是教授汇编语言。提供 ARM 和 x86 版本的库以确保兼容性。

关键点:

  • Android 应用中的本地库:

  • 用于性能密集型任务。

  • 用 C 或 C++ 编写,使反向工程具有挑战性。

  • .so(共享对象)格式存在,类似于 Linux 二进制文件。

  • 恶意软件创建者更喜欢本地代码以增加分析难度。

  • Java 本地接口 (JNI) 和 Android NDK:

  • JNI 允许在本地代码中实现 Java 方法。

  • NDK 是一组特定于 Android 的工具,用于编写本地代码。

  • JNI 和 NDK 将 Java(或 Kotlin)代码与本地库连接起来。

  • 库加载与执行:

  • 使用 System.loadLibrarySystem.load 将库加载到内存中。

  • 在库加载时执行 JNI_OnLoad。

  • Java 声明的本地方法链接到本地函数,从而启用执行。

  • 将 Java 方法链接到本地函数:

  • 动态链接: 本地库中的函数名称匹配特定模式,允许自动链接。

  • 静态链接: 使用 RegisterNatives 进行链接,提供函数命名和结构的灵活性。

  • 反向工程工具和技术:

  • Ghidra 和 IDA Pro 等工具有助于分析本地库。

  • JNIEnv 对理解 JNI 函数和交互至关重要。

  • 提供练习以实践加载库、链接方法和识别本地函数。

资源:

支持 HackTricks

Last updated