上一篇《教我兄弟学逆向03 破解第一个Android游戏》我带你用另一种方式破解了切水果游戏 我布置的课后作业你也完成了 并且自己又独立破解了另外几款游戏 很不错 在这里表扬一下-旭 ! 希望其他同学都向旭学习
那么本节课要教你的是用AndroidStudio动态调试smali 下面开始今天的教程
既然这节课我要教你的是用AndroidStudio动态调试smali 那么在开始动态调试smali之前 首先要把要调试的apk反编译成smali文件然后导入到用AndroidStudio中对不对?
那么把怎么把这个apk反编译成smali文件呢?
你回答:我以前都是直接把apk拉到AndroidKiller这个软件中 然后AndroidKiller自动就会把apk反编译成smali文件了
回答正确 可以啊兄弟! 用现在流行的一句话说 给你打call !
那么我现在给你演示这种方式
一.用AndroidKiller把apk反编译成smali文件
1. 首先把apk拉到AndroidKiller中 点工程管理器 点smali目录右键 打开方式-打开文件路径
![](https://i-blog.csdnimg.cn/blog_migrate/1ff29c9f371aeb4dbf71ab5c3e7322f2.png)
2.在E盘新建一个jwx02文件夹 然后把打开文件路径目录里的smali文件夹复制到E盘并改名为src 然后就可以用AndroidStudio导入src了
![](https://i-blog.csdnimg.cn/blog_migrate/d8a3cd1b99461c99392ea248f9acc771.png)
二 要用AndroidStudio动态调试smali代码 首先要安装ideasmali插件
1.打开AndroidStudio
2. 安装ideasmali插件,File->Settings->Plugins,下载安装ideasmali插件。
ideasmali下载链接:
链接:http://pan.baidu.com/s/1qXJFuJq 密码:r4iv
![](https://i-blog.csdnimg.cn/blog_migrate/2888930ffa4ff1677a4e4e747bffe5ca.png)
![](https://i-blog.csdnimg.cn/blog_migrate/56177649086e85038fcd609eea91c1c4.png)
三. 打开Android Device Monitor
![](https://i-blog.csdnimg.cn/blog_migrate/2920d55d47528d04c8d225b91e132329.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6c230570454802c9f593d4db9b99fb9a.png)
四. 找到要调试APK的包名和入口的Activity
1.用AndroidKiller打开要调试的APK 这里是jwx02.apk
2.记住包名hfdcxy.com.myapplication 和入口的Activity名 hfdcxy.com.myapplication.MainActivity
![](https://i-blog.csdnimg.cn/blog_migrate/8ae09e2e0d1fbcf3941fb363e783e90b.png)
3.这里要注意一下 在application标签里面要有 android:debuggable="true" 这句代码,没有是不能调试apk的 现在调试的这个例子默认是有这句代码的 有的apk中没有这句代码要自行添加上
![](https://i-blog.csdnimg.cn/blog_migrate/fcf2c573776e1f577f6c997f1807592e.png)
五 把自己要调试的APK安装到手机中 并用数据线连接手机 打开USB调试模式
六 打开命令行
输入命令 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity 对apk进行动态调试 这条命令运行后手机屏幕将会进入到调试界面(如果手机屏幕没有进入到调试界面说明USB没有连接好手机 或者USB调试模式 没有打开 或者其他原因)
![](https://i-blog.csdnimg.cn/blog_migrate/64083272854a1af8015fa8f597ba799b.png)
七.查看Android Device Monitor
记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)
![](https://i-blog.csdnimg.cn/blog_migrate/2dcd0a41e39a33e30e24ea6a2582d845.png)
八.打开命令行窗口
输入命令 adb forward tcp:8700 jdwp:19509 转发8700 端口 (这里 jdwp是自己Android Device Monitor中要调试app的Online值 )
![](https://i-blog.csdnimg.cn/blog_migrate/9d5655767d38478f6d36bb42563b87f7.png)
九. 导入jwx02文件
1.用AndroidStudio导入jwx02
![](https://i-blog.csdnimg.cn/blog_migrate/4dab6eaf523c4cb0231d3ad5b08cb622.png)
![](https://i-blog.csdnimg.cn/blog_migrate/36416e27dcd6cb521f58f894fe8de365.png)
![](https://i-blog.csdnimg.cn/blog_migrate/27efbcf81e8238a27ba36950b4ea6d09.png)
2.然后一路Next 最后点Finsh
![](https://i-blog.csdnimg.cn/blog_migrate/cc0baded8c5221fee952a18223131547.png)
十 点击Android选择Project
对之前反编译的 jwx02/src文件夹右键-->Make Directory As --->Source Root
![](https://i-blog.csdnimg.cn/blog_migrate/b78ba259d728ed29ce49f307fa6b4845.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a984ab2151eedc3ea596b049ccb37d9.png)
十一 配置远程调试的选项
选择Run-->Edit Configurations 并增加一个Remote调试的调试选项,端口选择:8700
![](https://i-blog.csdnimg.cn/blog_migrate/c283b2c305fb406e001ba4a4d35413a8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/87ee308544e48aaf03d628c1ddd09164.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b9ebeff9fbecb3012b02a85ad08d7245.png)
十二 选择File-->Project Structure 配置JDK
![](https://i-blog.csdnimg.cn/blog_migrate/c8b8c08743e1461f8782000074fb8bd5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1f1d39de4d071d0b06dfe173e6b2647e.png)
十三 在Smali中下好断点 断点的意思是程序运行到下断点的那行代码就会断下来
![](https://i-blog.csdnimg.cn/blog_migrate/240d1a72988f3b73bd56b3aa02be7184.png)
十四 下好断点之后Run-->Debug'smali',这里的smali是我们之前配置好的调试选项。
![](https://i-blog.csdnimg.cn/blog_migrate/ba975fba3c2229dd1bfe376e16853a0e.png)
十五 此时手机会进入程序 在手机上输入用户名和密码 点登陆 程序会断在我下的断点处
![](https://i-blog.csdnimg.cn/blog_migrate/386bd478c3f924c90b6daf0520ab9b47.png)
十六 在自己关心的语句前面下断点按F8执行下一步 F9运行程序 可以看到程序执行的逻辑 Watches窗口中可以点+按钮添加自己想看的寄存器的名字 就可以看到这个寄存器的值了
![](https://i-blog.csdnimg.cn/blog_migrate/cd8175d85714dcced97075fee2e19142.png)
结束
因为我在招聘网站上面看到很多招逆向的公司都要求要会动态调试smali代码 因为《教我兄弟学逆向》系列课程就是为找工作而生的 所以这节课给你讲了动态调试smali的知识 当然只靠课堂上面的学习是远远不够的 还需要课下你自己去多练习 自己去补充动态调试相关的知识
当然教程讲的并没有这么详细 破解过程中遇到不懂得自己去百度 再不懂的就来问我 学习逆向就是这样 学不会就会感觉迷茫 但是不用怕 记住多迷茫几次就都学会了 本节课的例子一定要多练习 多跟着课程做几遍 自己多下断点看程序的执行逻辑 本节课教程到此结束 那么下节课我将教你在smali中代码中插入log 至于很多同学关心的so将会放在下下节课讲
课后作业:
把本节课的例子动态调试三遍 尝试在不同位置下断点 多下断点 多看寄存器的值 分析程序执行的逻辑