同样在调试的ida中下好断点, 第2个断点就是调用.init_array数组的代码 然后按F9,注意观察寄存器窗口, 当有显示调试的是你想要断的so的时候开始注意 当断点断在BLX R4的时候,下一步就是调用init_array数组了, 所以F7跟进去 在直接把我们想要分析的so拖到ida分析进行验证, 代码一样, 说明我们成功的断点在了init...
JNI_Onload()函数因为有符号表所以非常容易找到,但是.init_array里的函数需要自己去找一下。首先打开view ->Open subviews->Segments。然后点击.init.array就可以看到.init_array中的函数了。 但一般当我们使用ida进行attach的时候,.init_array和JNI_Onload()早已经执行完毕了,根本来不急调试。这时候我们可以使用jd...
同样在调试的ida中下好断点, 第2个断点就是调用.init_array数组的代码 然后按F9,注意观察寄存器窗口, 当有显示调试的是你想要断的so的时候开始注意 当断点断在BLX R4的时候,下一步就是调用init_array数组了, 所以F7跟进去 在直接把我们想要分析的so拖到ida分析进行验证, 代码一样, 说明我们成功的断点在了...
F7进入即可调试.init .init_array
IDA脱壳定位 init 或init_array函数解析 定位 init 或init_array函数 _Z17dvmLoadNativeCodePKcP6ObjectPPc ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);handle = dlopen(pathName, RTLD_LAZY);//此so没有被加载过,调用dlopen加载此so dvmChangeStatus(self, oldStatus);dlopen函数源码: void...
在Android so文件的.init、.init_array上和JNI_OnLoad处下断点 .init_array段构造函数调用地址(RVA)。 再开一个IDA对该so库文件进行Android应用的附加调试,设置IDA调试时断在so库文件加载的位置,更保险的方法就是在system/lib...一般在so文件的.init段和JNI_OnLoad处。因此,我们在逆向分析各种厂商的加固so时,需...
1. 以调试的方式启动程序(这样可以在jni_onload ,init_array 处断下来) adb shell am start -D -n com.yaotong.crackme/.MainActivity 2. 在IDA的主目录 dbgsrv 目录下 ,找到 android_server,拷贝到手机的 data/local/tmp/ 目录下 adb push (android_server的目录) /data/local/tmp ...
我们知道so文件在被加载的时候会首先执行.init_array中的函数,然后再执行JNI_OnLoad()函数。JNI_Onload()函数因为有符号表所以非常容易找到,但是.init_array里的函数需要自己去找一下。首先打开view ->Open subviews->Segments。然后点击.init.array就可以看到.init_array中的函数了。
这里举个例子,比如我们要快速定位到init_array函数 通过上面的代码就可以直接定位到init_array了,真滴是又简单,又方便。我在这里可能至少能剩下1-2分钟的时间/每次调试,而且这里只是举例init_array, 我们也可以这样去调试我们要调试的函数 2、保存日志、函数名字 我们分析的过程中,会在汇编指令做个中记录日志,比如...
.init->->.init array->->JNI_Onload->->java_com_XXX; 还有我们在脱壳的过程中会在一些系统级的.so中下断点比如:fopen,fget,dvmdexfileopen,等等 而.init以及.init_array一般会作为壳的入口地方,那我们索性叫它外壳级的.so文件 这里归纳为三类: ...