AndroidStudio调试smali代码

Posted superxlcr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AndroidStudio调试smali代码相关的知识,希望对你有一定的参考价值。

最近看了一篇关于动态调试smali代码的文章:http://blog.csdn.net/superxlcr/article/details/78296673


由于文章是使用Eclipse调试smali代码的,因此上网找了下使用androidStudio调试smali代码的相关资料


下载AS插件

首先由于AndroidStudio是不支持smali的,因此我们需要下载相关插件来语法高亮以及设置断点 我们可以下载smalidea插件来安装: https://bitbucket.org/JesusFreke/smali/downloads/


安装完后,smali语法会高亮显示,并且可以设置断点了

反编译apk文件

利用apktool工具反编译apk,下载地址: https://bitbucket.org/iBotPeaches/apktool/downloads/

设置AndroidManifest中的debuggable属性为true,并重新打包签名

为了让我们的apk可以用于调试,我们需要修改AndroidManifest中的debuggable属性为true:

接着我们可以通过AndroidManifest找到程序的入口Activity(通过android.intent.action.MAIN,android.intent.category.LAUNCHER等属性)
找到程序入口后,我们有两种方法用于调试:
  • 在入口Activity中加入:
    invoke-static , Landroid/os/Debug;->waitForDebugger()V
    这个是smali语法,对应的Java代码为:
    android.os.Debug.waitForDebugger();
  • 或者在启动Activity时使用am指令,带上-D参数用于调试:
    adb shell am start -D -n package/MainActivity
接着使用apktool重新打包,并使用jarsigner签名

安装apk,开启调试模式,使用AS进行远程attach调试

安装完apk后,如果加入了waitForDebugger方法,则直接启动app 若是没有加入,则使用am的debug模式启动app
启动完后,打开ddms,查看应用的debug端口号:
如上图所示,红色小蜘蛛代表应用等待调试,其中应用进程号为10747,debug端口号为8620或者8700(一般用前面那个)
然后我们打开AS,导入我们的反编译工程后,在相应的smali代码中打上断点:

上图为在MainActivity的onCreate方法中加入断点
然后,打开AS的Run -> Edit Configurations,新建remote类型:
选择attach模式,输入相应的端口号即可:
调试成功:

以上是关于AndroidStudio调试smali代码的主要内容,如果未能解决你的问题,请参考以下文章

AndroidStudio安装ideasmali插件,动态调试smali代码

Android调试系列—使用android studio调试smali代码

Android逆向 Android Studio动态调试smali代码

动态调试smali代码

Android逆向笔记-使用Android Studio调试Smali代码(方式二)

Android逆向笔记-使用Android Studio调试Smali代码(方式一)