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

🛫 系列文章导航

  • 【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.mzph.cn/news/799270.shtml

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

相关文章

实现第一个动态链接库 游戏插件 成功在主程序中运行 dll 中定义的类

devc 5.11编译环境 dll编译环境设置参考 Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 插件 DLL代码和主程序代码如下 注意 dll 代码中的class 类名需要 和主程序 相同 其中使用了函数指针和强制类型转换 函数指针教程参考 以动态库链接库 .dll 探索结构体…

HBase详解(2)

HBase 结构 HRegion 概述 在HBase中,会从行键方向上对表来进行切分,切分出来的每一个结构称之为是一个HRegion 切分之后,每一个HRegion会交给某一个HRegionServer来进行管理。HRegionServer是HBase的从节点,每一个HRegionServ…

elementPlus el-table动态列扩展及二维表格

1、循环列数据源&#xff0c;动态生成列 <template><div><el-table ref"table" :data"pageData.tableData" stripe style"width: 100%"><el-table-column v-for"column in pageData.columns" :key"column.p…

尚硅谷html5+css3(1)html相关知识

1.基本标签&#xff1a; <h1>最大的标题字号 <h2>二号标题字号 <p>换行 2.根标签<html> 包括<head>和<body> <html><head><title>title</title><body>body</body></head> </html> 3…

162 Linux C++ 通讯架构实战16,UDP/TCP协议的优缺点,使用环境对比。UDP 服务器开发

UDP/TCP协议的优缺点 TCP :面向连接的&#xff0c;可靠数据包传输。对于不稳定的网络层&#xff0c;采取完全弥补的通信方式。丢包重传 优点&#xff1a;稳定&#xff0c;数据流量稳定&#xff0c;速度稳定&#xff0c;顺序稳定 缺点&#xff1a;传输速度慢&…

青藏铁路双寨物流基地扩能改造工程接触网第一杆成功组立

4月2日凌晨&#xff0c;随着吊钩缓缓落下&#xff0c;在中铁电气化局北京电化公司现场作业人员的紧张操作下&#xff0c;青藏铁路双寨物流基地扩能改造工程首根接触网支柱稳稳落在基础上&#xff0c;标志着双寨物流基地扩能改造进入全面施工阶段。 双寨物流基地扩能改造工程包含…

Part1.Transformer架构

构成&#xff1a; 【手把手教你用Pytorch代码实现Transformer模型&#xff01;从零解读(Pytorch版本&#xff09;-哔哩哔哩】 https://b23.tv/o283hzU

JavaScript逆向爬虫——使用Python模拟执行JavaScript

使用Python模拟执行JavaScript 通过一些调试&#xff0c;我们发现加密参数token是由encrypt方法产生的。如果里面的逻辑相对简单的话&#xff0c;那么我们可以用Python完全重写一遍。但是现实情况往往不是这样的&#xff0c;一般来说&#xff0c;一些加密相关的方法通常会引用…

摄像头校准漫反射板提高识别物体

摄像头校准漫反射板是一种用于摄像头校准的重要工具。在摄像头成像过程中&#xff0c;由于各种因素的影响&#xff0c;如光线、角度、镜头畸变等&#xff0c;会导致摄像头成像出现偏差。为了消除这些偏差&#xff0c;提高摄像头的成像质量&#xff0c;需要使用摄像头校准漫反射…

从头开发一个RISC-V的操作系统(四)嵌入式开发介绍

文章目录 前提嵌入式开发交叉编译GDB调试&#xff0c;QEMU&#xff0c;MAKEFILE练习 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于&#xff1a;[完结] 循序渐进&#x…

第十四讲:C语言字符函数和字符串函数

目录 1. 字符分类函数 2、字符转换函数 3. strlen的使⽤和模拟实现 4. strcpy 的使⽤和模拟实现 5. strcat 的使⽤和模拟实现 6. strcmp 的使⽤和模拟实现 7. strncpy 函数的使⽤ 8. strncat 函数的使⽤ 9. strncmp函数的使⽤ 10. strstr 的使⽤和模拟实现 11. strt…

mysql的索引类型与数据存储

mysql索引与类型 什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。我们可以简单理解为&#xff1a;快速查找排好序的一种数据结构。Mysql索引主要有两种结构&#xff1a;BTree索引和Hash索引。我们平常所说的索引&#xff0c;如…

校园圈子小程序,大学校园圈子,三段交付,源码交付,支持二开

介绍 在当今的数字化时代&#xff0c;校园社交媒体和在线论坛成为了学生交流思想、讨论问题以及分享信息的常用平台。特别是微信小程序&#xff0c;因其便捷性、用户基数庞大等特点&#xff0c;已逐渐成为构建校园社区不可或缺的一部分。以下是基于现有资料的校园小程序帖子发…

(已解决)引入本地bootstrap无效,bootstrap和jquery的引入

问题&#xff1a; 首先我是跟着张天宇老师下载的bootstrap文件&#xff0c;新建了一个css文件夹&#xff0c;但是这样子<link rel"stylesheet" type"text/css" src"./css/bootstrap.css">在index.html引入没有用。 解决办法: 1.把建立的…

【opencv】示例-dft.cpp 该程序演示了离散傅立叶变换 (dft) 的使用,获取图像的 dft 并显示其功率谱...

#include "opencv2/core.hpp" // 包含OpenCV核心功能头文件 #include "opencv2/core/utility.hpp" // 包含OpenCV实用程序头文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理头文件 #include "opencv2/imgcodecs.hpp" // 包…

CSS 学习笔记 总结

CSS 布局方式 • 表格布局 • 元素定位 • 浮动布局&#xff08;注意浮动的负效应&#xff09; • flex布局 • grid布局&#xff08;感兴趣的可以看下菜鸟教程&#xff09; 居中设置 元素水平居中 • 设置宽度后&#xff0c;margin设置为auto • 父容器设置text-alig…

积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路(优化前一万多导出失败,优化后支持百万级跨库表导出)

文章目录 积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路&#xff08;优化前一万多导出失败&#xff0c;优化后支持百万级跨库表导出&#xff09;优化结果需求背景和解决方案的思考解决方案流程描述&#xff1a;关键代码引入easy excel新建…

Linux云计算之Linux基础3——Linux系统基础2

1、终端 终端(terminal)&#xff1a;人和系统交互的必要设备&#xff0c;人机交互最后一个界面&#xff08;包含独立的输入输出设备&#xff09; 物理终端(console)&#xff1a;直接接入本机器的键盘设备和显示器虚拟终端(tty)&#xff1a;通过软件方式虚拟实现的终端。它可以…

Docker 引擎离线安装包采集脚本

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

基于SSM的宠物管理系统

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/89076676?spm=1001.2014.3001.5503 技术:SSM(Spring+SpringMVC+MyBatis)+LayUI+Echarts技术栈,分页采用pagehelper插件,EasyExcel进行Excel文件的导入导出。 宠物管理系统 1 CHINER-宠物管理系…