前提条件
- 首先要懂的smali得语法,知道在哪里下断点,代码逻辑,调试的位置定位很重要,不用太精通,但是最起码的知识点要知道
- 你所调试的apk是否可以支持反编译后二次签名,有一些apk包是做了签名效验的,需要破解之后才能打包,有些是加了壳的,根据实际情况去处理你所调试的apk包,这里不仔细说明怎么破解签名效验和脱壳操作。
- 需要准备安卓模拟器或者手机(无需ROOT),adb能够正常链接手机
- 需要android studio (建议下载最新版本)
开始配置环境
- android studio需要安装插件:1,Smalidea 2,Smali Support
1,Smalidea安装,网上很多都是v0.05版本的,由于我的android studio比较新,所以v0.5版本会导致无法正常下断点。所以建议安装v0.06版本
下载地址:smalidea-0.06
安装步骤:
打开setting>Plugins
右上角的齿轮 选择 Install Plugin from Disk
然后选择下载好的smalidea-0.06安装即可
2,Smali Support安装
可以直接在Plugins的Marketplace搜索Smali Support就可以直接安装
至此安装的东西已经就绪完毕了。
3,通过android studio 打开apk包
android studio 起始页面打开 profile or Debug APK
选择你要调试apk包
把Android改为Project
养成好习惯,把反编译出来的smali改为源码文件目录
smali文件右键>Make Directory as > Sources Root
4,Smali下断点
选择你要在smali源码里面下载断点了 根据自身情况下载断点
5,修改反编译的apk包改为调试模式
反编译工具很多,可以通过android killer或者apktool2.6都可以,根据自己习惯
(安装android killer需要配置java环境变量,这里不说明,网上大把资料自己可以搜索下 java安装环境配置 就行了)
这里我用android killer。
1,使用android killer打开apk包
2,反编译成功之后修改 AndroidManifest.xml文件 在Application 中添加
android:debuggable=“true”
点击保存后从新编译apk包 安装到手机或者模拟器上
到这里需要调试的apk包已经准备好了,下面就是准备调试
6,配置android studio调试器
打开Edit Configurations
点击左上角加号>选择Remote JVM Debug
Name:自己随便写
port:这个可以选择默认的 可以根据自己选择端口号
其他的不用修改 然后点击apply再点OK
然后选择刚刚创建的调试器
再打开Terminal
然后在手机上打开你刚刚编译修改的apk包运行起来,
通过shell查看包的pid进程
adb shell ps | grep 包名
包名在android killer可以查看
我这里包名:com.leeyou.td16489493
adb shell ps | grep com.leeyou.td16489493
会显示一下信息
记住这个pid 7751 等会儿要用到
然后输入
adb forward tcp:5005 jdwp:7751
tcp:端口是在第六步设置调试器设置端口 默认5005
jdwp:换成你apk包的pid
然后选择Attach Debugger to Android Process
然后选择apk包名 点击OK
如果出现Connected to the tarfet VM…说明已经连接成功了!
剩下的就是在代码段下断点进行调试了
运行手机的apk或者模拟器的apk调试器会自动在你下的断点停留然后出现参数值
教程到此结束。供大家参考。