安卓逆向学习——动态调试

安装好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就可以挂接到调试进程了
在这里插入图片描述

发布了30 篇原创文章 · 获赞 5 · 访问量 1910

猜你喜欢

转载自blog.csdn.net/AlexSmoker/article/details/104550475