-
-
关于ida找不到so,maps也找不到so,so藏在base.apk中,如果想用ida对so里面的方法进行动态调试,如何处理。
-
发表于:
2024-5-17 08:46
3473
-
关于ida找不到so,maps也找不到so,so藏在base.apk中,如果想用ida对so里面的方法进行动态调试,如何处理。
高手勿喷,这个简单的问题耽误了我一个小时,相信很多人都解决不了
发现一次很奇怪的的现象,本来想用ida调试一个so验证下崩溃地址偏移的问题,发现so库明明在项目中进来了加载,ida的module也找不到。明明System.loadLibrary("xxx");,
native方法也可以调用,但是/proc/mypid/maps中却找不到对应的so,ida也找不到
这种奇怪的现象并不常见,不知道是什么原因导致。这里在附件提供下apk样本。查看附件
那这种情况下,如果我想使用ida对so的方法进行调试,怎么办?以下是相关解决方案。
1 启动目标app,用frida attach方式启动frida注入到目标app,将目标方法的内存地址打印出来,这里的目的是为了打印出目标方法的内存地址
1 2 3 4 5 6 7 8 | function test1(){
var xxmodule = Process.findModuleByName( "libxxx.so" )
var button1FromJNImethod = xxmodule.findExportByName( "Java_com_example_unidbgandroid_MainActivity_button1FromJNI" );
console.log(JSON.stringify(xxmodule),JSON.stringify(button1FromJNImethod))
}
Java.perform(function(){
test1()
})
|
2 使用ida动态调试,attach方式进入对app的调试,在module处找到包名对应的base.apk,点击进入其汇编指令界面,其实这个so的内存地址映射到了base.apk里面了
3 双击base.apk,使用frida 打印出的方法地址,在ida中jump到指定的地址,发现是一堆code,没有识别为指令
在code处按p键转换为指令代码,发现正是要找的so库里面的方法。此时就可以在ida中打断点调试了
上传apk样本文件在附件
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!