26.x86游戏实战-寻找公共call

news2024/11/17 5:47:43

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

本次游戏没法给

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

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:25.x86游戏实战-理解发包流程

首先打开OD并附加到游戏

现在附加的游戏使用的是send函数发送的数据包,上一个内容里有四个函数分别是wspsend、send、sendto、wsasend,怎么就确定游戏使用的是send函数发送的数据包?在wspsend、send、sendto、wsasend这四个函数上使用OD都打上断点,然后在游戏中做一个可以出发发送数据包的操作,看看在哪个函数里断下来,然后就能确定游戏使用的是wspsend、send、sendto、wsasend哪一个了。

然后send、sendto、wsasend这三个都在ws2_32.dll里(ws2_32模块里),怎么就知道send、sendto、wsasend这三个都在ws2_32.dll里了?打开Visual Studio 2022写上它们三任意一个,写完鼠标单击然后按f1就会跳转到函数的说明里,在函数说明的最后面有些它们在什么模块中,下图是sendto函数的说明send、wsasend也是这样看,然后wspsend后面再说

开始找公共call,首先鼠标单击代码区,然后按ctrl+g,然后输入ws2_32.send然后点ok让OD跳转到send函数里

然后OD第一次使用ctrl+g跳转可能会跳转的不对,这是OD的问题

然后再操作一个ctrl+g就会正确了,如下图

然后打断点之后,游戏里什么都不操作它自己就会断下来,这种原因是游戏会有心跳包,心跳包用来确认玩家是否在线(还可以用来检测游戏代码执行时间)

所以要在心跳包之前,手动触发一个发送数据的操作,或者通过如下图的条件断点来过滤心跳包,比如通过数据包的长度来过滤,条件断点的使用后面用到的时候再说,这里先采用在心跳包之前手动触发发送数据的操作

然后打断点快速切到游戏,然后触发发送数据包的操作,下图是使用走路来触发发送数据包的操作

然后断下来之后,如下图把断点取消

然后按ctrl+f9,来到了上一层,然后双击下图红框位置写一个注释说明

然后再按ctrl+f9,然后再写一个注释说明

最终反了10次之后,游戏卡主了,没反应了

然后游戏的线程都是暂停状态了

这里右击选择Resume All Threads把线程启动起来

然后再回到send函数里,然后使用发送聊天数据触发发送数据包的操作,点击下图红框里的C回到代码区

然后回到send函数里,这里由于断点卡主的时间太长导致游戏很卡,重新启动了一次游戏,所以下方的地址与上方的会有所差异,这里有一个东西重启游戏之后可能会发现OD无法调试游戏了,无法调试的现象是只要一触发断点OD会卡死,这时需要重启电脑,如果重启电脑不管用,就把下图红框UDD文件夹里的文件全部删除(不要把UDD文件夹删了,是把UDD文件夹里的东西全删了)然后再重启电脑,这样就可以再调试游戏了

然后在输入框写了一堆很长的文字

然后在send函数上打断点,打了断点要手速快点,不然会被心跳卡主,然后发现它还是会走10次,然后没法ctrl+f9了,然后在第10层往上滑可以看到下图红框的函数DispatchMessageA

然后DispatchMessageA函数是给一个窗口发送消息的,我们不是走路吗?不是发送聊天数据吗?不应该会ctrl+f9到走路或发送聊天数据的函数里吗?怎么最后一次ctrl+f9还给窗口发上消息了?现在可以宣布找公共call失败了

然后再次使用走路断在send函数上

然后点下图红框里的K,就可以看调用栈了,调用栈里的是到当前断点函数的过程,也就是调用栈里显示的是从哪调用到ws2_32.send函数里的,如下图,调用栈里的过程很少,但是一个走路操作应该是很庞大的才对,它为什么很少?少的原因是这个游戏采用的是上一个内容中最后说的封包函数和线程发送数据包函数,这个游戏就采用了封包函数和线程发送数据包函数方式,所以在send函数打断点看到的调用栈很少,下一章会演示这种情况该怎么办

上方是找公共call的过程,接下来写一下send函数的参数

send函数一共有4个参数,主要关注下图红框的两个参数,一个是要发送的数据,一个发送的数据的长度

上图网址:https://learn.microsoft.com/zh-cn/windows/win32/api/winsock2/nf-winsock2-send

如何找send函数或其它函数的说明,上方说通过f1来找,还有一种方式通过百度或必应搜索 send msdn 这个关键字也能找到,但是会搜出一些没用的地址,需要要会辨别,辨别方式如下图,只要有下图红框的结构或字母那就是正确的,如果不是就是假的,下图可能会被屏蔽,如果屏蔽了没法教辨别了,只能通过f1了

让现在知道send函数的参数了,然后现在断点一下看看游戏中给send函数传的什么,再次在聊天框里写一段文字,如下图

然后在ws2_32.send函数上打断点,然后断下来

然后如下图,在内存窗口跳转到数据的地址

然后会发现这个游戏的数据包是明文发送的,没有加密操作,1的unicode编码是0x31,2的unicode编码是0x32。。。想知道编码对应的什么,可以百度unicode编码对应表(现在其实不需要知道那么多)

然后还可以看到数据包里还有一些我们现在不认识的东西,如下图红框,这些东西里可能就会有时间、当前是什么操作等这些信息,这里先不用管,后面会专门搞它们


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

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

相关文章

KeePass密码管理工具部署

KeePass密码管理工具部署 安装包下载入口 双击执行,根据提示完成安装: 安装完成后如图:

RCE和php文件上传

一、远程命令执行(RCE) RCE漏洞概述 RCE漏洞允许攻击者通过某种方式在目标服务器上执行任意命令。这种漏洞通常出现在服务器端语言中,如PHP。 RCE漏洞原理 PHP中的一些函数可以执行命令或代码,但如果对这些函数的输入未加限制&a…

