用到的工具
①Android Studio最新版。
②apktool尽量使用最新版的。
③ideasmali插件。下载地址https://github.com/JesusFreke/smali/wiki/smalidea
首先第一步需要在as里面安装ideasmali的插件
装完重启之后。
我们将反编译的apk安装到手机中,以debug模式去运行他,
adb shell am start -D -n 包名/activity
启动后。程序出现wait for debug 界面。
此时打开ddms工具。新版as已经去掉了ddms的界面。
去工具tools文件夹下找到ddms批处理运行。
如果此时没有进程信息的话。重启下adb即可。
重启后我们看到了本地的服务端监听端口为8600 ~8700 ,多点击几下这条信息。
接下来将smali导入我们as的工程。
点创建即可,next,即可完成导入。接下来进行远程配置
增加一个Remote调试的调试选项,端口选择:8700
配置完点ok后。在smali的关键点处下上断点,
接下来点击小虫子就可以进入断点里面了,跟as调试一样。
第二种方法比较简单:
此方法只适用于已经调试过该程序,关联过此进程的apk。如果是第一次关联进程则看不到进程信息。
在正常以debug模式命令下启动apk后,adb shell am start -D -n 包名/activity
然后正常导入我们的反编译的smali代码,导入成功后不需要去设置remote 远程调试,
此时导入项目成功后,默认是这个样子的。 我们在smali代码处设置下断点,然后点击 这个按钮 ,关联下当前apk的进程,
此时看到了我们debug模式下的apk进程信息,点击ok,就能自动进入到debug调试模式下了。就可以进行调试了。
如果多次进行调试的时候遇到了端口占用被bind过的情况下,我们通过
netstat -aon |findstr "8700" 命令
查看到了处于监听 listening 状态中端口信息,此时看到处于listening 中的进程pid为2816
接下来,我们可以通过taskkill /f /pid 2816 命令强制杀死pid为2816的进程。
接下来在查找下占用的8700端口
此时已经不占用了。可以进入调试状态了。
如果有错误的话,请各位下方留言指出。谢谢