Android studio动态调试smali

用到的工具

①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端口

此时已经不占用了。可以进入调试状态了。

 

如果有错误的话,请各位下方留言指出。谢谢