郁金香2021年游戏辅助技术中级班(六)
郁金香2021年游戏辅助技术中级班(六)
- 055-ce,xdbg调试分析接任务交任务完成任务
- 056-C,C++写代码测试接任务交任务完成任务
- 我们再来分析一下完成任务
- 057-C,C++写代码测试交任务完成任务
055-ce,xdbg调试分析接任务交任务完成任务
创建一个新角色,搜索wow.exe模块中的常数6B0B50(明文包,封包组包CALL,即发包函数的上面某一层函数),全部禁用:
把没有操作就直接断下的断点先取消掉,在NPC维里副队长那里不要用鼠标右击点击他,否则会直接接受了任务,这时候已经发过包了,所以可以用鼠标左键点击打开该NPC,再接受任务,测试发的包才是接任务的(其实仍然是直接接了任务)。
上图左边小地图下面的就是已经接受的任务(这个新手任务比较特殊,鼠标右击NPC就会直接接受了该任务,这时候已经发过接任务的包了),所以这里我们要放弃该任务,重新鼠标右键点击该NPC,断下:
如果是接任务的话,它肯定有一个任务ID的,不同的任务可以通过各自的ID给区分开,我们先把包的内容复制出来看一下:
这是我们的包对象(任务:身边的危机),然后再看一下这个包的内容:
这个是之前我们分析过的,打开NPC的组包,但是这个怎么就接了任务的呢?或者说这个任务比较特殊。
我们再点击xdbg的运行,还有几个断点,我们暂时把它们复制出来备用(心跳的断点都取消掉):
然后我们再另外找一个任务来试一下(把转向的断点取消掉,然后去找头上有问号或感叹号的NPC去接一下任务),鼠标右键点击下图该NPC:
鼠标左键点击上图身边的危机:
点击上图完成任务的时候也发包了:
完成任务的时候要经过5304D3这里,上图是我们看到的这个时候的组包内容。
我们让游戏跑起来,又断到了一个地方:
上图我们看到有一个NPC的ID。
我们把游戏取消,让游戏退出来,把自动接任务的插件给禁用一下,把插件的目标AddOns改名为“AddOns_插件”,再建一个空的AddOns目录:
重新登录游戏,重新分析一下接任务(删除之前创建的角色,建一个新角色)。
我们发现鼠标右击带感叹号的会走到上图这里,鼠标右击不带感叹号的NPC走的是另外一个分支,所以这里可能就是接任务的,我们来看一下这个地方的组包(之前的那些分析可能没有太大的作用),然后我们再看一下该包的内容:
从上图我们可以看到,这里是NPC的ID,不是任务ID,按说应该还有一个任务ID,但是这里我们没有看到,这个看起来更像是打开NPC的,我们复制记录一下:
我们再让它跑一下看看有没有更合适的:
这个包的内容看起来只有4个字节:
0x417,这个好像更像是那个接任务,我们都复制记录一下,但是具体是不是,我们还需要写相应的代码做测试。
上图这个包很像接任务的,我们还有另外一种来做测试的办法,我们把上图这第2个包内容中的0x417给它改一下,然后看它能不能够接到任务,如果修改该数值对接任务有影响的话,可能就需要这两个包一起配合,先打开NPC,然后接任务;
这里我们把所有断点删除,然后先把维里副队长的这个新手任务放弃,再在这两个包相关的CALL那里分别下断,然后我们再点鼠标右键,第1个断下来的我们先不管它,我们先继续运行游戏,来看看断到的第2个包的内容那里:
我们把0x417改为0x317,发现依然能够接到任务,但是该NPC头上仍然是一个感叹号,而小地图下面仍然有任务,我们还是接到了这个任务,我们点击放弃。
我们发现第2个包没有发的情况下,该NPC头上的感叹号没有被去掉,说明该地址的包与接任务是有一定关系的,我们再来看第一个包:
我们如果把该包内容中的指令0x184给改了,发现打不开NPC了,这样我们也测试不出来接任务了,可能是接任务的,也可能不是,具体是不是我们下节课写代码来测试一下。
那个0x417也有可能是用来发包取消该NPC头上的感叹号的,但是具体它是一个什么样的功能,我们还是要写代码来做测试。
另外,任务有两种,一种是带感叹号的,另一种是带问号的,我们不知道这两种任务是不是同一个类型,我们再找一个带问号的看一下,我们先把维里副队长这个任务给接了(头上是一个感叹号),然后我们再去治安官那里看一下问号那个组包:
哦,现在我们明白了,那个感叹号的是用来接任务的,这个问号是用来完成任务的,我们启用一下所有调用6B0B50这个CALL的断点:
这个究竟是不是接任务的,还是要下节课我们来看,从上图我们看到这里不是接任务,应该是选择任务:
我们点击一下完成任务:
我们把这个包也取出来,复制记录一下:
这个倒挺像完成任务的,因为完成任务这里没有NPC的ID,这里的0xFE和0x21可能是完成任务的指令和任务的ID。
具体是不是下节课我们写代码把分析的这些数据测试一下。
056-C,C++写代码测试接任务交任务完成任务
任务有没有接,它肯定是有标志可以用来判断的,这里我们只讨论接任务还有完成任务这两个知识点。
由于现有项目的两个页面都已经满了,所以我们再添加一个页面:
在游戏功能测试目录下面添加一个新的任务相关的目录:
复制上图这个函数为新的接任务02函数:
测试的时候,如果不是那个新手任务,可以删除该角色,再新创建一个角色,然后跑到维里副队长身边,点击接任务:
接任务测试成功,该NPC头上的感叹号也没有了。
完成任务测试失败,完成任务这个包说明没有准备好(可能完成任务),接任务我们发了两个包,但是我们不知道这两个包各自的作用是什么,我们先来把接任务给弄清楚,我们回到维里副队长那里,放弃该任务,我们把接任务这两个包给分开做一下测试。
我们点击上图接任务01按钮,这个是接任务,接任务成功(右边小地图下方显示有任务目标),第一个组包就是接任务;
点接任务02按钮没有反应,第2个包我们根本就没有发,接任务02是没有用的;
这里的接任务只是接某一个NPC的任务(跑到特定NPC的身边才行),它并没有一个任务ID,这种设计比较少见,这种接任务就只有一个NPC的ID和一个接任务的指令,在哪个NPC那里接任务;
这个游戏不像其他游戏那样有一个任务的ID,有的游戏接任务的时候它会发送一个任务ID的。
点击角色选择界面左下角的插件,可以禁用掉游戏默认带的插件。
上图这里是在界面上显示任务目标的方式,以后如果你需要遍历哪些任务没有接的话,你就可以通过上图这些开关去分析你追踪的这些任务列表,就去判断哪些任务完成了,哪些任务没有完成。
我们再来分析一下完成任务
先跑到神庙里面的那个治安官NPC身边,在5304D3那里下个断点,并启动封包的全部断点(点击运行后,鼠标右击神庙里面的那个治安官NPC,在此期间过滤掉其他无关断点):
鼠标右击治安官这个NPC,会跑到右键点NPC那个断点那里:
当点击上图任务的时候会断到下图这里:
我们发现这个包更像是接任务、完成任务的,18A是指令,30F有点像任务ID,而C5013862是NPC的ID1,F1300000是NPC的ID2,但是具体是不是我们下节课再做测试。
然后我们再点完成任务,断下,之前没有断到过这个地方(可能被我们给过滤掉了),我们没有分析到这里:
我们发现这个地方的封包内容和前面那个6D4D95地址处的封包内容很接近,6D4D95可能是选择任务,这里可能才是完成任务,这个概率比较大:
这个比较像完成任务的组包格式,
接任务02这里不是接任务的,不知道是个什么。
我们发现接任务01这里没有任务ID,可能是一个特殊的任务,它就是一个新手的任务,它也可能没有任务ID,打开该NPC之后就自动接了该任务,这可能是一种特殊的情况。
057-C,C++写代码测试交任务完成任务
我们之前分析这个接任务的包、完成任务(交任务)的包它存在多种格式,它们并没有一个统一的格式,所以为了方便我们分析封包的格式(封包的内容、封包的长度),我们自己来编写一段代码,可能需要两三课的时长,因为写HOOK的话相关的知识点还是需要一些时间来慢慢分析。
我们按照上节课分析的完成任务重新组包:
我们暂时认为包缓冲区中0x30F这个是用来区分不同任务的,可能是任务ID,0x18E可能是完成任务的指令,当然具体是不是用的统一的指令,我们后面写了分析封包的代码之后呢,把相关的信息保存在文件里面,我们再来做一个相应的分析。
我们需要另外建一个新的小号来测试:
我们看到上图这里虽然弹出了任务面板询问你是否接受,其实无论你接不接受,这里已经有提示信息了,你已经接受了这个任务了,所以我们之前分析的时候,再按下这个接受按钮之后再去分析接受任务的这个包是错误的,实际上我们右键点击维里副队长的时候就已经自动接受了这个任务了,你直接点击右上角的叉关闭这个面板,实际上都已经接受这个任务了;所以分析的时候只能在鼠标右击该NPC的时候去分析接任务的包。
我们跑到神庙的治安官NPC身边那里去完成这个任务:
我们点击完成任务按钮后,从上图可以看到左下角的提示信息,身边的危机完成,说明这个任务的组包是成功的,该任务已经完成了,并且它还完成了与NPC的对话,顺便接了剿灭狗头人的任务。
所以接受任务至少有两种形式,一种是在访问NPC的时候它就自动接了这个任务,这个应该是在服务器那边就判断完成了,另一种就是无论你接受还是不接受,实际上从上图这个提示信息来看的话,这个剿灭狗头人的任务已经接受了,而且上图右上角小地图下方也已经有剿灭狗头人的任务目标了。
之前我们分析的时候,是点了任务面板的接受之后,再去分析这个包,那个思路上就错了,因为这个时候你点接受,它并不会发包,因为在此之前它就已经接受了这个任务了。
如果你放弃这个任务,之后你再去接受该任务的话,那么它就是走的另一个发包了,这个我们在这类就不去分析了,我们留到下节课写分析封包的代码,通过代码来分析的话,这样比我们每次去下断点的话,要省很多很多时间,如果每次用调试器去分析的话,花的时间就比较多了,如果我们用代码把发包的数据全部收集到文件里面,再加上我们用代码来做一下条件判断和过滤,那么这样的话我们就能够更方便的收集到发包的有用信息。
下节课我们就开始写HOOK,HOOK也叫劫持,我们就是拦截一些封包的数据,然后把它转成字符串的形式写到文件里面,这样方便我们分析,而且我们可以按照我们自己设想的格式来格式化它,然后保存到文件里面,这样的话我们就可以很方便的分析了。
相关文章:

