4.4 KiB
反向工程本地库
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS&HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @carlospolopm。
- 通过向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汇编基础知识。
-
JNI和NDK文档:
-
调试本地库:
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS&HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。