AS动态调试smali

1.用AndroidKiller把apk反编译成smali文件;
新建一个文件夹 然后把打开文件路径目录里的smali文件夹复制到文件中并改名为src ;
这里写图片描述
反编译后记得查看清单文件,在application标签里面要有 android:debuggable=”true” 这句代码,没有是不能调试apk的,有的apk中没有这句代码要自行添加上,再回编译apk,便于后续安装apk;
2.安装ideasmali插件,File->Settings->Plugins,下载安装ideasmali插件;
打开Android Device Monitor,(Tools/Adndroid/Android Device Monitor);
找到要调试APK的包名和入口的Activity,查看清单文件;
把自己要调试的APK安装到手机中 并用数据线连接手机 打开USB调试模式,也可以装在模拟器上,adb install pc上apk路径;
打开命令行 输入命令 adb shell am start -D -n 包名/入口activity, 对apk进行动态调试 这条命令运行后手机屏幕将会进入到调试界面(如果手机屏幕没有进入到调试界面说明USB没有连接好手机 或者USB调试模式 没有打开 或者其他原因);
查看Android Device Monitor 记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败);
这里写图片描述
如果还遇到 “error: could not install smartsocket listener: cannot bind to 127.0.0.1:port号: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)”这种问题。
解决:Cmd:netstat -nao | findstr port号,查找占用进程的pid
然后任务管理器关掉相应pid的进程。

3.用AndroidStudio导入文件夹(里面含有smali文件改名后的src文件夹),next知道finish;
点击Android选择Project 对之前反编译的 src文件夹右键–>Make Directory As —>Source Root;
配置远程调试的选项,选择Run–>Edit Configurations 并增加一个Remote调试的调试选项,端口选择:8700;
选择File–>Project Structure 配置JDK;
这里写图片描述

4.下断点 下好断点之后Run–>Debug’smali’,这里的smali是我们之前配置好的调试选项;
按F8执行下一步 F9运行程序
可以看到程序执行的逻辑 Watches窗口中可以点+按钮添加寄存器的名字 就可以看到这个寄存器的值。
这里写图片描述

参考: https://www.52pojie.cn/thread-658865-1-1.html
http://blog.csdn.net/jiangwei0910410003/article/details/51456735(四哥)