Java并发(十五)Java并发工具类

CountDownLatch 字面意思为 递减计数锁。用于控制一个线程等待多个线程。 **CountDownLatch**** 维护一个计数器 count,表示需要等待的事件数量。**countDown 方法递减计数器,表示有一个事件已经发生。调用 await 方法的线程会一直阻塞直到计数器为零&a…

程序员如何准备既符合“八股文“又展现实力的面试?

在当今竞争激烈的IT行业中,面试已成为程序员求职路上的一道重要关卡。而在这个过程中,"八股文"这个词频频出现,引发了业内人士的热议。本文将深入探讨"八股文"在程序员面试中的角色,以及它对实际工作的影响。 目录 1. 程序员面试八股文的利弊分析什么是&q…

Unity 预制动态绑定光照贴图遇到变白问题

预制绑定光照贴图,网上解决方案很多,已下是要点: //烘培完场景之后,保存光照贴图信息 void StoreLightmapData() {lightMap.Clear();LightmapData[] lds LightmapSettings.lightmaps;foreach (LightmapData data in lds){Custom…

无人机之科学防汛篇

随着全球气候变化的加剧,极端天气时间频发,汛期防汛工作面临着前所未有的挑战。传统的防汛手段,如人工巡堤、地面监测等,在复杂多变的自然环境下显得力不从心。而无人机技术的快速发展,为科学防汛提供了新的解决方案。…

Java面试八股之Spring AOP 和 AspectJ AOP 的区别

Spring AOP 和 AspectJ AOP 的区别 Spring AOP 和 AspectJ AOP 是两种不同的面向切面编程(Aspect-Oriented Programming, AOP)实现。它们各有特点,适用于不同的场景。下面是一些主要的区别: 1. 实现机制 Spring AOP: 基于代理…

Python NLTK 情感分析不正确

1、问题背景 一位 Reddit 用户使用 Python 的 NLTK 库来训练一个朴素贝叶斯分类器以研究其他句子的情感,但是无论输入什么句子,分类器总是预测为正面。 2、解决方案 经过仔细检查,发现原始代码中的问题在于 wordList 为空。因此&#xff0…

【LLM】-12-部署Langchain-Chatchat-0.3.x版本

目录 1、0.3与0.2的功能对比 2、0.3.x支持多种部署方式 2.3、源码安装 2.3.1、项目源码下载 2.3.2、创建conda环境 2.3.3、安装poetry 2.3.4、安装依赖库 2.3.5、项目初始化 2.3.6、初始化知识库 2.3.7、启动服务 2.3.8、配置说明 2.3.8.1、basic_settings.yaml 2…

一副穿戴甲背后,5万苏北宝妈如何硬控全球美甲潮流?

2019年的一天,张达在拼多多后台看到一个有趣的订单。“看姓名、联系方式,像表妹下的订单,但我的穿戴甲店才开第二天,她应该不可能知道。”张达回忆。 1993年出生的张达,是江苏东海县人,当地以水晶闻名。高…

达梦数据库的系统视图v$bufferpool

达梦数据库的系统视图v$bufferpool 达梦数据库系统视图V$BUFFERPOOL的主要作用是监控和管理数据库缓冲池的性能。通过查询V$BUFFERPOOL视图,用户可以获取以下关键信息: 缓存命中率:显示缓冲池的命中率,即从缓冲池中成功获取数据的…

嵌入式☞第二组(壹)

C语言基础: 循环的构成: 循环体 循环条件 循环的分类: 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控) 有限循环:循环限定循环次数或者循环的条件。 当型循环的实现: while 语法 while(循…

【MySQL】索引 【上】 {没有索引的查询/磁盘/mysql与磁盘IO/初识索引}

文章目录 1.没有索引存在的问题2. 认识磁盘MySQL与存储MySQL与磁盘交互基本单位建立共识图解IO认识索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物…

初学Mybatis之缓存

所有的查询都需要连接数据库,而连接数据库消耗资源 我们可以把一次查询的结果暂时存在一个可以直接获取到的地方(内存:缓存) 我们再次查询相同数据的时候,直接走缓存,不走数据库 缓存:存在内…

3.5.1、查找和排序算法-算法介绍

算法特性 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。简单的说算法就是某个问题的解题思路,算法的五个重要特性如下: 有穷性。一个算法必须总是(对任何合法的输入值…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十二章 设备树常用of函数

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

NAS变身云盘管理大师:群晖部署AList全攻略!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒🔑 AList功能简介🚀 快速部署📝 操作步骤🐳 Docker容器部署:灵活与强大📝 操作步骤📝 群晖部署🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在这个数字化时代,我们似乎都不可避免地拥有多个…

【数据结构】:大厂面试经典链表OJ题目详解

反转链表 206. 反转链表 - 力扣(LeetCode) 思路解透 本题就是通过不停地将最先的 head 节点位置的后一位插到最前面,完成链表的反转 本题需要两个节点变量 cur:其任务就是定位到原 head 节点位置的前一位,然后将自己…

列表(list)—python

一、列表的定义方式 列表内的每一个数据称为元素,列表以[ ]作为标识,列表内的每个元素之间用逗号隔开。 列表的基本语法如下: #字面量 [元素1,元素2,元素3,元素4,……]#定义变量 变量名称[元素1,元素2,元素3,元素4,……]#定义空列表 变量名…

Linux的防火墙

一、防火墙概述 防火墙是一种计算机硬件和软件的结合,使internet和intranet之间建立一个安全网关(Security Gateway),从而保护内网免受非法用户侵入的技术。 防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。…