程序员怎么做“竞品分析”:动态调试apk(AS + Smalidea)
动态调试能干什么?对于静态分析不容易理解的地方,就是动态调试的用武之地!
动态调试可以跟踪程序的运行流程,从而理解竞品的业务逻辑等。
操作步骤
- 注意不能用Android P
- 用android killer修改后的apk安装到手机(要有
android:debuggable="true"
) - 以调试模式启动
adb shell am start -D -n com.example.myapplication/com.example.myapplication.MainActivity
,app会处于等待调试的状态中。 adb shell ps | findstr com.example.myapplication
查看pid1
u0_a78 3813 1399 1375708 30176 futex_wait 00000000 S com.example.myapplication
adb forward tcp:8700 jdwp:3813
建立端口转发- 用android studio 3.x: File-> open反编译的smali文件夹
AndroidKiller_v1.3.1\projects\app-debug\Project
。这一步也可以直接android studio 3.x:File-> Profile or debug APK
- 用 Project 视图,在项目目录右键 –> Mark Directory as … –> Sources root
- android studio 3.x:Run -> Edit Configuration -> Remote -> 8700
- debug app
懒人脚本 (更多脚本请移步https://github.com/andych008/cmd)
adbbind.bat com.example.myapplication
一句,完成进程号查找和端口转发。
用到了busybox,确认你手机里有。
1 | @echo off |
扩展阅读
error: cannot bind listener: cannot bind to 127.0.0.1:8700:
出现这个错误说明8700端口被占用。通常每个套接字地址(协议/网络地址/端口)只允许使用一次。解决办法
netstat -nao | findstr "8700"
根据PID找到该进程,结束进程
打开任务管理器—>查看—>选项列(S)—>勾选 PID,确定—>进程按钮栏