郁金香2021年游戏辅助技术中级班(六)
郁金香2021年游戏辅助技术中级班(六) 055-ce,xdbg调试分析接任务交任务完成任务056-C,C写代码测试接任务交任务完成任务我们再来分析一下完成任务 057-C,C写代码测试交任务完成任务 055-ce,xdbg调试分析接任务交任务完成任务 创建一个新角色,…...

毛玻璃员工卡片悬停效果
效果展示 页面结构组成 通过效果展示图,我们可以看出页面布局比较常规,最核心的就是卡片,当鼠标没有悬停在卡片上时,文字和头像处于半透明状态,当鼠标悬停在卡片上是,底部会展示社交图标。 CSS 知识点 b…...

闪存工作原理
前言 1、闪存类型 闪存有两种分类,NAND型闪存主要用于存储 2、MOS的特性 MOS管的三个引脚分别是Gate(G)、Source(S)和Drain(D)。Gate(G)引脚是晶闸管的控制引脚&…...

从0到一配置单节点zookeeper
我的软件: 链接:https://pan.baidu.com/s/1nImkjOgzPkgaFOuUPwd1Sg?pwd2wqo 提取码:2wqo 视频教程p1-zookeeper安装和配置以及启动服务和检测是否运行成功_哔哩哔哩_bilibili 一、安装zookeeper http://zookeeper.apache.org/releases.h…...

