一、概述
平时逆向分析android应用的时候最常见的就是使用jeb或者jadx等工具静态反编译apk,查看静态代码逻辑。进阶一点就使用frida或者xposed等动态调试工具进行函数插桩,动态分析代码逻辑。但是遇到一些复杂的业务场景,通过这两种方式很难理清楚代码流程。这个时候动态调试smali就显得及其重要了,通过动态调试smali代码,能够做到跟踪每一条java虚拟机指令,进而能够很清晰的跟踪分析代码逻辑。本文记录从0开始搭建android smali调试环境。
二、调试环境准备
2.1 常规android逆向环境
apktool,android studio
2.1 Android studio安装smaliidea插件:https://bitbucket.org/JesusFreke/smali/downloads/?tab=downloads
图片.png
下载插件,android studio中安装本地插件
三、应用调试
3.1 构建smali工程
使用apktool反编译apk文件 ,可以看到生成文件夹下面有很多smali目录。
图片.png
将所有smali文件夹下的文件集合到一个文件夹下,这里新建一个all文件夹,然后利用命令一键完成。cp -r smali*/* all
图片.png
这样all文件夹下就有所有smali文件了。接下来用android studio导入工程,工程目录选all文件夹,导入完成后在all文件夹右击,将all目录设置为source root目录。
图片.png
至此,smali工程构建完成
3.2 调试应用
android studio中添加调试配置,新建一个Remote JVM Debug配置。配置如下,名称和端口号可以随意。
图片.png
开启应用调试配置:可以apk中配置或者设备开启全局可调试。这里利用magisk开启全局可调试,进入adb shell,su执行下列两行就可开启全局可调式。
magisk resetprop ro.debuggable 1
stop;start;
启动应用(可调式启动) ,这里启动组件是 包名/launcher全类名,可以在manifest自行查找
图片.png
启动后界面会停留在这个状态,等待调试器附加。
图片.png
此时回到android studio,在右上角选择设备中的目标应用,并且attach上去 ,应用恢复正常运行。
图片.png
smali工程中断点可以先前就下好,也可现在下断点,只要在执行到断点之前下好断点都可以。接下来就可以等待断点触发,开启调试之旅了
断点触发:
图片.png