Reversing Native Libraries
最后更新于
最后更新于
WhiteIntel 是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件的侵害。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎:
更多信息请查看: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文档:
调试本地库:
WhiteIntel 是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件的侵害。
WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。
您可以访问他们的网站并免费尝试他们的引擎: