ida调试so学习

复制android_server至目标设备

将ida的根目录下的dbgsrv文件夹中的android_server按照目标设备的架构选择对应版本

1
2
3
4
5
6
7
8
9
10
11
12
//复制到设备上
adb push android_server64 /data/local/tmp

//修改权限,使之能执行
chmod 777 /data/local/tmp/android_server64

//执行
cd /data/local/tmp
./android_server64

//转发端口
adb forward tcp:23946 tcp:23946

使用pm、am、启动android_server64

pm和am都是安卓自带的

pm

pm(package manager)包管理工具,可以用于确认包名:

列出所有的包信息:pm list packages [filter]

pm过滤器:

  • -d:只显示禁用的应用的包名
  • -e:只显示可用的应用的包名
  • -s:只显示系统应用的包名
  • -3:只显示第三方应用的包名

am

am是activity manager的缩写,用于启动apk

am启动程序命令:am start -D -n com.example.testarm/.MainActivity

  • am start -D -n调试模式打开应用

  • com.example.testarm要调试启动的包名

  • .MainActivityLunch Activity

android_server64

直接在shell中启动就可以,如果想修改使用的端口,在后面加上-p[port]就行

记得adb forward转发端口

ida设置

image-20240311233828317

3/13更新

这个可以不用全勾选,attach好像会在so开始的时候停一下,然后F9再跑就行

ida attach

Debugger > attach to process 找到对应的进程就行

连接dubug

jdb连接

用DDMS看程序开发的调试端口,DDMS会自动帮你转发端口

或者自己手动转发:

1
adb forward tcp:8700 jdwp:PID (pid监听)

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8600

命令进行连接

port对应的参数是DDMS看到的开放的端口

jdb半天没反应的话,重新am启动一下

最后

看手机(

等加载完,win调试安卓慢得一批,说是mac调试快的飞起,唉,没钱

剩下的就是愉快的下断点调试

Frida连接

先挖个坑,xman说可以用这个,说是用下面这个指令以spawn方式启动:

1
frida -Uf [包名] -l [脚本名] --pause

然后用ida attach上去,再下断点,这个自己还没试成功


这篇博客写到一半停了是因为ida断不下来,后来请教APeng大哥解决了

原因在安卓文件的AndroidManifest.xml 里面,如果配置了(或默认配置了)android:extractNativeLibs="false",so不会解压出来而是直接映射apk,ida无法找到这个so。

所以把这个改成true后,ida就能找到so。

没改之前在proc目录中cat maps是找不到对应的so,改了之后就能看到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sagit:/proc/16740 # cat maps | grep myso
7c6c9c0000-7c6ca04000 r-xp 00000000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7c6ca04000-7c6ca09000 r--p 00043000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7c6ca09000-7c6ca0a000 rw-p 00047000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7c6caee000-7c6cbd5000 r--s 000da000 103:01 1310865 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/base.apk
7c6ccd3000-7c6ccf2000 r--p 00000000 103:01 1310926 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.odex
7c6ccf2000-7c6ccf3000 r-xp 0001f000 103:01 1310926 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.odex
7c6ccf3000-7c6d5e4000 r--s 00000000 103:01 1310928 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.vdex
7c6d5e4000-7c6d5e5000 r--p 00020000 103:01 1310926 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.odex
7c6d5e5000-7c6d5e6000 rw-p 00021000 103:01 1310926 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.odex
7d073c4000-7d073d8000 r--s 00582000 103:01 1310865 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/base.apk
7d074b9000-7d074c0000 r--p 00004000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7d076b1000-7d076b3000 r--p 00046000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7d0aefd000-7d0aefe000 r--p 00047000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7d0b3a3000-7d0b3a4000 r--p 00000000 103:01 1310888 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/lib/arm64/libmysowithjava.so
7d0c902000-7d0c903000 r--p 0001a000 103:01 1310930 /data/app/com.simu.mysowithjava-UmWCxfj5WgTBuVb0OBiMbA==/oat/arm64/base.art