安装好AndroidStudio后设置JDK和SDK路径
安装Smali插件
选择你的Smalidea插件的位置
添加插件
接下来把要安装的apk安装到模拟器上运行该进程
打开AS,选择打开项目,直接导入AK反编译的apk文件路径即可。
复制上面的文件路径
打开AS导入对应路径项目
导入成功后选择Project
连接模拟器Shell查看进程
找到我们打开进程的PID
转发调试端口到8700
开始配置AS的调试设置
添加调试策略
选择字符串搜索,找到要下断点的Smali代码位置,我们这里以字符串定位
我们搜索onKey()函数,并在其中执行的位置下断点。
点击Debug按钮
开始测试调试,随意输入一些内容按回车,发现多出以下信息
右侧是自定义查看窗口,可以随意查看想要看的变量
F8键是单步步过,也可以按下面的按钮实现
F7单步步入
这种动态调试虽然没有jeb提示那么清晰,但是却更加稳定,可以修改this指针的值,除了this指针的值其他寄存器是不能修改的。
第二种调试方法
可以不用输入转发端口指令,只需要打开ddms,点击想要调试的进程
然后直接点击Debug按钮即可调试
如果出现以下错误提示是代表调试端口被占用了,需要重启一下连接服务
重启服务
重新选择要调试程序,发现有调试图标
再次点击调试,又一次进入调试状态
指定调试开始的入口点
有的时候我们不希望以附加方式进行调试,而是在程序启动前就设置好调试断点。就像OD自动停在OEP一样,再执行下就直接断在我们设置的断点上。我们首先需要先进入shell输入以下指令,用调试模式启动某一进程
am start -D -n 包名/入口活动名 //包名和入口活动名可以用AndroidKiller获取
打开jeb随意选取一个要调试的内容
设置好断点
点击调试按钮找到指定的进程就可以动态调试了,但是jeb很不稳定,我更愿意使用AS的调试方式。
AS的调试方式
上面的命令行设置相同,只需要设置响应的断点
打开ddms,发现红色调试图标,代表当前进程在等待我们的对其进行挂接
然后直接点击Debug就可以挂接到调试进程了