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

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

2024-5-17 08:46
2574

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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