103.网游逆向分析与插件开发-网络通信封包解析-网络完成端口模型的流程

本文主要是介绍103.网游逆向分析与插件开发-网络通信封包解析-网络完成端口模型的流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容参考于:易道云信息技术研究院VIP课

上一个内容:解读喊话道具数据包并且利用Net发送

通过之前的内容,把游戏的网络通信中关于发送数据的分析好了(任意涉及网络的应用程序里发送数据的数据包定位与分析都可以参考之前的内容),接下来要看它接收数据的处理,为什么要看接收数据?比如做一个聊天然后别人给你发送了一个消息,就要把别人说的话放到我们的聊天框里,这个时候有两种思路,第一种是处理内存,第二种就是通过网络来处理,这里就通过解读网络通信来实现。

这里就需要利用游戏(应用程序)接收数据的位置来看

首先要了解一下Recv 与 WSARecv,

Recv:

Recv是一个单线程接收数据的方式它与Send函数配合使用,Recv是单线程的,然后接收数据需要不断的循环,直到接收到数据,这个循环导致的效果就是应用程序卡死,所以一般高并发使用Recv需要使用多线程,开启一个线程,让这个线程不断的循环去Recv,然后把Recv到的数据放到一个队列里,然后由其它线程读取队列数据然后使用数据。

WSARecv:

使用WSARecv实际就是为了注册一个事件,调用了WSARecv并不会得到数据,想要获取数据需要通过回调函数得到,这个回调函数是通过消息机制出发,比如完成端口,往下看完成端口在下面解释了

完成端口一个流程:例子(iocp简单例子-带网络,基于iocp(完成端口)的线程安全队列-无网络纯iocp)

首先创建完成端口:CreateIoCompletionPort // 它是一个句柄

然后建立网络连接

然后投递完成端口:WSARecv // 注册一个事件接收消息

然后再启动一个线程:

  这个线程负责不停的查询完成端口的状态,也就是写一个循环:使用GetQueuedCompletionStatus

  这时如果完成端口有消息,就可以立马得到响应,然后通过重叠结构得到要做什么操作,GetQueuedCompletionStatus里WSASend、WSARecv、AcceptEx这三个操作都会得到(得到的不止这三个),然后就能得到 WSASend、WSARecv、AcceptEx 分别注册的消息,然后通过这注册的消息,去做对应的逻辑,也就是在 GetQueuedCompletionStatus 后面就可以找到 WSARecv这个操作,然后紧跟着数据解密(如果有加密的话),数据处理(就是数据解密完可以用了)

然后这次的WSARecv响应完成,如果还想下次被响应,那么还要再调用WSARecv注册一个消息,它跟Recv的逻辑是相反的,Recv是接收到数据然后处理,这个处理可能输多线程的,而完成端口是先接收数据(WSARecv)然后在 GetQueuedCompletionStatus 才真正得到数据然后处理。

然后现在有几条路,第一条是从GetQueuedCompletionStatus 里注册WSARecv的位置往前找,因为既然调用了WSARecv就说明处理完了数据,那么就往前看,第二条是通过 GetQueuedCompletionStatus往后找,然后找到跟WSARecv有关的过程,然后它们中间的过程就是我们要找的,这时就要找突破口,明文的数据与数据长度

然后网络的逆向如果不懂,那就说明正向的网络也不会写,这时就要去了解C++开发Windows服务器用的哪些API和Windows网络客户端怎么写用了哪些API,写一遍就可以懂了,因为你用的API是什么那些公司里也用什么,API是Windows的所以这是绝对不会变的,能用的函数就那些,大家也都用它们

如果不想采坑就看下面两个:去里面根据 GetQueuedCompletionStatus 关键字去找怎样使用

1.iocp简单例子-带网络

2.基于iocp(完成端口)的线程安全队列-无网络蠢iocp

1里现在只有服务端,客户端待补充,2里面没有用网络只用了iocp(可搜索 PostQueuedCompletionStatus关键字,查看纯iocp怎样使用)

这篇关于103.网游逆向分析与插件开发-网络通信封包解析-网络完成端口模型的流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723271

相关文章

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc