【学习笔记】在Android使用Frida进行https抓包

最近需要在Android进行https抓包,对数据解密,找了很多方法,终于成功了,不过原文一些步骤对于我这个小白还是有点不理解的地方,在此记录一下。

1. 前提条件

  • 一台root手机
  • frida环境

2. frida环境搭建

该步骤全程参考: [Frida入门教程] 一文搞定Frida环境搭建,基于逍遥模拟器(虚拟设备)和ADB(Android Debug Bridge),不过我没有使用模拟器,直接将手机连接到电脑。

以下列出踩坑点:

  1. 一开始忽略了 su,导致 ./fs 权限不够;
  2. 直接使用了作者给的 fs 文件,然而与我使用的设备型号并不匹配,因此一定要查询设备型号并下载特定的 fs文件
  3. 最后运行完./fs 保持该cmd窗口打开,重新打开第二个cmd窗口启动 tcpdump。

3. 开启抓包

接下来步骤全程参考: [Android 原创] 意外发现的Android硬核https抓包, 在多个app亲测ok, 自定义ssl也无用哦~

但我觉得里面步骤不够详细,在此记录一番。

  1. 打开第二个cmd窗口启动 tcpdump:

    // 列出已知设备
    adb devices
    // 链接设备
    adb shell
    // 开启su权限
    su
    // 切换目录
    cd /system/bin/
    // 开始tcpdump抓包
    tcpdump -i wlan0 -s 0 -w /sdcard/flow/qqBrowser03.pcap
    

    实际操作图:

    在这里插入图片描述

  2. 如果手机内没有tcpdump,需要先下载,这里不做介绍,应该蛮简单的。

4. hook app拿到sslkey

  1. 创建一个名为 sslkeyfilelog.js 的文件,用于获取SSL密钥文件日志:

    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')
    )
    // https://codeshare.frida.re/@k0nserv/tls-keylogger/
    
  2. 另外启动一个 cmd 窗口,在电脑上运行该脚本,启动 Frida 并注入到目标应用程序中。

    frida -U -f package -l ./sslkeyfilelog.js --no-pause
    

    这里, package 是一个占位符,代表目标应用程序的包名。 你需要将其替换为你实际想要分析的应用程序的包名。

    在安卓系统中,每个应用程序都有一个唯一的包名,用来标识应用程序的身份。 包名通常是以 com.example.app的形式表示,其中 com是公司或组织的名称, example是应用程序的名称, app是应用程序的类型。

    比如我要抓取安卓端 qq浏览器的访问流量,其包名就是:com.tencent.mtt

  3. 保存frida输出的打印信息到 sslkey.txt(这里我是手动复制并新建一个txt文件)。

    frida输出的打印信息示例:

    CLIENT_RANDOM 557e6dc49faec93dddd41d8c55d3a0084c44031f14d66f68e3b7fb53d3f9586d 886de4677511305bfeaee5ffb072652cbfba626af1465d09dc1f29103fd947c997f6f28962189ee809944887413d8a20
    CLIENT_RANDOM e66fb5d6735f0b803426fa88c3692e8b9a1f4dca37956187b22de11f1797e875 65a07797c144ecc86026a44bbc85b5c57873218ce5684dc22d4d4ee9b754eb1961a0789e2086601f5b0441c35d76c448
    CLIENT_RANDOM e1c1dcaaf73a8857ee60f5b38979084c3e95fdebd9791bbab985a8f954132426 41dcf3d5e41cb469494bf5014a1ecca9f40124f5728895265fadd38f8dc9d5ac15c5fa6588c1ea68f38476297fe76183
    CLIENT_RANDOM 66c4f37afb2152e3837c8a7c48ce51e8307e6739e1fe3efc542887bbcae4f02a bbafe4881084570af01bed59f95bfcf7bc49d2e55acbc7fe33c1e06f8ff0bc2e747c2c428e7cd13f1c77c2141085f951
    CLIENT_RANDOM 8d0d92154ee030486a2b13f9441f85ef33c5e06732fbb06a1ac81fe34b6f2ce3 8270b34eee784e7f7de45f39af36f26e6abf99bb52fa8350945e3ebf79dc1c53a0693c24b0780ce3a54d39fd4b5b5149
    CLIENT_RANDOM b5d58899346db525f14312cfb52c1247ed7adb710ae43428bd331ce27d77dbc1 9effd5b469ef6fdf7a056ea50fc3ff0fdf9fa40ae709805bea8678ddce404f211ed534623876a5c616f3e7bc43121f48
    CLIENT_RANDOM af1b3f9ba0b4c27756c93595eb54cac6f0d8c6e9e4f0fcb1a36c45f0cd12060d 696a6fff39bf6c9863901a2145703de948c37e1abf6b4c03628118bee11c292239304ee020c71ff31a293fc6b9439364
    CLIENT_RANDOM e2a3d8e6b638976aa27c8cf031be5e6b03cf7ffa573be101816d5103025d404b 2b006379423d7252c864a129b6c5a693b75d477dc5d3f894af5f02db755c4f6dd54470b659882871c62ce002792e211a
    CLIENT_RANDOM 1c8cfe911e2111d80dc81c275c791c04467e8d7bca16963acec6a20051429981 bf08334d973d44d80c8f4542c2356a5fd9e0d390afde0374179cc81dd82aaa15aae52604988e9c9616ad0795c79c81ed
    

    对于其他信息需要清除(教程说不要掺杂其他信息,我直接手动删除了)。

    实际操作图:

    在这里插入图片描述

