反向工程本地库
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
更多信息请查看: 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.loadLibrary
或System.load
将库加载到内存中。 - 在库加载时执行 JNI_OnLoad。
- Java 声明的本地方法链接到本地函数,从而实现执行。
- 将 Java 方法链接到本地函数:
- 动态链接: 本地库中的函数名称匹配特定模式,允许自动链接。
- 静态链接: 使用
RegisterNatives
进行链接,提供函数命名和结构的灵活性。 - 反向工程工具和技术:
- Ghidra 和 IDA Pro 等工具有助于分析本地库。
JNIEnv
对理解 JNI 函数和交互至关重要。- 提供练习以实践加载库、链接方法和识别本地函数。
资源:
- 学习 ARM 汇编:
- 建议深入了解底层架构。
- 推荐来自 Azeria Labs 的 ARM Assembly Basics。
- JNI 和 NDK 文档:
- Oracle 的 JNI 规范
- Android 的 JNI 提示
- 开始使用 NDK
- 调试本地库:
- 使用 JEB 反编译器调试 Android 本地库
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。