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中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注