安卓APP-HTTPS抓包Frida Hook教程

环境

Windows10主机安装adb、frida16.1.4

BlueStacks 5 China官网最新版

准备阶段

  • 模拟器root,在设置中就可以找到

  • 模拟器打开ADB开关

  • 连接adb,做端口转发

    adb connect 127.0.0.1:5555
    adb forward tcp:27042 tcp:27042
    adb forward tcp:27043 tcp:27043

抓包

  1. 连接adb shell,向模拟器上传frida-server,并启动frida-server端

    adb push frida-server-16.1.4-android-x86_64 /data/local/tmp/frida-server-16.1.4-android-x86_64
    adb shell
    su root
    cd /data/local/tmp
    ./frida-server-16.1.4-android-x86_64
  2. 查看要抓的包名-引用自https://zhuanlan.zhihu.com/p/467828480?utm_id=0

    1、查看将要启动或退出app的包名

    adb shell am monitor(只有在启动或退出的时候才会打印)

    2、查看安装的第三方app的包名

    adb shell pm list packages -3

    3、查看当前界面的app的包名

    adb shell dumpsys window windows | findstr mFocusedApp

    img

    4、查看启动的app的包名

    adb shell dumpsys activity top | find "ACTIVITY"

    img

    5、查看所有启动的应用的包名

    adb shell dumpsys activity activities | findstr "Run"

    img

    6、查看当前启动应用的包名

    adb shell dumpsys window w |findstr \/ |findstr name=

    img

    7、通过应用查看包名

    aapt dump badging D:\test\xxx.apk(APK的全名)

    img

    (aapt不是可运行命令的话,需要配置环境)

    img

    8、其他方法

    (1、查看进程的方法查看包名 2、查看日志的方法 3、直接在手机设置打开应用与权限查看)

    **有些命令需要adb root ;  adb remount 之后才能使用 ;( remount不成功的话用:adb shell verity-disabled 运行之后重启手机在remount)
  3. 在adb shell中执行命令,开启tcpdump抓包,这个目录是模拟器资源管理器的Download目录,方便导出

    tcpdump -i any -s 0 -w /mnt/sdcard/Download/damai.pcap
  4. Windows端执行frida hook,抓ssl证书

    sslkeyfilelog.js 文件内容

    function startTLSKeyLogger(SSL_CTX_new, SSL_CTX_set_keylog_callback) {
       console.log("start----")
       function keyLogger(ssl, line) {
           console.log(new NativePointer(line).readCString());
       }
       const keyLogCallback = new NativeCallback(keyLogger, 'void', ['pointer', 'pointer']);
    
       Interceptor.attach(SSL_CTX_new, {
           onLeave: function(retval) {
               const ssl = new NativePointer(retval);
               const SSL_CTX_set_keylog_callbackFn = new NativeFunction(SSL_CTX_set_keylog_callback, 'void', ['pointer', 'pointer']);
               SSL_CTX_set_keylog_callbackFn(ssl, keyLogCallback);
           }
       });
    }
    startTLSKeyLogger(
       Module.findExportByName('libssl.so', 'SSL_CTX_new'),
       Module.findExportByName('libssl.so', 'SSL_CTX_set_keylog_callback')
    )
    frida -U -l .\sslkeyfilelog.js  -f cn.damai(替换为自己的包名)
  5. 开始在模拟器端执行各种APP中的操作,例如登录、搜索等,这些数据包都会被抓取,操作完毕后,在adb shell中按Ctrl c关闭tcpdump抓包

  6. 把步骤4中抓到的sslkey放到sslkey.txt文件,把步骤3中抓到的damai.pcap导出来

    image-20241006012501305

    image-20241006012544789

  7. 用wireshark打开damai.pcap,去wireshrak导航栏的编辑-首选项中选TLS,导入sslkey.txt就能解密

    image-20241006012118696

  8. 解密后,可以看到请求包

    #过滤条件
    http && tcp.dstport==443
    
    http && tcp.dstport==443 and !(http.request.uri contains ".webp" or http.request.uri contains ".jpg" or http.request.uri contains ".png" or http.request.uri contains ".jpeg")

常见问题

  • 如果碰到提示adb.exe: error: more than one device/emulator

    答:在使用adb命令时指定-s,例如adb -s 127.0.0.1:5555 shell

  • 为什么要端口转发27042和27043

    答:Frida是一个用于动态代码注入的调试工具,常使用端口 27042 与设备通信。通过端口转发,可以在电脑上运行的 Frida 客户端与设备上的 Frida 服务进行通信。