5.配置 wireshark

此步骤参考如何使用wireshark抓取HTTPS数据包?,由于不是pc抓包,我们已经手动获取了 sslkey,因此直接从配置 wireshark 开始操作。

首先将抓取到的数据包放到电脑,并用 wireshark 打开。

操作:编辑---->首选项---->protocols---->TLS,选择到 tls 后将之前的 sslkey.txt导入。

在这里插入图片描述

这样就解密成功了,即正常看到数据包。

在这里插入图片描述

参考资料

  1. [Frida入门教程] 一文搞定Frida环境搭建,基于逍遥模拟器(虚拟设备)和ADB(Android Debug Bridge)
  2. [Android 原创] 意外发现的Android硬核https抓包, 在多个app亲测ok, 自定义ssl也无用哦~
  3. 如何使用wireshark抓取HTTPS数据包?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21298.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生命周期函数和wxs脚本

生命周期函数和wxs脚本 1. 生命周期函数1.1. 应用的生命周期函数1.2. 页面的生命周期函数 2. wxs脚本2.1. wxs与JavaScript的关系2.2. wxs内嵌脚本2.3. wxs外联脚本2.4. tips 1. 生命周期函数 1.1. 应用的生命周期函数 应用的生命周期函数:指小程序从启动 -> 运…

Hadoop 单机部署和测试(一)

Hadoop单机部署和测试 一.单机部署1.安装 JDK(JDK11)2.安装 HADOOP3.测试 一.单机部署 系统版本:cat /etc/anolis-release1.安装 JDK(JDK11) #!/bin/bashTOP_PATH$(pwd) JAVA_PATH/usr/local/java FILEls $TOP_PATH/…

mysql索引的简单使用

删除 goods 表中的 goods_desc 字段及货号字段,并增加 click_count 字段 在 goods_name 列上加唯一性索引(用alter table方式) alter table add unique index uniqididx(goods_name);去查看索引 发现有goods_name的唯一索引 在 shop_price 列上加普通…

Java中Map使用增强for循环和迭代器获取key和value

加油,新时代打工人! java中List集合三种获取集合元素方式 本文运行代码使用 jdk1.8 for 语句比较简单,用于循环数据。 Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合&#xff08…

mac桌面时钟 浮动 (python)

浮动时钟,多地时区 app store的都要钱,于是。。。。我们让chatgpt来实现一个吧: 数字: 代码: import sys import datetime import pytzfrom PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsView, QGr…

MySQL为什么要使用B+树做索引?MySQL索引存储模型推演,B+树在MySQL的落地形式

文章目录 一、什么是索引1、索引初体验2、索引图解3、索引类型 二、索引存储模型推演1、二分查找2、二叉查找树(BST Binary Search Tree)3、平衡二叉树(AVL Tree)(左旋、右旋)(1)平衡…

STL标准模板库 set容器

文章目录 迭代器迭代器的五大分类迭代器系列帮手函数一览 set容器打印任意 STL 容器的printer.hset与vectorset 和 vector 的区别set 和 vector 迭代器的共同点set 和 vector 迭代器的不同点 set 的排序set 的排序:string 会按“字典序”来排set 的排序:…

云计算UPS监控,怎么办?

在大型数据机房中,UPS系统扮演着关键的角色,为计算机和网络设备提供可靠的电力备份。由于数据机房的规模庞大且关键性强,监控UPS系统的可靠性和效率至关重要。 UPS监控可以提供实时的电池状态、负载信息、电网电压等监测数据,并能…

代码随想录打卡

这里写目录标题 1.数组部分1.1二分查找1.2移除元素1.3 有序数组的平方1.4长度最小的子数组1.5螺旋矩阵II 2. 链表部分2.1移除链表元素2.2设计链表2.3反转链表2.4两两交换相邻的节点2.5删除链表的倒数第n个节点2.6环形链表II2.7链表相交 3.哈希表 1.数组部分 1.1二分查找 class…

我司的短信接口被刷了

如何发现的 成本分摊系统,将成本分摊给业务部门时,业务部门对账,发现某一类型的短信用量上涨了100多倍 排查调用来源时,发现来源为C端用户,由于调用量异常高,业务反馈近期无活动,因此怀疑被刷…

服务器数据库中了360后缀勒索病毒怎么办,如何预防勒索病毒攻击?

随着网络技术的不断发展,企业的计算机服务器也受到了网络安全威胁,近日,很多企业的服务器被360后缀勒索病毒攻击,导致企业的数据库中的许多重要数据被加密,无法正常读取打开。360后缀勒索病毒数据BeijingCrypt勒索病毒…

请求响应-日期时间参数的接受

日期参数 由于从前端发送的请求中,日期的格式可能各不相同,使用DateTimeFormat注解完成日期参数格式的转换具体关键代码如下: 在postman中发出对应请求携带对应参数结果如下: 参数名称要与方法中的形参名称一致,免得…