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

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT