【Frida】【Android】 10_爬虫之WebSocket协议分析

news2025/1/24 14:45:50

🛫 系列文章导航

  • 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
  • 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
  • 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
  • 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
  • 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826
  • 【Frida】【Android】 06_夜神模拟器中间人抓包 https://blog.csdn.net/kinghzking/article/details/137162859
  • 【Frida】【Android】 07_爬虫之网络通信库HttpURLConnection https://blog.csdn.net/kinghzking/article/details/137211973
  • 【Frida】【Android】 08_爬虫之网络通信库okhttp3 https://blog.csdn.net/kinghzking/article/details/137227041
  • 【Frida】【Android】 09_爬虫之Socket https://blog.csdn.net/kinghzking/article/details/137284648
  • 【Frida】【Android】 10_爬虫之WebSocket协议分析 https://blog.csdn.net/kinghzking/article/details/137470904
  • 【Frida】【Android】 工具篇:ZenTracer https://blog.csdn.net/kinghzking/article/details/137284648

▒ 目录 ▒

    • 🛫 系列文章导航
    • 🛫 导读
      • 开发环境
    • 1️⃣ WebSocket简介
    • 2️⃣ 搭建环境
      • 服务器
      • Android端
      • 命令行客户端
    • 3️⃣ 发送封包分析
      • App操作步骤
      • Socket尝试【失败】
      • okhttp3尝试
    • 4️⃣ 接收封包分析
      • Socket尝试
      • WebSocketService.onMessage
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2024-03-24
操作系统Win11 - 22H222621.2715
node -vv20.10.0
npm -v10.2.3
夜神模拟器7.0.5.8
Android9
python3.9.9
frida16.2.1
frida-tools12.3.0
objection1.11.0
gotify-windows-amd64.exe -v2.4.0@2023-09-17-08:24:00
gotify-cli-windows-amd64.exe -v2.2.3
Gotify.apk2.7.1com.github.gotify

1️⃣ WebSocket简介

WebSocket协议是为了改善HTTP中通信只能由客户端发起的弊端而产生的。

  • 在HTTP协议下,如果服务器存在连续的状态变化,那么客户端要想获取这种状态变化会十分麻烦,要解决这样的困境,只能使用“轮询”,即每隔一段时间发出一次询问,以了解服务器有没有新的信息。
  • WebSocket协议出现后,很好地解决了上述问题:首先,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,实现了服务器与客户端真正的双向平等对话,即全双工通信,这种通信方式为客户端获取服务端的状态变化提供了极大的方便。其次,与传统的HTTP这种非持久化的协议相比,WebSocket在建立连接后能够保持持久化连接,不需要向HTTP一样在一次请求中只能一个request对应一个response,极大地节约了每次发送请求需要重新建立连接所消耗的性能。
  • 需要声明的是,与Socket不同,WebSocket是一种端对端的通信方式,它只是借鉴了Socket的全双工通信的思想,本身仍然是建立在TCP之上的一种应用层协议

2️⃣ 搭建环境

针对WebSocket协议,笔者在gotify官网上找了一个应用用于测试。这个项目是一个开源的基于WebSocket的即时通信系统,提供了相应的客户端与服务器,整个项目的源代码存储在GitHub上,网址是https://github.com/gotify。
也可以使用本节内容的绑定资源。

服务器

下载服务器软件包https://github.com/gotify/server/releases并解压,直接双击gotify-windows-amd64.exe即可
在这里插入图片描述

Android端

  • 从gotify的Android版本页面https://github.com/gotify/android/releases下载并安装最新版的Android客户端。
  • 查看主机ip,192.168.242.66;在输入框中输入http://192.168.242.66/,点击Check URL按钮
    在这里插入图片描述
  • 忽略弹出的警告信息,输入用户名admin,密码admin
    在这里插入图片描述
  • 点击Login,然后在弹出窗口中点击Create按钮
    在这里插入图片描述
  • 最后进入Gotify界面。
    在这里插入图片描述

ps: 如果操作中弹出下面内容,表示无法连接网络。
在主机上请求http://192.168.242.66/version,可以正常访问,所以猜测是防火墙的问题。
在这里插入图片描述
将防火墙关闭即可正常访问了:
在这里插入图片描述

命令行客户端

为了让Android端接收到消息,我们需要下载gotify命令行客户端https://github.com/gotify/cli/releases。

  • 打开CMD命令行窗口
  • 输入命令gotify init完成gotify配置的初始化
    • 依次输入服务器端的网址
    • 配置访问方式(这里选择用户名+密码的方式)
    • 用户名和密(admin/admin
    • Application name(用户随意)
    • 优先级别
      在这里插入图片描述
  • 发送消息
    执行命令gotify-cli-windows-amd64.exe p "内容" -t "标题"
    其中,p参数后跟着的是想发的信息,-t参数后跟着的是消息的标题title。
  • 最后,我们在App中可以看到如下内容:
    在这里插入图片描述
    至此,整个WebSocket的分析环境就搭建完毕了。

3️⃣ 发送封包分析

App操作步骤

  • 点击App左上角的三个点,打开菜单
  • 在菜单中,点击Push message按钮,打开发送界面
    在这里插入图片描述
  • 输入Title、Content,点击Push Message即可
    在这里插入图片描述

Socket尝试【失败】

根据之前的文章《【Frida】【Android】 09_爬虫之Socket https://blog.csdn.net/kinghzking/article/details/137284648》 ,我们可以知道最终封包会调用java.net.SocketOutputStream.write将封包发送出去,我们通过objection拦截该函数,查看堆栈内容。

  • objection连接
    objection -g com.github.gotify explore
  • hook 函数 java.net.SocketOutputStream.write
    android hooking watch class_method java.net.SocketOutputStream.write --dump-args --d ump-return --dump-backtrace
  • 通过gotify命令行客户端,发送消息,我们可以看到下面堆栈内容:
    在这里插入图片描述

结论:

  • 堆栈中,没有找到想要的方法!!!(独立线程,参数被封装到别的地方了)
  • 但是我们发现App中使用了okhttp3库,接下来对其进行分析。

okhttp3尝试

根据文章《【Frida】【Android】 08_爬虫之网络通信库okhttp3 https://blog.csdn.net/kinghzking/article/details/137227041》,我们可以尝试hook函数okhttp3.OkHttpClient.newCall。
android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-return --dump-backtrace

  • 再次发送消息,可以看到如下内容:
    在这里插入图片描述
    这就是我们需要的内容了,到此未知即可拦截我们想要的内容了。

ps: 有兴趣的,可以根据下面堆栈信息,编写frida脚本获取更详细的信息。
在这里插入图片描述

4️⃣ 接收封包分析

Socket尝试

根据之前的Socket分析,我们hook函数java.net.SocketInputStream.read:
android hooking watch class_method java.net.SocketInputStream.read --dump-args --dump-return --dump-bac ktrace
打印堆栈如下所示:
在这里插入图片描述

我们可以看到关键函数com.github.gotify.service.WebSocketService.onMessage

WebSocketService.onMessage

hook函数com.github.gotify.service.WebSocketService.onMessage
android hooking watch class_method com.github.gotify.service.WebSocketService.onMessage --dump-args --dump-return --dump-backtrace
可以看到下面结果:
在这里插入图片描述
可见,com.github.gotify.service.WebSocketService.onMessage就是我们需要的关键函数。

📖 参考资料

  • objection地址:https://github.com/sensepost/objection

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LDR6328助力Type-C普及,便捷充电,绿色生活更精彩

随着科技的进步和全球统一接口的需求,Type-C接口正日益受到青睐。越来越多的设备正选择采纳这一先进的接口设计,它的普及无疑在改善着我们的日常生活。 在过往,许多小功率设备如小风扇、蓝牙音箱、桌面台灯以及家用加湿器等,都普遍…

STC89C51学习笔记(五)

STC89C51学习笔记(五) 综述:文本讲述了代码中速写模板的创建、如何将矩阵键盘的按键与数字一一对应以及如何创建一个矩阵键盘密码锁。 一、速写模板 点击“templates”,再鼠标右键选择配置,按照以下方式即可修改一些…

Linux初学(十七)redis

一、简介 redis就是一个内存数据库 redis中的数据,都是保存在内存中 端口:6379 二、安装redis 方法一:编译安装 方法二:yum安装-epel 第一步:配置epel源 详见:http://t.csdnimg.cn/AFl1K第二步&#xff1a…

为什么苹果 Mac 电脑需要使用清理软件?

尽管 Apple Mac 电脑因其卓越的性能、简洁高效的 macOS 操作系统及独特的美学设计备受全球用户青睐,但任何电子设备在长期使用后都难以避免面临系统资源日渐累积的问题。其中一个重要维护需求在于,随着使用时间的增长,Mac电脑可能会由于系统垃…

【CicadaPlayer】demuxer_service的简单理解

G:\CDN\all_players\CicadaPlayer-github-0.44\mediaPlayer\SMPMessageControllerListener.cppplayer的demuxer服务类 std::unique_ptr<demuxer_service> mDemuxerService{nullptr};根据option (Cicada::options),可以决定音视频的不同操作,通过 hander可以获得具体使…

Svg Flow Editor 原生svg流程图编辑器(五)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;一&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;三&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;四&#xf…

MySQL高级篇(存储引擎InnoDB、MyISAM、Memory)

目录 1、存储引擎简介 1.1、查询建表语句&#xff0c;默认存储引擎&#xff1a;InnoDB 1.2、查看当前数据库支持的存储引擎 1.3、创建表&#xff0c;并指定存储引擎 2、 存储引擎-InnoDB介绍 2.1、存储引擎特点 3、MyISAM存储引擎 4、Memory存储引擎 5、InnoDB、MyISAM、Memory…

AcWing刷题-公约数

公约数 代码 from math import gcd a, b map(int, input().split()) p int(input()) max_gcd gcd(a, b) res []for i in range(1, int(max_gcd**0.5)1):if max_gcd % i 0:res.append(i) res.append(max_gcd//i) res sorted(set(res))for _ in range(p):l, r map(int,…

【ArcGIS微课1000例】0108:ArcGIS计算归一化差值植被指数

本文讲解ArcGIS中,基于Landsat8数据的NDVI归一化差值植被指数计算。 文章目录 一、加载数据二、归一化植被指数NDVI1. NDVI介绍2. NDVI计算三、注意事项一、加载数据 加载配套数据0108.rar中的Landsat8的8个单波段数据,如下所示: Landsat8波段信息对照表如下表所示: 接下来…

8.排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序)的模拟实现

1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

怎么保证缓存与数据库的最终一致性?

目录 零.读数据的标准操作 一.Cache aside Patten--旁路模式 二.Read/Write Through Pattern--读写穿透 三.Write Back Pattern--写回 四.运用canal监听mysql的binlog实现缓存同步 零.读数据的标准操作 这里想说的是不管哪种模式读操作都是一样的&#xff0c;这是一种统一…

MongoDB初探:安装与图形化界面保姆级使用指南

文章目录 前言一、MongoDB下载安装下载解压配置环境变量打开mongoDB 二、配置本地MongoDB服务创建文件下载服务测试服务 三、图形化界面Compass GUINavicat GUI 总结 前言 MongoDB是一种流行的开源、面向文档的NoSQL数据库程序。与传统的关系型数据库不同&#xff0c;MongoDB将…

微信小程序备案指南及注意事项

如何备案小程序&#xff1f; 原文可参考&#xff1a; 微信小程序备案指南及注意事项 注意&#xff1a;备案需要提前准备好以下材料&#xff1b; 身份证正反面照片&#xff08;必须&#xff09;&#xff1b;营业执照照片&#xff08;非个人主体需要&#xff09;&#xff1b; 一…

非机构化解析【包含PDF、word、PPT】

此项目是针对PDF、docx、doc、PPT四种非结构化数据进行解析&#xff0c;识别里面的文本和图片。 代码结构 ├── Dockerfile ├── requirements ├── resluts ├── test_data │ ├── 20151202033304658.pdf │ ├── 2020_World_Energy_Data.pdf │ ├── …

AI大模型下的策略模式与模板方法模式对比解析

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;设计模式深度解析&#xff1a;AI大模型下…

【C++入门】缺省参数、函数重载与引用

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Severt和tomcat的使用(补充)

打包程序 在pom.xml中添加上述代码之后打包时会生成war包并且包的名称是test 默认情况打的是jar包.jar里量但是tomcat要求的是war包. war包Tomcat专属的压缩包. war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html, css, js) 点击其右边的m…

WPS二次开发系列:WPS SDK实现文档打印功能

在办公场景或者家教场景中经常碰到需要对文档进行打印的能力&#xff0c;今天给大家带来一篇如何通过WPS SDK调用WPS打印接口实现文档打印能力 最终实现效果图 实现步骤 2.1. 申请集成资料 通过向WPS官方发送邮件申请&#xff0c;审批通过后即可获取集成相关资料&#xff0c;详…

数据备份的演变:数字时代的一个关键方面

微信关注获取更多内容 数据备份至关重要&#xff0c;涵盖了其过去、现在和未来&#xff0c;是数字时代任何企业运营的一个重要方面。 如今&#xff0c;公司运营的几乎每个方面&#xff0c;从客户信息到内部财务数据&#xff0c;都以数字方式存储。 有鉴于此&#xff0c;数据…

视频压缩软件都有哪些?分享4款专业的视频软件!

在数字化时代&#xff0c;视频已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着视频质量的不断提升&#xff0c;其占用的存储空间也在迅速增长。为了解决这个问题&#xff0c;视频压缩软件应运而生。本文将为您介绍几款热门的视频压缩软件&#xff0c;帮助您选择最适…