安装好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就可以挂接到调试进程了



368

被折叠的 条评论
为什么被折叠?



