一、什么是动态调试
其实是动态调试 Smail文件
,一种逆向分析的方式,通过 jdwp
调试相关进程。
一般在做竞品分析时会用到类似的手段。Android studio支持apk分析,所以操作起来还是比较简单的。
二、前期准备
2.1 使apk可调试
正常情况下release包是不允许调试的,所以必须先让apk可调试,一般有两种方法:
- 使用
apktool
工具反编译apk,修改AndroidManifest.xml
文件,然后再重签名二次打包:
<!-- application标签加上android:debuggable="true" -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:debuggable="true">
- 直接在root或者模拟器上运行
运行后,在 Logcat
中可以找到对应进程即可。
2.2 下载smalidea插件
Android Studio 中 Smali Support
插件不支持 smali 断点,所以需要重新下载一个插件,具体操作可以参考:解决新版Android Studio 4.0+无法断点调试smali问题
2.3 Android Studio 支持导入apk
启动 Android Studio 或者 点击File 是否有 Profile or Debug APK
这个选项:
如果没有找到,应该是 Android APK Support
这个插件没有启用,Settings中启用该插件即可。
三、动态调试smali文件
3.1 调试模式启动app
运行下面命令,启动app:
adb shell am start -D -n 包名/.你要调试的界面
例如:
adb shell am start -D -n com.francis.testxpose/.MainActivity
查看进程号:
adb shell ps | findstr 包名
例如:
adb shell ps | findstr com.francis.testxpose
3.2 端口映射
使用 jdwp 转发端口:
adb forward tcp:调试端口号 jdwp:进程号
例如:
adb forward tcp:8900 jdwp:12618
3.3 创建remote调试
-
使用
Profile or Debug APK
选项导入apk:
-
创建
remote
调试模式
3.4 下断点
找到你想调试的代码下断点。