使用jdb利用可调式app
可调试选项在AndroidManifest.xml中有定义
android:debuggable=”true”
使用drozer可以枚举程序中哪些是可以调试的,使用命令
run app.package.debuggable
会显示出可调式的包以及暴露的权限,用diva做例子
接下来需要确定 diva 程序执行的 pid,如果程序已经打开在执行,可以很容易找到,如果不清楚程序是否是执行状态,需要在drozer中手动启动程序
run app.activity.start –component jakhar.aseem.diva jakhar.aseem.diva.MainActivity
启动之后就可以搜索diva运行的pid号。
有两种方法,一种是使用 adb jdwp 命令查看diva 运行之前和之后的增加的pid号来确定,很麻烦;
另一种是使用 ps | grep xxx 来直接查询pid号
这个号码就是需要连接 vm的端口号,需要先在本地设置 端口转发
adb forward tcp:12345 jdwp:1740
然后使用 jdb进行连接
jdb -attach localhost:12345
但是我测试报错,排查错误,找到另一种连接方法
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345
使用connect语句可以连接成功。
可以输入 classes 命令来查找类信息
使用 methods [class_name] 来查看指定类中的所有方法
还可以使用 fields [class_name] 查看类中的域和属性