98.网游逆向分析与插件开发-网络通信封包解析-定位明文发送数据的关键函数

本文主要是介绍98.网游逆向分析与插件开发-网络通信封包解析-定位明文发送数据的关键函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

上一个内容:项目需求与需求拆解

通过上一个内容有了对网络通信架构有一个简单认识了解,对于我们重要的点是 组织数据 到 加密数据之间的过程,这个过程的数据我们是可以看懂的,加密之后的数据我们就看不懂了

通过聊天系统来下手,聊天系统可以指定内容,也就是明文的内容是可以指定的

然后数据包里除了要发送的明文以外还有几个重要的东西:

发送数据的内容里会有数据包的地址,然后不可能把这个地址后面的数据全部发送

所以有两点第一点有一个指针并且指向数据包,第二点有一个是数据包的长度,指针和长度是成对出现的

首先来到WSASend函数打断点,然后在游戏聊天框里发送一个消息,让它断下来

然后ctrl + f9再按f8,来到了下图位置,很明显这里不是我们要找的

然后ctrl + f9再按f8,然后来到下图位置,然后按f9,这时要确保所有的断点都取消,然后在下图打了断点的位置打断点,然后再次在游戏中的聊天框发送一个消息,看看它的栈有没有我们的消息

很明显,它没有,然后把这里的断点取消掉

然后ctrl + f9再按f8,来到下图位置,这时还是确保除了下图位置的断点其余断点全部取消,

这时它的栈也还是没有我们的消息,然后把这里的断点取消掉

然后ctrl + f9再按f8,来到下图位置打断点,这时还是确保除了下图位置的断点,其余断点全部取消

然后在游戏中发送消息,触发断点,这时栈里还是没有明显的消息数据,但这时edx的值是一个指针,这个指针里的数据是我们的数据包了,所以我们现在所处的环节是组织完了数据,加密之前,但这并不是想要的,然后继续往上跟,看看还有没有更好的位置

然后ctrl + f9再按f8,来到下图位置打断点,确保其它断点全部取消

然后游戏中发送消息触发断点,这时可以在栈里看到我们的消息了,但是这个消息并不是现在断点处的函数里的

所以 ctrl + f9再按f8,来到下图位置打断点,确保其余断点全部取消

然后它还是一个组织完的数据

所以 ctrl + f9再按f8,这时只是返回没有触发断点,它都显示了我们的消息,可以直接定位了,它就是组织数据之前

然后游戏中触发断点,只看到了数据,但是并没看到数据从哪来

所以 ctrl + f9再按f8,来到下图位置,然后游戏发消息触发断点,这时确保其余断点全部取消

这里没有组织完的数据了,只有数据

所以下图位置是关键点

所以接下来只需要分析edi的是怎样来的,数据包里每个值都是什么意思就好了

然后现在有一个问题,就是上面的分析是一步一步通过分析栈里的明文数据详细去找,但是我们并不知道有多长的调用,如果调用很长的话,那会废很大的功夫,这时就有一个快捷的技巧,首先我们来做的话,肯定是写一个通用函数,这个通用函数是可以把参数进行加密和发送数据的,既然是参数那么它一定在栈里,如果 a =》 b =》c =》d =》e =》f =》Send,这样的调用逻辑,我们要的数据是从b开始通过参数传递的,这时有一个知识点,在Send函数执行完之前,b函数里的局部变量或者栈里的参数并不会释放,每个函数的栈都是紧挨着的,所以可以直接通过栈定位我们要找的函数,看下图

这时断到WSASend函数上

然后看它的栈,往下翻找到游戏中发送的聊天数据的第一次出现的位置

然后选择下图

这样就快速定位到了

这篇关于98.网游逆向分析与插件开发-网络通信封包解析-定位明文发送数据的关键函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