安卓APP-HTTPS抓包Frida Hook教程

发布于:2025-02-11 ⋅ 阅读:(123) ⋅ 点赞:(0)

安卓APP-HTTPS抓包Frida Hook教程

本机环境

  • windows 11
  • bluestacks 5.11.56.1003 p64
  • adb 31.0.2
  • Root Checker 6.5.3
  • wireshark 4.0.5
  • frida 16.5.9
  • jadx-gui 1.4.7

环境搭建

bluestacks 环境搭建

目前Android模拟器竞品很多,选择Bluestacks 5是因为它能和windows的hyper-v完美兼容,root过程也相对简单。

下载地址:https://www.bluestacks.com/download.html

首先需要root Bluestacks环境

  1. 下载安装Bluestacks。

  2. 运行Bluestacks Multi-instance Manager,发现默认安装的版本为Android Pie 64bit版本,即Android 9.0。此时退出bluestack所有程序。

在这里插入图片描述

  1. 关闭bluestack后编辑bluestacks配置文件, %programdata%\BlueStacks_nxt\bluestacks.conf

在这里插入图片描述

  1. 在配置文件中查找root关键词,对应值修改为1,共两处。

    bst.feature.rooting="1"
    bst.instance.Pie64.enable_root_access="1"
    

    在这里插入图片描述

  2. 启动bluestack模拟器,安装 Root Checker APP,点击验证root,即可发现root已成功。
    在这里插入图片描述

打开 adb调试

1.bluestack设置-高级中打开Adb调试,并记录下端口

在这里插入图片描述

2.打开主机命令行,运行 adb connect localhost:6652,端口号修改为上一步的端口号,即可连接。再运行adb devices,如有对应设备则连接成功。

3.进入adb shell,执行su进入root权限,命令行标识由$变为#,即表示adb 进入root权限成功。
在这里插入图片描述

frida环境搭建

frida是大名鼎鼎的动态分析的hook神器,用它可以直接访问修改二进制的内存、函数和对象,非常方便。它对于Android的支持也是很完美。

frida的运行采用C/S架构,客户端为电脑端的开发环境,服务器端为Android,均需对应部署搭建。

客户端环境搭建(Windows)

firda客户端基于python3开发,因此首先需要配置好python3的运行环境,然后执行 pip install frida-tools即可完成安装。运行 frida --version可验证frida版本。

(py3) PS E:\TEMP\damai> frida --version

16.5.9

服务器 环境搭建(Android)

环境搭建第二步是在Android模拟器中运行frida-server。这样可以让Frida通过ADB/USB调试与我们的Android模拟器连接。

1.下载frida-server
最新的frida-server可以从 https://github.com/frida/frida/releases 下载。请注意下载与设备匹配的架构。如果您的模拟器是x86_64,请下载相应版本的frida-server。本文使用的版本为 frida-server-16.5.9-android-x86_64.xz
在这里插入图片描述

2.传入Android模拟器。

将下载后的.xz文件解压重新命名为frida-server,将frida-server传入Android模拟器

adb push frida-server /data/local/tmp/

3.运行 frida-server

使用adb root以root模式重新启动ADB,并通过adb shell重新进入shell的访问。进入shell后,进入我们放置frida-server的目录并为其授予执行权限:

cd /data/local/tmp/frida-server
chmod +x frida-server-16.5.9-android-x86_64

执行:./frida-server-16.5.9-android-x86_64,运行frida-server,并保持本shell窗口开启。

4.测试是否连接成功

在window端运行frida-ps命令

在这里插入图片描述

看到一堆熟悉的Android进程,表示连接成功。

5.转发frida-server端口 (可选)

frida-server跑在Android端,frida需要通过连接frida-server。上一步使用adb的方式连接,frida认为是USB模式,需要-U命令。frida也支持依赖端口的远程连接模式,在某些场景下更加灵活。可以通过端口转发的方式实现此功能。

adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

