一、自己新建一个APK
二、把这个APK拖进AndroidKiller里,反编译为Smali文件
![](https://i-blog.csdnimg.cn/blog_migrate/f5d6f0a60d032e58049c8ed25e4128e8.png)
找到smali文件夹
在C盘里新建一个app-debug文件夹,复制上一步的smali文件夹,并重命名为src
三、在AndroidKiller里查看包名和MainActivity
记住下面方框里的路径
四、导入smali文件夹到Android Studio
在Android Studio里打开app-debug文件夹:File—>Open—>C:\app-debug
五、配置JDK
选择File->Project Structure
六、要用AndroidStudio动态调试smali代码,首先要安装ideasmali插件
![](https://i-blog.csdnimg.cn/blog_migrate/6122b145f7af2b9122a3229317117379.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de1e443f0b0ee9f1fee1f1cf4327b827.png)
七、设置需要调试的smali文件。
app-debug/src文件夹右键-->Make Directory As --->Source Root
设置调试器:run-->edit configurations
+-->Remote,新建一个debug
八、打开命令行 输入命令
1)adb shell am start -D -n com.example.myapplication/com.example.myapplication.MainActivity
对apk进行动态调试,这条命令运行后手机屏幕将会进入到调试界面,千万别点手机上弹出来的对话框(不要点Force Close),它是在等待debug接入
2)查看Android Device Monitor 并记住下面红框里的两个值
新版本的AndroidStudio已经淘汰了Android Device Monitor功能,我们不能在AndroidStudio菜单上直接打开Android Device Monitor
找到了新的方法,我的 Android Device Monitor的路径为:C:\Users你的用户名\AppData\Local\Android\Sdk\tools下打开monitor.bat
然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)
3)开启转发
C:\Users\zhang>netstat -aon |findstr 8700
TCP 127.0.0.1:8700 0.0.0.0:0 LISTENING 16324
看看有没有哪个进程占用端口,就kill掉占用端口PID为的17000进程,没有就直接开启端口转发:
C:\Users\zhang>taskkill /PID 16324 /F
成功: 已终止 PID 为 16324 的进程。
然后输入以下命令开启转发(这里jdwp是自己Android Device Monitor中要调试app的Online值,tcp为debug值)
C:\Users\zhang>adb forward tcp:8700 jdwp:18335
adb server version (41) doesn't match this client (39); killing...
* daemon started successfully
九、动态调试
在灰色框内点击左键
Run-->Debug 'Smali'进行调试
手机界面会打开APK,你输入的用户名和密码会显示在AndroidStudio里
按F8执行下一步,F9运行程序
可以看到程序执行的逻辑 Watches窗口中可以点+按钮添加自己想看的寄存器的名字 就可以看到这个寄存器的值了
注意:要先设置进程debug,然后再打开DDMS查看端口,这样进程的PID就不会改变,不会出错。