首页
社区
课程
招聘
关于ida找不到so,maps也找不到so,so藏在base.apk中,如果想用ida对so里面的方法进行动态调试,如何处理。
发表于: 2024-5-17 08:46 3473

关于ida找不到so,maps也找不到so,so藏在base.apk中,如果想用ida对so里面的方法进行动态调试,如何处理。

2024-5-17 08:46
3473

高手勿喷,这个简单的问题耽误了我一个小时,相信很多人都解决不了
发现一次很奇怪的的现象,本来想用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样本文件在附件


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 4
支持
分享
最新回复 (5)
雪    币: 3694
活跃值: (5925)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ida没法直接找到so是因为Manifest里面有android:extractNativeLibs="false",安装之后不会把so解压出来再load,导致没有so的路径所以没法直接点
2024-5-17 09:16
3
雪    币: 41
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
狄人3 ida没法直接找到so是因为Manifest里面有android:extractNativeLibs="false",安装之后不会把so解压出来再load,导致没有so的路径所以没 ...
谢谢大神指导
2024-5-17 09:26
0
雪    币: 129
活跃值: (4645)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
直接把so 复制到/data/app/包名/lib里面,就会优先加载这个目录里面的so,不用改包这么麻烦
2024-5-17 16:23
0
雪    币: 1223
活跃值: (4707)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
特征过去
2024-5-17 23:29
0
雪    币: 3700
活跃值: (4091)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还没遇到过,一般so文件在lib下面吧。
2024-5-18 10:38
0
游客
登录 | 注册 方可回帖
返回
//