支持HackTricks的其他方式:
如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划arrow-up-right!
获取官方PEASS和HackTricks周边产品arrow-up-right
探索PEASS家族arrow-up-right,我们的独家NFTsarrow-up-right收藏品
加入 💬 Discord群arrow-up-right 或 电报群arrow-up-right 或在Twitter上关注我们 🐦 @carlospolopmarrow-up-right。
通过向HackTricksarrow-up-right和HackTricks Cloudarrow-up-right github仓库提交PR来分享您的黑客技巧。
WhiteIntelarrow-up-right 是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件的侵害。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
更多信息请查看:https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.htmlarrow-up-right
Android应用程序可以使用本地库,通常用C或C++编写,用于性能关键任务。恶意软件创建者也使用这些库,因为它们比DEX字节码更难逆向工程。本节强调针对Android定制的逆向工程技能,而不是教授汇编语言。提供ARM和x86版本的库以确保兼容性。
Android应用程序中的本地库:
用于性能密集型任务。
用C或C++编写,使逆向工程具有挑战性。
以.so(共享对象)格式找到,类似于Linux二进制文件。
.so
恶意软件创建者更喜欢本地代码以增加分析难度。
Java本机接口(JNI)和Android NDK:
JNI允许在本地代码中实现Java方法。
NDK是用于编写本地代码的Android特定工具集。
JNI和NDK将Java(或Kotlin)代码与本地库连接起来。
库加载和执行:
使用System.loadLibrary或System.load将库加载到内存中。
System.loadLibrary
System.load
在加载库时执行JNI_OnLoad。
Java声明的本机方法链接到本机函数,实现执行。
将Java方法链接到本机函数:
动态链接: 本地库中的函数名称与特定模式匹配,从而实现自动链接。
静态链接: 使用RegisterNatives进行链接,提供函数命名和结构的灵活性。
RegisterNatives
逆向工程工具和技术:
工具如Ghidra和IDA Pro有助于分析本地库。
JNIEnv对于理解JNI函数和交互至关重要。
JNIEnv
提供练习以实践加载库、链接方法和识别本机函数。
学习ARM汇编:
建议深入了解底层架构。
推荐来自Azeria Labs的ARM汇编基础知识arrow-up-right。
JNI和NDK文档:
Oracle的JNI规范arrow-up-right
Android的JNI技巧arrow-up-right
开始使用NDKarrow-up-right
调试本地库:
使用JEB反编译器调试Android本地库arrow-up-right
最后更新于1年前