27042是用于与frida-server通信的默认端口号,之后的每个端口对应每个注入的进程,检查27042端口可检测 Frida 是否存在。

抓包流程

本章节将介绍用tcpdump+frida+wireshark实现Android的全流量抓包,能实现https解密。

惯用的Android抓包手段是用fiddler/burpsuite/mitmproxy搭建代理服务器,设置Android代理服务器并用中间人劫持的方式获取http协议流量的内容,上述的抓包方式只能抓到http协议层以上的流量,这次我们来点不一样的,用tcpdump+frida+wireshark实现Android的全流量抓包,能实现https解密。

抓包及https解密方法

1. 搞定tcpdump

本文基于termux安装使用tcpdump,首先安装termux apk。打开termux运行

下载地址:https://f-droid.org/en/packages/com.termux/

  • 挂载存储

    termux-setup-storage
    ## 会弹出授权框,点允许
    ls ~/storage/
    ## 如果出现dcim, downloads等目录,即表示成功
    
    • 安装tcpdump

      pkg install root-repo
      pkg install sudo tcpdump
      
  • 运行抓包

    sudo tcpdump -i any -s 0 -w ~/storage/downloads/capture.pcap
    
  • tcpdump 成功截图

在这里插入图片描述

之后就可以把downloads目录下的抓包文件拷贝到电脑上,用wireshark打开做进一步分析。

2. 解密https流量

wireshark解密技术的重点在于拿到客户端通信的密钥日志文件(ssl key log),像下面这种:

在这里插入图片描述

在Android中实现抓取ssl key log需要hook系统的SSL相关函数,可以用frida实现。

  • 首先将下面的hook代码保存为sslkeyfilelog.js

    // 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加载运行hook

    frida -U -l .\sslkeyfilelog.js  -f 包名
    

在这里插入图片描述

  • 在运行Frida Hook获取sslkey的同时,运行tcpdump抓包.开始在模拟器端执行各种APP中的操作,例如登录、搜索等,这些数据包都会被抓取,操作完毕后,在adb shell中按Ctrl c关闭tcpdump抓包.最后,抓包结束后将得到的key保存到sslkey.txt,格式是下面这样的,不要掺杂别的。把抓到的capture.pcap导出来
CLIENT_RANDOM 557e6dc49faec93dddd41d8c55d3a0084c44031f14d66f68e3b7fb53d3f9586d 886de4677511305bfeaee5ffb072652cbfba626af1465d09dc1f29103fd947c997f6f28962189ee809944887413d8a20
CLIENT_RANDOM e66fb5d6735f0b803426fa88c3692e8b9a1f4dca37956187b22de11f1797e875 65a07797c144ecc86026a44bbc85b5c57873218ce5684dc22d4d4ee9b754eb1961a0789e2086601f5b0441c35d76c448

在这里插入图片描述
在这里插入图片描述

流量分析

wireshark下载地址:https://www.wireshark.org/download.html

抓包完成后,用wireshark打开tcpdump抓包获得的pcap文件,在wireshark首选项-protocols-TLS中,设置 (Pre)-Master-Secret log filename为上述sslkey.txt。
在这里插入图片描述

即可实现https流量的解密。

在上述步骤中拿到了解密后的流量,我们就能对XX的流量做进一步分析了。可以看到大量向服务器请求的数据包,但其中有很多干扰的图片请求,因为修改过滤器把图片过滤一下。过滤器:http && tcp.dstport==443 and !(http.request.uri contains ".webp" or http.request.uri contains ".jpg" or http.request.uri contains ".png")

结果清爽了很多。

在这里插入图片描述

查看包名

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

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

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

adb shell pm list packages -3

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

adb shell dumpsys window windows | findstr mFocusedApp

4、查看启动的app的包名

adb shell dumpsys activity top | find "ACTIVITY"

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

adb shell dumpsys activity activities | findstr "Run"

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

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

7、通过应用查看包名

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

网站公告

今日签到

点亮在社区的每一天
去签到