![a642a72f5989012b1790c877b983ce42.png](https://i-blog.csdnimg.cn/blog_migrate/a37679b60d22bb4de208442e1472428f.png)
点击上方蓝字关注我,每天进步一点点
![9cd1c57d0883fce047a856f69967222d.png](https://i-blog.csdnimg.cn/blog_migrate/ee4ca6bcbe6079161be0d57255dd157c.png)
大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑。网络抓包、数据来源流向分析、页面逻辑跳转分析、动态调试等。由于很多代码都会混淆,很多时候我们直接通过代码可能看不出逻辑走向,所以我们就会选择断点来进行调试。
C层一般会使用IDA进行调试分析,Java层常常就会需要对Smali代码进行调试分析。
工具准备
我这边是使用的Android studio + smaliidea(as插件) 配合调试
smaliidea最新下载地址;smaliidea 网上有很多提供的下载的文件都比较小,不是真正的smaliidea插件,所以在as安装的时候会失败。
开始实践
工具准备好了,接下来就开始怎么调试呢。首先反编译一个apk,把AndroidManifest.xml在application节点添加一句android:debugable="true" 表示apk 可以调试。改好之后,用apktool 回编译好。反编译参考我的另一片文章-反编译-替换APP的首页
安装插件
apk准备好之后就该配置as了。先安装smaliidea插件
安装完后重启as
把smali文件作为source目录。
配置as
创建Remote调试器
我看好多通过monitor 查看要调试应用的进程。我这边捣鼓半天monitor也不好用,一直白屏,果断放弃,
不就是看要调试应用的pid吗,用命令行也可以
adb shell ps | grep com.zzx.demo
u0_a359 22189 626 4460076 36324 0
上面22189就是我要调试应用的pid
然后执行调试adb 命令
adb shell am start -D -n com.zzx.demo/.MainActivityStarting: Intent { cmp=com.zzx.demo/.MainActivity }
进行端口映射
adb forward tcp:port_A jdwp:pid //其中,port_A 为添加 remote 调试时指定的端口号,pid 即为第二步中获得对应调试进程的 pid
比如我的就需要执行:
adb forward tcp:5005 jdwp:22189
5005就是我上面remote 配置的端口号,22189是我要调试应用的pid
接下来在as中选中调试的应用,就可以进入调试状态
使用 run -> attach debugger to Android Process 选项,根据提示选择待调试进程即可。正确操作时,移动设备上的 waiting for debugger 对话框会消失。
成功截图:
通过上述方法启动调试之后,即可进行正常的调试过程。常见的方案是在经过分析所得的可能执行路径上事先设置断点,之后在移动设备上进行对应的 app 操作,若分析正确,则 app 会执行对应的流程,从而触发断点,从而可以进行进一步的分析。
总结:
好多东西看别人写的文章挺简单,轮到自己试的时候,各种坑,只有经历过才知道,所以能动手走一趟尽量动手,会遇到你想不到的坑,哈哈哈
![e7c588808ac2cc0ad9fb445a829b7bed.png](https://i-blog.csdnimg.cn/blog_migrate/8da63069447cd33488ef1f81e90217cc.png)
点个在看你最好看
![a23f4430240b4bf8984e503aec052ee9.png](https://i-blog.csdnimg.cn/blog_migrate/07347ef263277a80b1a15512eabf39b9.png)