程序员怎么做“竞品分析”:动态调试apk(AS + Smalidea)

1,229 阅读1分钟

动态调试能干什么?对于静态分析不容易理解的地方,就是动态调试的用武之地!

动态调试可以跟踪程序的运行流程,从而理解竞品的业务逻辑等。

操作步骤

  1. 注意不能用Android P
  2. 用android killer修改后的apk安装到手机(要有android:debuggable="true"
  3. 以调试模式启动adb shell am start -D -n com.example.myapplication/com.example.myapplication.MainActivity,app会处于等待调试的状态中。
  4. adb shell ps | findstr com.example.myapplication查看pid
    u0_a78    3813  1399  1375708 30176 futex_wait 00000000 S com.example.myapplication
    
  5. adb forward tcp:8700 jdwp:3813 建立端口转发
  6. 用android studio 3.x: File-> open反编译的smali文件夹AndroidKiller_v1.3.1\projects\app-debug\Project

    这一步也可以直接android studio 3.x:File-> Profile or debug APK

  7. 用 Project 视图,在项目目录右键 --> Mark Directory as ... --> Sources root
  8. android studio 3.x:Run -> Edit Configuration -> Remote -> 8700
  9. debug app

懒人脚本 (更多脚本请移步https://github.com/andych008/cmd)

adbbind.bat com.example.myapplication一句,完成进程号查找和端口转发。

用到了busybox,确认你手机里有。

@echo off

adb forward --remove tcp:8700

for /F %%i in ('adb shell busybox pidof %1') do ( set pid=%%i)

echo pid=%pid%

adb forward tcp:8700 jdwp:%pid%

netstat -nao | findstr "8700"

扩展阅读