当前位置: 首页 > news >正文

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

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

本次游戏没法给

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

工具下载:

链接: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编码对应表(现在其实不需要知道那么多)

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


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 实时更新UI界面
  • 【C++初阶】string类
  • 基于深度学习的医学影像分类
  • Vbox虚拟机+Ubuntu motest测试drm
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • Django transaction.atomic()事务处理
  • 【ROS2】高级:安全-理解安全密钥库
  • 《梦醒蝶飞:释放Excel函数与公式的力量》18.1 图表类型与设计
  • 机器学习(二十):偏差和方差问题
  • Docker Desktop安装
  • 汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动
  • PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能
  • vue2获取视频时长
  • Docker-Compose实现MySQL之主从复制
  • 理想化相机模型的相机内参
  • 【面试系列】之二:关于js原型
  • Cumulo 的 ClojureScript 模块已经成型
  • ES2017异步函数现已正式可用
  • Flannel解读
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • laravel 用artisan创建自己的模板
  • mysql 5.6 原生Online DDL解析
  • opencv python Meanshift 和 Camshift
  • Promise初体验
  • 百度小程序遇到的问题
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • #1014 : Trie树
  • #stm32驱动外设模块总结w5500模块
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (回溯) LeetCode 131. 分割回文串
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net dataexcel winform控件 更新 日志
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net 代码性能 - (1)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET项目中存在多个web.config文件时的加载顺序
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @Bean有哪些属性
  • @Transactional 参数详解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [17]JAVAEE-HTTP协议
  • [2016.7 test.5] T1