【JVM】第三篇 JVM对象创建与内存分配机制深度剖析
目录 一. JVM对象创建过程详解1. 类加载检查2. 分配内存2.1 如何划分内存?2.2 并发问题3. 初始化4. 设置对象头5. 执行<init>方法二. 对象头和指针压缩详解三. JVM对象内存分配详解四.逃逸分析 & 栈上分配 & 标量替换详解1. 逃逸分析 & 栈上分配2. 标量替换…...

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase
Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进,基于arm架构的国产系统也在积极发展,这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…...

maven settings.xml文件(包含了配置阿里云镜像)
mac 的 settings.xml 我配置的位置是: /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml 然后 local repository 我配置的位置是: /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/repos…...

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测
分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…...

Redis是否要分库的实践
Redis的分库其实没有带来任何效率上的提升,只是提供了一个命名空间,而这个命名空间可以完全通过key的设计来避开这个问题。 一个优雅的Redis的key的设计如下...

String 进阶
字符串拼接 // 常量与常量的拼接结果放在常量池 // 常量池中不会存在相同的常量 String str1 "a" "b"; System.out.println(str1 "ab");// 拼接时有一个为变量,则结果会放在堆中。 // 变量拼接的原理是 StringBuilder append 最后…...

ESP32设备通信-两个ESP32间UART通信
两个ESP32间UART通信 文章目录 两个ESP32间UART通信1、UART介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将使用 Arduino IDE 的 UART 硬件库在两个 ESP32 板之间执行 UART 或串行通信。 要使用 USB 端口调试和编程 ESP32,需要使用称为通用异步接收器/发送器 (UART) 通…...

