31.第二阶段x64游戏实战-封包-线程发包

news2025/7/22 16:21:24

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:30.第二阶段x64游戏实战-认识网络数据包发送流程

代码跳转

ws2_32.send跳转send函数

ws2_32.sendto跳转sendto函数

ws2_32.WSASend跳转WSASend函数

注意跳转是区分大小写的,直接复制上面的就可以,其中ws2_32表示ws2_32模块,ws2_32.send表示ws2_32模块里的send函数

当前游戏用的是send函数发送的网络数据包,如下图在代码窗口按CTRL+G,然后输入 ws2_32.send然后点确定,它就跳转到了send函数里

send函数说明

搜索关键字

说明

第一个参数是套接字,套接字是网络连接的桥梁,就是我们的电脑和游戏公司的服务器只要有了套接字就可以互相访问了

第二个参数是发送的数据,也就是发送的网络数据包

第三个参数是发送的数据的长度

第四个参数是标志位,我们用不到,后面涉及到了会写说明(不要钻牛角尖,它不重要,不需要知道)

然后x64软件传参是用寄存器传参

rcx(第一个参数)套接字 rdx(第二个参数)数据包 r8(第三个参数)数据包长度 r9(第四个参数)标志位

这里要注意一件事,就是玩着玩着游戏,突然闪退了,然后不重新登录,过一段时间我们的角色就退出了,还有闪退之后重新登录的时候会提示角色以上线是否退出角色重新登录这种话语,然后多等一会重新登录就不会提示角色以上线这种话语,这个原因是,游戏会每个几秒会给服务器发送一个数据包用来告诉服务器角色还在线,当服务器一段时间收不到这个数据包就会给我角色下线,比如提示超时、网络连接错误等提示,写这么多想表达的是,我们在发送网络包函数上设置断点,会出现我们没有操作游戏(没有操作触发发送数据包的功能,比如打开设置窗口、背包、打开地图窗口)它也会在发送网络数据包的函数上断下来,所以要有一个感觉,就是要确保发送网络数据包的函数是我们触发的,比如发送聊天数据、移动、释放技能等,为了避免找半天找的不对,这个感觉很重要。

开始断点调试,设置断点

然后这个游戏它有一个防御,有一个概念,Windows系统打开多个窗口,它只会有一个活动窗口,活动窗口的意思现在打开了a窗口和b窗口,鼠标左键单击a窗口,活动窗口就是a窗口,鼠标左键单击b窗口,活动窗口就是b窗口,鼠标左键单机窗口时会有一个激活(Windows中叫得到焦点)操作,只要鼠标左键单击了窗口它就会有激活这个动作,没办法关,所有窗口都有,这个游戏当窗口激活时会发送一个网络数据包(这种称为心跳),来扰乱我们,所以接下来就是想办法跳过激活窗口发送的网络数据包。

下面开始,上方写了send函数的介绍,rdx是第二个参数,第二个参数是发送的网络数据包,如下图选择转到内存窗口,r8是第三个参数,第三个参数是数据包的长度0xE

然后它的数据是80555,然后按F9让代码运行起来,然后再次点击游戏窗口触发断点,它还是80555,并且数据包的长度也没有变化一直是0xE,也就是说激活窗口发送的数据包是固定的,是固定的就可以使用条件断点了

鼠标右击选择设置条件断点

然后输入r8!=0xE,设置完之后,激活窗口的数据包就不会断下来的,再自动断下来的就是游戏内部的数据包了,比如心跳

如下图是通过发送聊天数据触发的断点

然后点击调用堆栈,下图是发送聊天数据的调用堆栈

下图是通过走路发送的数据包

它的堆栈,可以发现一个事情,走路的调用堆栈和发送聊天数据的调用堆栈是一模一样的,这就很奇怪两个不同的功能一个是发送聊天数据,一个是走路,调用的函数却一模一样

一模一样的原因是,这个游戏发送数据包操作用最少三个线程支持,如下图加密完的数据包,写到一个内存空间里就完事了,然后发送数据包也就是send函数,它会不断的读取存放数据包的内存空间,里面只要有数据它就发送网络数据包,然后上面的断点是在send函数,所以移动和发送聊天数据调用的函数(调用堆栈)一模一样,这种情况就被称为线程发包

