使用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] 查看类中的域和属性

您可能还喜欢...