LCR 052.递增顺序搜索树
题目来源: leetcode题目,网址:LCR 052. 递增顺序搜索树 - 力扣(LeetCode) 解题思路: 中序遍历时修改指针即可。 解题代码: /*** Definition for a binary tree node.* public class TreeNo…...

Mysql集群技术问答
前提:Mysql集群服务部署到一个群组的所有服务器上,一般20台为一个群组,群组内所有节点数据实时同步,动态自动维护节点。 问:集群空间跟传统空间的最大不同是什么? 答:集群空间有数据同步和宕机检…...

2023版 STM32实战4 滴答定时器精准延时
SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写(已经验证&a…...

ESP32设备驱动-数据持久化到Flash
数据持久化到Flash 文章目录 数据持久化到Flash1、Preferences库介绍2、软件准备3、硬件准备4、代码实现4.1 初始化NVS Flash4.2 读写Key/Value对4.3 保存/读取网络凭据4.4 复位后记住最后的 GPIO 状态在本文中,我们将介绍如何使用 Preferences库将数据存储到 ESP32 的Flash中…...

Swift data范围截取问题
文章目录 一、截取字符串的几种方法1. 截取前几位2. 截取后几位3. subData4. 下标截取 二、subData(in:) 报错 EXC_BREAKPOINT 一、截取字符串的几种方法 1. 截取前几位 mobileID.prefix(32)2. 截取后几位 mobileID.suffix(3)3. subData data.subdata(in: 0..<4)4. 下标…...

PICO首届XR开发者挑战赛正式启动,助推行业迈入“VR+MR”新阶段
9月25日,“PICO 2023首届XR开发者挑战赛”(下文简称“挑战赛”)媒体启动会在北京圆满落幕,官方赛事报名通道已于今日开启。据悉,本次挑战赛是PICO首次针对全球开发者举办的大型挑战赛事,旨在与开发者保持连…...

【计算机网络】应用层协议原理
文章目录 网络应用程序体系结构客户-服务器体系结构P2P体系结构 进程通信客户和服务器进程进程与计算机网络之间的接口进程寻址 可供应用程序使用的运输服务可靠数据传输吞吐量定时安全性 因特网提供的运输服务TCP服务面向连接的服务可靠数据传输服务TCP安全 UDP服务因特网运输…...

buuctf-[WUSTCTF2020]CV Maker
打开环境 随便登录注册一下 进入到了profile.php 其他没有什么页面,只能更换头像上传文件,所以猜测是文件上传漏洞 上传一句话木马看看 <?php eval($_POST[a]);?>回显 搜索一下 添加文件头GIF89a。上传php文件 查看页面源代码,看…...

数据库表操作详解
在数据库管理中,表操作是最基础也最常用的一项功能。不论是临时存储一些数据,还是通过派生表进行复杂的查询,表操作的灵活性和多样性都使其在数据库中发挥着重要的作用。 本文将详细解析数据库中常见的表操作,包括临时表、派生表以及与视图、子查询的比较。我们将使用游戏…...

axios配置代理ip
axios配置代理ip 对于在nodejs中使用axios作为请求库时,有需要配置代理ip的需求(比如爬虫等等) 最离谱的是,在网上搜了一圈,全是关于axios配置proxy跨域的解决办法,没有配置代理ip的方法。 const axios …...

Apache Commons Pool2 池化技术
对象池是一种设计模式,用于管理和重用对象,以提高性能和资源利用率。对象池的概念在许多应用程序中都有广泛应用,特别是在需要频繁创建和销毁对象的情况下,例如数据库连接、线程、HTTP连接等 对象池通过预先创建一组对象并将它们存…...

二叉树的最近公共祖先LCA
系列题目 236. 二叉树的最近公共祖先 1676. 二叉树的最近公共祖先IV 1644. 二叉树的最近公共祖先 II 235. 二叉搜索树的最近公共祖先 1650. 二叉树的最近公共祖先 III class LowestCommonAncestor:"""236. 二叉树的最近公共祖先题目强调p和q一定存在于二叉树中&…...

AWS SAA知识点整理(作成中)
共通 一些信息已经更新了,但参考题的答案还是旧的。 比如: S3的最大读写性能已经提高到 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second 并且不再要求使用random prefix 题目中有时候会让选择Not violation 不合适的一项ÿ…...

C++模板大全(持续更新,依不同网站整理而成)
C模板大全 基本模板快读快写快读快写火车头缺省源 基本算法暴力枚举模拟贪心二分三分尺取法分治前缀和差分递推递归倍增排序sort冒泡排序桶排序选择排序插入排序希尔排序归并排序快速排序堆排序计数排序基数排序 基础数据结构栈队列哈希链表单向链表双向链表 单调栈单调队列 高…...

《CTFshow-Web入门》10. Web 91~110
Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…...

计组--总线
一、概念 总线是一组能为多个部件分时共享的公共信息传送线路。 共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。 分时是指同一时刻只允许有一个部件向总线发送信息,如果系统中有多个部件,则它们…...

Git中的HEAD
Git中的HEAD HEAD^数字:表示当前提交的父提交,具体是第几个父提交通过数字指定,HEAD^1第一个父提交,该语法只 能用于合并(merge)的提交记录,因为一个通过合并产生的commit对象才有多个父提交。 HEAD~数字࿱…...

软件设计师_数据库系统_学习笔记
文章目录 3.1 数据库模式3.1.1 三级模式 两级映射3.1.2 数据库设计过程 3.2 ER模型3.3 关系代数与元组演算3.4 规范化理论3.5 并发控制3.6 数据库完整性约束3.7 分布式数据库3.8 数据仓库与数据挖掘 3.1 数据库模式 3.1.1 三级模式 两级映射 内模式直接与物理数据库相关联的 定…...

毛玻璃态计算器
效果展示 页面结构组成 从上述的效果可以看出,计算机的页面比较规整,适合grid布局。 CSS3 知识点 grid 布局 实现计算机布局 <div class"container"><form class"calculator" name"calc"><input type…...