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

4.4 KiB
Raw Blame History

反向工程本地库

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持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函数和交互至关重要。

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

资源:

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式