全部链接过程共分四步。
第一步:启动apk,绑定端口
打开第一个cmd终端。
1.打开模拟器之后,用adb命令链接
adb connect 127.0.0.1:7555(mumu模拟器)
2…使用am start命令启动apk程序。
adb shell am start -D -n com.******.****/com.*****.***Activity
启动后,模拟器界面会弹窗登录调试链接的信息。
3.查看apk进程id: adb shell ps|grep com.**.
4.如果有android studio的DDMS工具。可通过ddms工具查看apk绑定的端口id.下图的2836为apk进程id,8700为绑定的电脑端口(前面绿色爬虫是因为我截图时已经连接并开始apk调试了)。
5.如果没有ddms工具,则转发模拟器的apk使用进程id2580 绑定到电脑端口 8700
adb forward tcp:8700 jdwp:2580
第二步、上传android_server,绑定ida使用端口
1.上传ida安装目录下的android_server文件到模拟器的 任意路径下(我这用的是android_x86_server)
adb push d:/android_x86_server /data/local/tmp
2.设置文件权限,启动android_server程序
3.重新打开一个cmd终端,输入”adb forward tcp:23946 tcp:23946”将模拟器的23946端口转发到电脑23946端口,供后续ida连接使用。注意不要学错字符和少掉冒号!!!
转发后没有任何输入,代表转发成功。
第三步,启动ida,连接到apk
1.启动ida pro,点击”Debugger - > Attach -> Remote ArmLinux/Android debugger”,(如果后面提示链接错误,可以使用 Remote Linux debugger 再连接试试)会看到以下对话框:
点击”Debug options”按钮,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等选项的前面打上勾,如下图所示:
点击”ok”后会在以下对话框的hostname中填上”localhost”,port填写第2.3步设置的电脑端口 ,点击“ok”.
7.在弹出的”Choose process to attach to”窗口中找到 你通过am命令启动的进程,选中该进程,然后点击”ok”按钮。
8.连接成功后就进入了ida的调试界面(如果失败,请参考https://blog.csdn.net/caiqiiqi/article/details/74121323?utm_source=blogxgwz1)
第四步 使用jdb连接模拟器的apk程序
1.在cmd终端中 使用jdb连接模拟器,port端口为第1.4步设置的电脑端口
jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
。
回车运行指令后,会一直等待指令结果。这时需要在ida中的“Debug options”菜单中,点击一次“继续运行”的操作,才会看到下面反面结果。
2.ida接到jdb触发的运行程序指令,手动在ida中的“Debug options”菜单中,点击一次“继续运行”的操作开始运行apk指令程序。
3.动态断点调试还在学习中。下一节再分享!!!
参考:
https://www.jianshu.com/p/28bc480bf563 ADB指令大全
https://bbs.pediy.com/thread-224420.htm
https://blog.csdn.net/caiqiiqi/article/details/74121323?utm_source=blogxgwz1
https://www.cnblogs.com/uestcbutcher/p/7280885.html Android IDA So的动态调试大法 [非常棒]
https://blog.csdn.net/u013553529/article/details/80036227 adb forward的细节
https://blog.csdn.net/forlong401/article/details/45102087 使用 JDB 调试 Android 应用程序
-------------------- 如果对你有帮助,请帮忙支持一下!--------------------