然后怎么追加密数据包的位置?发送网络数据包的内存地址是不变的,所以对这个内存地址设置硬件写入断点,就可以找到加密的位置了,这里注意硬件断点,不能设置条件,所以硬件断点会是激活窗口触发的(这个没事,下一节就会写怎么办)

然后就来到了下图位置

然后如下图,可以看到它写入的是word是2字节,所以这里多半是复制数据的函数(就是把存放数据包的内存里的数据写到发送数据包函数里或者说线程里)

然后删除断点

然后按CTRL+F9,再按F8,可以看到确实是在复制函数里memmove

memmove函数说明,将一个缓冲区移动到另一个缓冲区,这意思就是剪切操作(复制完删除)


img

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

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

相关文章

Unity数字人开发笔记

开源工程地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758,开放这个源码 一、建立工程 建立Unity工程(UnityAiChat)拖入Unity-AI-Chat-Toolkit.unitypackage打开chatSample工程,可…

嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突

故障现象 今天开发STM32G431时遇到一个问题,板子打样回来后,焊接完成,可以烧程序,可以读FLASH,却死活不能运行,也不能进仿真调试。 故障定位 经过排查,发现将隔离芯片π121M31拆除&#xff0…

程序环境与预处理

一、程序的翻译环境和执行环境 翻译环境:将源代码转化为可执行的机器指令 执行环境:执行代码 1、翻译环境 流程: 二、运行环境 程序执行过程: 三、预编译阶段 1、预定义符号 __FILE__ //进行编译的原文件名 __LINE__ //文…

《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》

【作者简介】“琢磨先生”--资深系统架构师、985高校计算机硕士,长期从事大中型软件开发和技术研究,每天分享Java硬核知识和主流工程技术,欢迎点赞收藏! 一、单例模式的核心概念与设计目标 在软件开发中,我们经常会遇…

全志F1c200开发笔记——移植根文件系统

1.下载buildroot Index of /downloads/ 使用2018.02.11版本 直链下载 https://buildroot.org/downloads/buildroot-2018.02.11.tar.gz 2.配置 进入buildroot压缩包目录下,使用命令解压并进入工作目录 tar -xf buildroot-2018.02.11.tar.gz cd buildroot-2018.…

[yolov11改进系列]基于yolov11引入自注意力与卷积混合模块ACmix提高FPS+检测效率python源码+训练源码

[ACmix的框架原理] 1.1 ACMix的基本原理 ACmix是一种混合模型,结合了自注意力机制和卷积运算的优势。它的核心思想是,传统卷积操作和自注意力模块的大部分计算都可以通过1x1的卷积来实现。ACmix首先使用1x1卷积对输入特征图进行投影,生成一组…

Java NIO编程:构建高性能网络应用

1.Java NIO 核心概念与架构 1. 传统 BIO 与 NIO 的对比 特性 BIO (Blocking I/O) NIO (Non-blocking I/O) I/O 模型 阻塞 非阻塞 / 异步 线程模式 每个连接一个线程 单线程管理多个连接 数据处理单位 字节流 / 字符流 缓冲区 (Buffer) 核心组件 Socket, ServerSoc…

如何实现高性能超低延迟的RTSP或RTMP播放器

随着直播行业的快速发展,RTSP和RTMP协议成为了广泛使用的流媒体传输协议,尤其是在实时视频直播领域,如何构建一个高性能超低延迟的直播播放器,已经成为了决定直播平台成功与否的关键因素之一。作为音视频直播SDK技术老兵&#xff…

C语言数据结构-单向链表

头文件&#xff1a;link.h #ifndef __LINK_H__ #define __LINK_H__ #include <stdio.h> #include <stdlib.h> typedef int DataType; /*节点数据类型*/ typedef struct node { DataType data; //数据域 struct node *pNext; //指…

小样本分类新突破:QPT技术详解

问题导向式提示调优(QPT) 这篇论文主要讲了一个针对小样本(数据量少)文本分类问题的新方法,叫问题导向式提示调优(QPT)。 核心思路是让预训练语言模型(比如BERT的升级版RoBERTa)在少量标注数据下,通过设计特定的“提问式模板”和“标签词扩展技术”来提升分类效果。…

Excel常用公式全解析(1):从基础计算到高级应用

