郁金香2021年游戏辅助技术中级班(六)

news2024/11/28 14:40:56

郁金香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也叫劫持,我们就是拦截一些封包的数据,然后把它转成字符串的形式写到文件里面,这样方便我们分析,而且我们可以按照我们自己设想的格式来格式化它,然后保存到文件里面,这样的话我们就可以很方便的分析了。

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

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

相关文章

猫头虎解析:深入浅出cURL命令和HTTP请求

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Redis是否要分库的实践

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

【数据结构】排序之插入排序和选择排序

🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、排序的概念及其分类 📒1.1排序的概念 📒1.2排序…

【计算机网络】详解TCP协议(下) 滑动窗口 | 流量控制 | 拥塞控制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…

【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

链表经典面试题(六)

判断链表是否有环 1.题目2.思路分析(文字)3.详细的注释和代码实现 1.题目 2.思路分析(文字) 3.详细的注释和代码实现 public class Solution {public boolean hasCycle(ListNode head) {//定义两个快慢指针ListNode fast head;ListNode slow head;//让快指针走两步,慢指针走…

亮相数字科技出海峰会,火山引擎边缘云助力数字化出海“加速度”

9月22日&#xff0c;2023数字科技出海创新应用峰会在上海成功举办。峰会以“赋能链接&#xff0c;跨界共赢”为主题&#xff0c;汇聚了超过200位来自互联网、智能制造、零售、消费电子等多个行业的 CXO、研发、技术、运维、产品、发行负责人&#xff0c;围绕企业出海需求及痛点…

《大师级引导-应对困境的工具与技术》读书笔记1

《大师级引导-应对困境的工具与技术》这个书&#xff0c;十分不错&#xff0c;教练和非教练都可以学习。下面是其中的关于冲突的处理&#xff1a; 定义&#xff1a;双方以解决冲突、说明关系为目的而进行的积极的、具有建设性的对话。 目的&#xff1a;制定双方协议&#xf…

程序员思维模式 - 主调试循环

文章目录 主调试循环验证在图层中进行优化循环时间为什么快速循环更好短循环时间是通用的吗?一些综合测试是必要的复杂性是否会导致测试验证循环?救援的暂存环境结论仅通过测试进行验证基本上是在仪器上驾驶飞机,而不是能够向外看挡风玻璃。视觉飞行和肌肉记忆飞行与仪器相结…

【C++】手撕vector(vector的模拟实现)

手撕vector目录&#xff1a; 一、基本实现思路方针 二、vector的构造函数剖析&#xff08;构造歧义拷贝构造&#xff09; 2.1构造函数使用的歧义问题 2.2 vector的拷贝构造和赋值重载&#xff08;赋值重载不是构造哦&#xff0c;为了方便写在一起&#xff09; 三、vector的…

使用python将网页下载为pdf

背景&#xff1a;即使用 python 实现网页的打印&#xff0c;将网页下载为pdf 要求 安装ChromeDriver&#xff0c;并配置环境遍历&#xff0c;版本需要与chrome版本一致 下载地址:ChromeDriver - WebDriver for Chrome - Downloads (google.com)https://sites.google.com/chr…

【C++】多线程的学习笔记——白话文版(bushi

目录 为什么要使用多线程 例子 代码 结果 首先要先学的库——thread库 thread的简介 thread的具体使用方法 基本变量的定义 注意&#xff08;小重点&#xff09; join函数的解读&#xff08;重点&#xff09; detach函数的解读 注意 关于vector和thread是联合使用 …

【ZSH】zsh自定义命令行提示符

这是默认的 这是添加了用户名 具体做法&#xff1a; 1、sudo vim ~/.zshrc 查看当前主题 2、sudo vim ~/.oh-my-zsh/themes/robbyrussell.zsh-theme 修改主题文件 3、%{$fg_bold[green]%}%n 添加用户名显示 4、source ~/.zshrc 刷新zsh

Qt多线程实现方式-moveToThread及其注意事项

Qt多线程实现方式-moveToThread及其注意事项 Chapter1 Qt多线程实现方式-moveToThread一、Qt下使用线程主要有两种方法。二、Qt下创建多线程也有两种方法。三、其它问题。 Chapter2 QT多线程接收串口数据1.前言2.功能作用3.软件测试效果4.基本步骤 Chapter3 利用Qt多线程机制实…

Redis与分布式-分布式锁

接上文 Redis与分布式-集群搭建 1.分布式锁 为了解决上述问题&#xff0c;可以利用分布式锁来实现。 重新复制一份redis&#xff0c;配置文件都是刚下载时候的不用更改&#xff0c;然后启动redis服务和redis客户。 redis存在这样的命令&#xff1a;和set命令差不多&#xff0…

《数据结构》之栈和堆结构及JVM简析

导言: 在数据结构中,我们第一了解到了栈或堆栈,它的结构特点是什么呢?先进后出,它的特点有什么用呢?我们在哪里可以使用到栈结构,栈结构那么简单,使用这么久了为什么不用其它结构替代? 一.程序在内存中的分布 作为一个程序猿,我们应该会常常跟代码打交道,那么我们…

【Java】医院智能导诊小程序源码,springboot框架

智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述 “智能导诊”以人工智能手段为依托&#xff0c;为人们提供智能分诊、问病信息等服务&#xff0c;在一定程度上满足了人们自我…

Spring框架中如何解决日志输出类型的问题

问题的描述 在学习Spring框架的过程中&#xff0c;运行应用程序时&#xff0c;会出现非常详细的日志输出&#xff0c;影响我对于最终输出结果的观察&#xff0c;具体情况见下图&#xff1a; 解决办法 在resource文件夹下&#xff0c;创建log4j.xml配置文件&#xff0c;Spring …

算法-排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…

【vue3】toRef与toRefs的使用,toRef与ref的区别

假期第四篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 1、toRef与toRefs 创建一个ref对象&#xff0c;其value值指向另一个对象中的某个属性 语法&#xff1a;const name toRef&#xff08;person,‘name’&#xf…