登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
资源来自互联网分享,侵权请告知删除。
如链接失效,请联系管理

IDA 动态调试Android8 SO .init .init_array JNI_Onload
前言网上已经有很多在Android4中IDA如何调试.init .init_array JNI_Onload等文章,比如下面给出的参考,写的也非常详细,所以今天我们不讨论Android4。我们以Android8为例子。 查找关键函数的偏移地址想要调试.init .init_array必须找到, call_function函数中的function(g_argc, g_argv, g_envp);地址,和 LoadNativeLibrary函数中int version = (*jni_on_load)(this, nullptr);地址, 这两个地址分别去调用了.init .init_array函数和JNI_Onload函数。 先将两个相关的so拷贝到电脑上使用ida打开(我们的应用是以32位模式强制运行) [Bash shell] 纯文本查看 复制代码 adb pull /system/lib/libdvm.so
adb pull /system/bin/linker
注意⚠️:我的手机是Pixel 安卓系统是8.0 ,确没有这个文件/system/lib/libdvm.so,只有一个/system/lib/libarm.so 我们先来看call_function函数中的调用代码
[C] 纯文本查看 复制代码 static void call_function(const char* function_name __unused,
linker_ctor_function_t function,
const char* realpath __unused) {
if (function == nullptr || reinterpret_cast<uintptr_t>(function) == static_cast<uintptr_t>(-1)) {
return;
}
TRACE("[ Calling c-tor %s @ %p for '%s' ]", function_name, function, realpath);
function(g_argc, g_argv, g_envp);
TRACE("[ Done calling c-tor %s @ %p for '%s' ]", function_name, function, realpath);
}
可以看到这里有相关的字符串可以让我们在IDA中检索
[ Calling c-tor %s @ %p for '%s' ]
在IDA中检索如下
检索到字符串后,进入他的交叉引用处,可以看到相关代码,从字符串看得出这里就是我们对应的调用处,这段汇编还是比较简单的,图中高亮处即我们的调用处。它的偏移地址为0x00013598。
同样的再来看看JNI_Onload的调用代码
作者:Sharkchilli
链接:https://www.jianshu.com/p/4be6d14946bd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
下载地址:
|