Excel常用公式全解析&#xff1a;从基础计算到高级应用 目录 Excel常用公式全解析&#xff1a;从基础计算到高级应用[toc](目录)一、基础计算类&#xff1a;数据运算的基石1. 求和公式&#xff08;SUM&#xff09;2. 平均值公式&#xff08;AVERAGE&#xff09;3. 最值与计数公…

与 PyCharm 官方沟通解决开发环境问题记录(进展:官方已推出2个新的修复版本)

​​​​​​主题&#xff1a;有关 PyCharm 中终端和环境激活问题的反馈&#xff1a;PY-81233 前言 目前进展&#xff1a; 官方已有2个修复版本推出测试。 更新方法&#xff1a; 使用JetBrains Toolbox App&#xff0c;如下图所示&#xff0c;从“其他版本”进入查看更新。…

taro + vue3 实现小程序sse长连接实时对话

前言 taro.request是可以实现sse长连接的&#xff0c;但是呢其中有俩大坑&#xff0c;找了许多资料也没解决&#xff0c;后续解决办法也与后端商量改用WebSocket来实现。 代码实现 SSEManager.js: import { getAccessToken } from "../xx/xx"; import { TextDecode…

使用MATLAB求解微分方程:从基础到实践

使用MATLAB求解微分方程&#xff1a;从基础到实践 微分方程是描述自然界和工程领域中许多现象的重要数学工具。MATLAB提供了强大的工具来求解各种类型的微分方程。本文将介绍如何使用MATLAB求解常微分方程(ODE)。 1. 基本ODE求解器 MATLAB提供了多种ODE求解器&#xff0c;最…

如何在 Windows 和 Mac 上擦拭和清洁希捷外置硬盘

希捷外置硬盘广泛用于存储目的&#xff0c;但有时您可能出于多种目的需要擦除或清洁希捷外置硬盘&#xff0c;例如转售、重复使用、捐赠等。为了释放硬盘上的存储空间或确保没有人可以从硬盘中恢复您的信息&#xff0c;擦除硬盘是必要的步骤。无论您使用的是 Windows 还是 Mac&…

第三届黄河流域网安技能挑战赛复现

Web 奶龙牌图片处理器2.0 这题&#xff0c;之前只了解过 .user.ini 文件&#xff0c;并为遇到实操题 但赛前差点就做到下面这题了&#xff0c;不多说&#xff0c;复现之前先看看下面这题 靶场&#xff1a; 攻防世界 没错&#xff0c;又做上文件上传题了&#xff0c;别看…

python 生成复杂表格,自动分页等功能

py&#xff54;&#xff48;&#xff4f;&#xff4e; 生成复杂表格&#xff0c;自动分页等功能 解决将Python中的树形目录数据转换为Word表格&#xff0c;并生成带有合并单元格的检测报告的问题。首先&#xff0c;要解决“tree目录数据”和“Word表格互换”&#xff0c;指将树…

【文献阅读】EndoChat: Grounded Multimodal Large Language Model for Endoscopic Surgery

[2501.11347] EndoChat: Grounded Multimodal Large Language Model for Endoscopic Surgery 2025年1月 数据可用性 Surg-396K 数据集可在 GitHub - gkw0010/EndoChat 公开获取。 代码可用性 EndoChat 的代码可在 GitHub - gkw0010/EndoChat 下载。 摘要 近年来&#xff…

React JSX语法介绍(JS XML)(一种JS语法扩展,允许在JS代码中编写类似HTML的标记语言)Babel编译

在线调试网站&#xff1a;https://zh-hans.react.dev/learn 文章目录 JSX&#xff1a;现代前端开发的声明式语法概述JSX的本质与工作原理什么是JSXJSX转换流程 JSX语法特性表达式嵌入&#xff08;JSX允许在大括号内嵌入任何有效的JavaScript表达式&#xff09;属性传递&#xf…

【R语言编程绘图-箱线图】

基本箱线图绘制 使用ggplot2绘制箱线图的核心函数是geom_boxplot()。以下是一个基础示例&#xff0c;展示如何用iris数据集绘制不同物种&#xff08;Species&#xff09;的萼片长度&#xff08;Sepal.Length&#xff09;分布&#xff1a; library(ggplot2) ggplot(iris, aes(…