
游戏安全攻防艺术
聊一聊游戏安全
鬼手56
代码搞起来还是很轻松的,就是头有点冷
展开
-
019 自动任务功能的设计和实现
文章目录任务详情的设计任务表的设计TaskManager类自动接任务自动完成任务自动任务最后的总结之前我们已经完成了自动打怪,自动技能和自动吃药的功能,这一次我们来完成自动任务的功能。自动任务的难度要比前三个高很多,涉及到要处理的细节也很多,我这里写的也不是百分百完美的,只是提供一个基本的思路,如果想要实现一个完美的自动任务的脚本,还需要花时间慢慢完善。首先新建一个类,命名为TaskManager任务详情的设计所谓的自动任务,就是将角色从1级到满级所有的任务全部的数据,记录到一张表。然后挨个遍历并执原创 2022-05-03 12:22:21 · 983 阅读 · 1 评论 -
018 打开NPC交接任务功能分析
文章目录打开NPC交任务接任务打开NPC来到明文封包call头部,点击NPC,然后断下。这里最好新建一个1级的小号,去分析,这样周围没有其他玩家会少很多干扰项。返回上层,这个call应该就是我们要的选择NPC的call但是我们再次点击NPC时,发现这个call并不断,那么说明这个call并不是选择NPC的call,可能是选怪call或者其他的选择call这个call的作用应该是点击之后将选择的NPC在上方出现一个血条。那么我们应该在这个出现血条的状态下,再去点击NPC此时会返回到一个c原创 2022-05-01 12:17:54 · 1292 阅读 · 0 评论 -
017 寻路画线功能分析
文章目录定位走路call定位寻路点地图ID和名字数据寻路点遍历定位走路call首先来到明文发包call头部下断返回上层,这一层对坐标进行了加密,我们跳过这个位置再返回上层来分析这个call,最后一个参数r12d,是一个标志位,0代表走路,1代表跑步rcx是一个基地址r9是目的地坐标r8是角色自己的坐标。最后一个edx就是角色对象+0xA84的值。这样的话走路call就分析完成了定位寻路点之前我们已经找到了走路call,但是测试了之后发现只能走一小段距离。如果我们想要实现寻路原创 2022-04-24 10:46:49 · 1396 阅读 · 0 评论 -
016 可接任务遍历(链表+二叉树)
文章目录可接任务遍历可接任务ID可接任务链表数据整理可接任务属性数据整理可接任务遍历首先搜索一下任务名字找到当前可接任务的地址然后搜索上一层偏移对这个地址下访问断点点击全部追踪,此时会刷新右侧的界面,让断点断下[rbp]就是我们要追的任务名字,但是这里可以直接跳过追踪的过程直接来到第三层返回地址,往上翻来到任务名字库的地方。任务名字库的可接任务和已接任务都会经过这个地方,但是返回的时候,返回的位置是不一样的。可接任务ID这里继续追任务ID->ediedi来源于原创 2022-04-18 21:59:40 · 1257 阅读 · 0 评论 -
015 已接任务链表和任务库二叉树遍历
文章目录任务名字库已接任务对于游戏的任务数据来说,分为三大块,已接任务,可接任务和任务库。对于任务数据来说,一般都是从名字入手任务名字库首先来找任务的名字库从任务名字入手直接搜索名字,然后把中间的这一块连续地址的任务名字拉下来。这一块很明显就是属于任务库里的内容,只要下访问断点,就能追到相关的数据结构在苏醒一的地址下断,然后点开任务面板,点击全部追踪此时断点断下返回上层,这里要追rcx再返回上层,这里要追r8,得到下面的偏移rsi+0x74rsi来源于rdx返回上原创 2022-04-11 11:32:23 · 1230 阅读 · 0 评论 -
014 怪物过滤的设计和实现
文章目录怪物过滤的设计之前我们已经完成了自动打怪,自动技能和自动吃药的功能。接下来需要实现自动任务。那么现在就会遇到这么一个问题,大部分的任务都是指定去打某些怪物,但是我们的自动打怪都是默认攻击最近的怪物,这里就需要用到怪物过滤的功能了。怪物过滤的设计新建一个类,命名为MonsterFilter//过滤的列表vector<wstring> m_FilterList;首先准备一个过滤的怪物列表,把不需要攻击的怪物放到这个列表里 。//攻击的列表vector<wstring&原创 2022-04-05 22:42:37 · 1066 阅读 · 3 评论 -
013 自动吃药功能的设计和实现
文章目录功能设计药品表设计代码实现补充之前我们已经完成了自动打怪和自动技能的功能,但是会存在一个问题,当技能释放多了以后,MP就不够了。这个时候我们就需要通过自动吃药的功能,给前两个功能持续输出动力。功能设计自动吃药的逻辑和自动技能的逻辑思想一样,都是通过建表的思想,判断各种条件,筛选出当前最适合的一个药品,然后调用吃药call。现在假设有三种药药1 回血100 1级药2 回血500 10级药3 回血1000 20级当角色在1-10级的时候只需要使用药1即可;在10-20级的时候,优先使用原创 2022-03-30 17:17:47 · 1452 阅读 · 1 评论 -
012 背包二叉树遍历分析和代码编写
文章目录背包属性遍历物品名字库遍历数据整理代码编写背包属性遍历[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmv8DqwV-1645430806268)(012 背包二叉树遍历分析和代码编写.assets/1641096682839.png)]从物品数量入手,搜索2字节筛选出唯一的值下两字节的访问断点,鼠标移动到物品上面,断点断下物品数量=r14+0x10这里就能得到一个+0x10的偏移。然后记录下每层的返回地址r14来源于r9r9来源于rsi原创 2022-03-25 19:48:09 · 1957 阅读 · 1 评论 -
011 吃药call功能分析和代码编写
文章目录定位吃药call代码编写定位吃药call在编写自动吃药功能之前还需要两个数据,一个是吃药的功能call,另一个是当前的背包遍历,我们先来找吃药call。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0i3dHnw-1645430627467)(011 吃药call功能分析和代码编写.assets/1642770885951.png)]首先来到明文封包call头部吃药让断点断下返回上一层,这一层是明文的发包call,继续返一层到功能call这里就是原创 2022-03-22 10:23:08 · 2190 阅读 · 0 评论 -
010 自动技能的设计和实现
文章目录自动技能的设计技能表的设计初始化全局技能表获取最优技能自动技能的设计首先新增一个技能管理类。我们先说最简单的自动技能的逻辑,实际上就是让玩家自己将技能设置好,然后挨个释放技能。这种逻辑写起来并不复杂,只需要将所有的技能数据全部放到容器里,然后挨个释放即可。在这个基础上,可以再增加一些逻辑,例如有一部分技能是回血技能,那么我们就去判断当前的人物血量,只有当血量到一定的阈值才进行释放。技能表的设计接着我们来设计一套自己的选技能的逻辑。首先设计一个技能详情的结构体//技能使用详情stru原创 2022-03-19 10:34:06 · 850 阅读 · 0 评论 -
009 自动打怪功能的设计和实现
文章目录界面代码流程设计取最近怪物自动打怪界面代码[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pY3AZ993-1645430370274)(009 自动打怪功能的设计和实现.assets/1642605046746.png)]首先新增一个复选框,绑定控件变量和按钮事件,然后在按钮事件添加如下代码//自动打怪void MainWnd::OnBnClickedCheck1(){ static HANDLE hThread = 0; if (m_Auto_At原创 2022-03-15 18:17:25 · 2166 阅读 · 1 评论 -
008 释放技能call分析
文章目录释放技能分析定位普通攻击call数据整理代码编写释放技能分析接着我们需要拿到释放技能的数据首先来到明文发包call头部释放技能让断点断下此时第一次返回的call是选怪的封包call。所有的传奇类的游戏,都需要先选中怪物,然后在走近怪物,最后攻击我们在人物打怪的中途断下,此时返回的第一层地址才是技能call。这一层的call被加密了。我们需要返回到第二层。| mov dword ptr ss:[rsp+0x30],eax | rsp+0x30 计原创 2022-03-13 10:44:44 · 2126 阅读 · 0 评论 -
007 定位明文封包call
文章目录明文封包call的作用定位发包函数定位线程发包跳出线程发包定位喊话callTip明文封包call的作用在网络游戏中,客户端和服务器的通信基于一系列的数据包。每个数据包都类似于一条指令,客户端和服务器在这个系列指令中完成指定动作。客户端要与服务器进行通信,必须调用下面的三个发包函数发送数据包send();sendto();WSASend();那么我们只要在这三个函数下断点,然后进行堆栈回溯分析,就能准确定位关键的函数调用链。在这条链上,快速排查出需要的功能call。明文封包call的原创 2022-03-10 20:55:11 · 1716 阅读 · 0 评论 -
006 技能数组分析和代码编写
文章目录技能遍历技能名字数据整理代码编写现在我们已经有了人物的数据和周围对象的数据,还差一个技能数据和释放技能call,就可以完成自动打怪的功能。接着我们来找技能遍历的数据技能遍历以技能的当前经验为突破口直接搜索当前经验值筛选得到唯一的一个数值下访问断点,让断点断下,此时[rax]就是我们要追的数值[rax]rax来源于上面的call这个call传入了一个技能ID和一个基地址作为参数,我们进入call内追rax的来源经过这三个步骤rax变成了[rax*10+rdx+4]原创 2022-03-07 18:39:20 · 854 阅读 · 1 评论 -
005 周围遍历二叉树分析和代码编写
文章目录周围遍历分析定位角色名字偏移玩家名字偏移NPC名字偏移数据整理代码编写所谓的周围遍历,其实就是人物附近所有的怪物 NPC 和玩家信息,拿到了这些数据,我们就可以实时获得当前人物对象周围有哪些数据。对于编写自动打怪来说,需要的是周围的怪物的数据,ID 名字血量坐标等等。周围遍历分析首先从怪物的血量入手直接搜索血量然后筛选出唯一的值对血量下访问断点,断在了我们之前找人物血量的地方[rax+0x65C]+0x1ACrax来源于rbxrbx来源于rcxrcx来源于rax,再进原创 2022-03-04 20:51:49 · 1504 阅读 · 1 评论 -
004 人物数据查找和代码编写
文章目录角色血量基址查找分析角色其他属性分析角色名字搜索角色坐标数据整理代码编写接着我们来开始找游戏数据,以编写自动打怪为目标,找齐这个功能所需要的所有的数据。第一个需要用到的数据就是角色属性。角色血量基址查找直接搜索当前人物的血值修改血值之后再次扫描接着我们修改第二个数值,然后打开角色属性。发现第一个数值也会跟着修改,说明第一个数值的来源是第二个地址对这个地址下内存访问断点,断点断下。[rax+0x1AC]是人物血量,这里就可以获得人物血量的两层偏移[[rsi+0x65C]+0x1A原创 2022-03-02 10:01:59 · 1323 阅读 · 2 评论 -
003 辅助框架的代码实现
文章目录StuCPublic公共函数MemOper 内存操作GlobalData 全局数据接着上一篇文章,我们来聊关于整个辅助框架的代码实现Stu按照常规的思路,我们来构想一下接下来的开发过程。首先我们需要找到人物的数据,然后编写代码的时候设计一个人物数据的结构体;接着周围遍历的数据,又要设计一个周围遍历的结构体;后续用到每一个新的数据,都要设计一个结构体来存放。等写了两三个游戏以后就会发现,很多代码都在重复写。那么这就引出了一个数据管理的问题,怎么样用最高效的方式去管理这些数据。其实很多对象有一原创 2022-02-28 09:54:05 · 796 阅读 · 0 评论 -
002 辅助框架的设计
文章目录新建MFC项目辅助框架设计小结如果你大概了解过游戏引擎的概念,就会知道 游戏引擎是指一些已编写好的核心组件。为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。游戏引擎有一套通用的框架可以复用,那么游戏辅助当然也有。新建MFC项目首先新建一个MFC的项目,命名为GamePluginFrame。新建一个对话框资源然后添加一个窗口类。记得将项目属性设置为x64,因为传奇永恒是64位的游戏。然后在MFC项目的InitInsta原创 2022-02-25 10:56:45 · 1199 阅读 · 0 评论 -
001 环境准备
文章目录前言学习目标游戏选择前置知识环境准备游戏数据准备前言这个系列的文章会带领大家从零开始完成一个完整的游戏辅助的设计,整个过程包括所需要游戏数据的查找分析,和代码编写。最后会带大家完成一个具有自动打怪,自动选择技能,自动吃药,自动任务的游戏辅助,并且整个游戏辅助的代码可以作为一套框架套用到任何一个游戏上面。学习目标完成一个具有自动打怪,自动选择技能,自动吃药,自动任务的游戏辅助游戏选择对于一个新手来说,选择一个适合入门的游戏至关重要。个人认为需要考虑下面几个因素:游戏反调试和检测相对弱原创 2022-02-24 23:30:00 · 687 阅读 · 0 评论