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

安装好AndroidStudio后设置JDK和SDK路径
安卓逆向学习——动态调试_第1张图片
安卓逆向学习——动态调试_第2张图片
安装Smali插件
安卓逆向学习——动态调试_第3张图片
安卓逆向学习——动态调试_第4张图片
选择你的Smalidea插件的位置
安卓逆向学习——动态调试_第5张图片
添加插件
安卓逆向学习——动态调试_第6张图片
接下来把要安装的apk安装到模拟器上运行该进程
安卓逆向学习——动态调试_第7张图片
打开AS,选择打开项目,直接导入AK反编译的apk文件路径即可。
安卓逆向学习——动态调试_第8张图片
复制上面的文件路径
安卓逆向学习——动态调试_第9张图片
打开AS导入对应路径项目
安卓逆向学习——动态调试_第10张图片
导入成功后选择Project
安卓逆向学习——动态调试_第11张图片
安卓逆向学习——动态调试_第12张图片
连接模拟器Shell查看进程
安卓逆向学习——动态调试_第13张图片
找到我们打开进程的PID
在这里插入图片描述
转发调试端口到8700
在这里插入图片描述
开始配置AS的调试设置
安卓逆向学习——动态调试_第14张图片
添加调试策略
在这里插入图片描述
安卓逆向学习——动态调试_第15张图片
选择字符串搜索,找到要下断点的Smali代码位置,我们这里以字符串定位
安卓逆向学习——动态调试_第16张图片
我们搜索onKey()函数,并在其中执行的位置下断点。
安卓逆向学习——动态调试_第17张图片
点击Debug按钮
在这里插入图片描述
安卓逆向学习——动态调试_第18张图片
开始测试调试,随意输入一些内容按回车,发现多出以下信息
安卓逆向学习——动态调试_第19张图片
安卓逆向学习——动态调试_第20张图片
右侧是自定义查看窗口,可以随意查看想要看的变量
安卓逆向学习——动态调试_第21张图片
安卓逆向学习——动态调试_第22张图片
F8键是单步步过,也可以按下面的按钮实现
安卓逆向学习——动态调试_第23张图片
F7单步步入
在这里插入图片描述
安卓逆向学习——动态调试_第24张图片
这种动态调试虽然没有jeb提示那么清晰,但是却更加稳定,可以修改this指针的值,除了this指针的值其他寄存器是不能修改的。
第二种调试方法
可以不用输入转发端口指令,只需要打开ddms,点击想要调试的进程
安卓逆向学习——动态调试_第25张图片
然后直接点击Debug按钮即可调试
安卓逆向学习——动态调试_第26张图片
如果出现以下错误提示是代表调试端口被占用了,需要重启一下连接服务
安卓逆向学习——动态调试_第27张图片
重启服务
安卓逆向学习——动态调试_第28张图片
重新选择要调试程序,发现有调试图标
安卓逆向学习——动态调试_第29张图片
再次点击调试,又一次进入调试状态
安卓逆向学习——动态调试_第30张图片
指定调试开始的入口点
有的时候我们不希望以附加方式进行调试,而是在程序启动前就设置好调试断点。就像OD自动停在OEP一样,再执行下就直接断在我们设置的断点上。我们首先需要先进入shell输入以下指令,用调试模式启动某一进程

am start -D -n 包名/入口活动名    //包名和入口活动名可以用AndroidKiller获取

安卓逆向学习——动态调试_第31张图片
安卓逆向学习——动态调试_第32张图片
打开jeb随意选取一个要调试的内容
安卓逆向学习——动态调试_第33张图片
设置好断点
安卓逆向学习——动态调试_第34张图片
点击调试按钮找到指定的进程就可以动态调试了,但是jeb很不稳定,我更愿意使用AS的调试方式。
AS的调试方式
上面的命令行设置相同,只需要设置响应的断点
安卓逆向学习——动态调试_第35张图片
打开ddms,发现红色调试图标,代表当前进程在等待我们的对其进行挂接
安卓逆向学习——动态调试_第36张图片
然后直接点击Debug就可以挂接到调试进程了
安卓逆向学习——动态调试_第37张图片

你可能感兴趣的:(工具使用,Android逆向)