【干货】C++游戏外挂开发教程14:哈希碰撞攻击原理及算法

文摘   社会   2025-01-07 00:01   广西  


欢迎来到C++游戏外挂开发系列教程! 

游戏外挂开发是一个既有挑战性又充满乐趣的领域,它让我们有机会深入探索计算机程序设计和系统底层原理。本教程将带领你从零开始,逐步学习如何使用C++编程语言开发游戏外挂,包括各种常见游戏中的作弊功能,如自动射击、透视功能、无敌模式等。通过本系列教程,你将了解到游戏外挂的基本原理、常见开发工具、技术挑战和实际应用技巧,为你打造成一名优秀的游戏外挂开发者提供全面的指导。

比方说我在网络服务器方面工作,需要处理大量的数据结构。当面对这种情况时,你们会首先想到什么呢?你们可能会想到数组、向量、迭代器等等。但对于处理大型服务器的数据结构来说,完全不够用。比如说,假设我有一个专门处理游戏网络的服务器,可能会有上万人不断地上线和下线。那么问题来了:当有人上线时,我们需要增加数据;有人下线时,我们需要减少数据。我们应该如何处理呢?
首先,我们可以想到使用数组。但是,数组是线性结构,一格一格排列着数据。如果有新玩家上线,我们需要将其添加到数组中;如果有玩家下线,我们需要将其从数组中移除。但是,我们只能删除数据,而数组的空间仍然存在,导致空间的浪费。
现在让我们来看看速度。当玩家1、2、3、4、5都在线时,数组中包含这些数据。如果玩家2离线了,我们将其数据清零。然后,当第7个玩家即将上线时,我们是否可以将其放在玩家2的位置呢?这样做会导致数据的空间浪费。
因此,使用数组并不是最优的选择。我们需要一种更灵活、更高效的数据结构来处理大量的玩家数据。
当我们处理3000到3001个玩家时,就会遇到这种情况。我们必须将新来的玩家放到第3001个位置,但这会导致速度减慢。怎么办呢?我们可以打开Visual Studio,然后在项目中定义一个数组。但是,我们需要找到一个更快的方法,而不是每次都遍历4000个元素。想想有什么办法可以解决这个问题。或者,我们可以考虑使用链表,但是链表遍历的速度可能比数组还要慢。作为程序员,我们应该思考如何解决这个问题,否则就会陷入困境。
链表是一个由节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。比如说,我们有一个链表,包含着3000个玩家的数据,每个玩家对应一个节点。如果第3001个玩家离线了,我们需要遍历链表,找到这个玩家并将其移除。但是链表遍历的速度相对较慢,因为它不能直接寻址,而是需要按照指针一个一个地找。这个问题是不是有点难以解决呢?
在这种情况下,我们可以考虑使用二叉树。二叉树是一种更高效的数据结构,它的遍历速度随着数据规模的增加而呈指数递增。每个节点都有一个值,而且根据一定的规则,左子节点的值小于根节点,右子节点的值大于根节点。这样,我们可以更快地找到需要的数据,提高处理效率。
比如说,现在来了一个3001,我们是不是要继续插入操作呢?插入到哪里呢?是不是要插入到这儿呢?对不对?对不对。3002是不是要插入到这儿呢?好,如果来了一个450,我们是不是应该插到这儿呢?是不是应该插到这儿呢?对不对?来了个800,插到哪呢?是不是比500大,比600大呢?对不对?差了600的六边,对不对?差到660边啊,650。好了,好了,那再来一个,再来一个。550是不是该插到这儿呢?是不是超级值啊?550是不是应该插到这儿呢?这个结构有没有问题呢?这个结构有没有问题呢?这个结构有没有问题呢?没问题的,打个一。没问题的,打个一。
我们再分,又来插了啊,新的玩家又来了。新的玩家又来了啊。好,300过来了。这些东西啊,我们先画上啊,先画上。画的有点不标准啊,对不对?这些东西都是新来的玩家啊,过来。这个是多少?500、400、300。比如说,现在我们插了一个,差了一个200。快,快,快,快,插在第几个?知道的同学在群里边打打打打。第一个,对吧?200插的第一个。比如说,现在来了一个460,插在哪呢?现在来了一个460,插在哪呢?对吧,插在第四个460个。好,嗯,再来一个啊。比如说,现在来了一个601,插在哪呢?601插在哪呢?对不对,插在这儿,对不对?插在这儿。这个就是树的结构了,对吧?这个就是树的结构了。
这一共有几个呢?1、2、3、4、5、6、7、8、9、10、11、12、13、14、15。这是不是一共有15个叶子呢?15个叶子相当于数组的15个下标,对不对?现在,第601个玩家走了,下线了,对不对?好,我们把它制空了,我们把它删除了,对不对?不能说置空啊,我们把它删除了,对不对?把它删除了。那么,我们有601个,第601个,我们需要遍历几次呢?如果是数组,我们是不是需要把数组遍历完呢?
编辑15次啊,遍历15次对不对?数字要变15次。但是啊,我们用了二叉树,我们只需要遍历几次呢?第一个过来啊,比较小,遍历一次啊,比他好,比他大遍历一次。你一次比650大,是不是变成两次?这比600小,我们只需要遍历三次,快不快?
如果说还多,并且数据量越多,优势越明显。他遍历几千个啊,可能只需要十几次。我们看一下,二的二次方等于啊,看一下啊,2 x 2 = 4,再乘2 x 8,再乘二三次,四次,五次,六次。哎,不是这么算的啊,2的21次是两次改成第一个,第二个,二个分成四个,四个分成八个。我看了一下,如果说我们要遍历,你是过来吧,二的二次方啊,四吧,对不对?是偏遍历了一次。如果遍历第二次,再乘以四啊,16啊。
16,第三次可以遍历256个数据啊,第四次,第四次可以编辑421234。四个过来八个十个十个,第五次啊,可以变成665536。不是,对不对?按着再画嘛,能再画。这有八个,对不对?我们分过来八个,再分就是多少呀?是不是16个诶?我可能算错了,二个分是16个,16个12345678,90。
算了算了,整了三次40 x 2466454,六次七次八次九次啊,十次,11次,21次。哎,刚才算错了啊,遍历11次可以遍历的,不可以,4096各四集中三元。三元中,对不对?是不是优势越大越明显?是不是优势越大越明显?对吧,对吧?优势越大越明显,明白没有?他还可以再分吗?他一个数再分再分再分,再往下分再往下,这个明白没有?他每次都是成倍的,往下往下涨,成倍的往下涨,对不对?这个是树的结构,对吧?这个是树的结构,对吧?这个节奏没问题的。
它有一个缺陷,把它删掉啊。它有一个距离,比如说,第一个插入500,第二个操作400,第三个插入300,写一下啊,400啊,第三个数据是300,第四个数据是200,第五个数据是100,第六个数据是50,对不对?那么这样的话,它就成链表了,因为每次都这么小,每次都刚才我们只是预测的是最好的结果,对不对?
刚才我们是预测的最好的结果都是平均的,对不对?都是平均的。那么这个东西就成单链表了啊,都没有,这个就成单面单列表了啊,它必须比他大啊,才可以平均啊,才可以平均,对不对?他才可以平均。数数它其实就是二分法啊,每次分二,对不对?这个结果就有点坏啊,这个结果有点坏,情况不太好,对不对?称电表了哈哈,成链表了,对不对?那我怎么办怎么办?好,二叉树,二叉树解决不了了,是不是红黑素来了?红黑素来,红黑素来了,对红霉素就等于平衡。
二叉树,二叉树,对不对?红黑数就等于平衡二参数啊,对啊,怎么让他平衡,做得快,思考思考一下,思考一下,怎么让它平衡,思考两分钟,思考两分钟啊,怎么让他平,想你同学技术可以啊,对不对?我们评分我们就是旋转嘛,对不对?旋转红黑树,红黑树的本,核心,这是旋转对不对?就是旋转它不停,他每次操作数据他都不停的旋转啊,旋转,比如说我们先怎么选啊?我们先选,然后看三四,我们可以把300旋旋过去,是不是我们把300全旋过去,我们把300旋成根啊,把300做成根啊,对不对?好把300写过来啊,呃他的大的是卖400,400对不对?我们把300全成根,然后200他再过来是100。
它通过哈希函数,通过哈希函数,它还是又得到六了,怎么办?又得到六了怎么办?对不对啊?我们来到六了,又来到六了。你好,美国,我一看一看哎,六六它是不是有呀?六它是不是又有了呀?六之前有了啊,怎么办?再拉一根面条拉出来,对吧?六的下一个节点拉出来,对不对?
如果再来啊,再拉过来再往后拉,我也没过,对不对?这样就可以一直往后拉,一直往后拉。那么刚才说了,黑客徐欢,搞你服务器,搞你服务器啊。只要发现你用哈系列,哈系列,精心构造一个数据基,就让你一直这么,对吧,就让你一直寻找成一个地方啊,就是全部数据结构发过来都是六,对对对啊,他就把你搞搞服务器搞慢了啊。本来你的速度由本来你的速度啊,有5000啊,你的战斗力有5000,本来你的战斗力5000,战斗力,对不对啊,加加上手手啊,加上嘴。
我在这里啊,他只让你用嘴,只让你用一个,只让你用一用,一只手用一只手,对不对,他是不是把服务器搞慢了,这个就是啊,狂拽酷炫啊,高大上的哈希碰撞功能,高大上吗啊一点都不高大上,说的很6,其实也就这么回事,也就这么回事,原理搞明白了也不难,难的是什么呀?难的是你你怎么去啊去了解他的这个结构啊,难的是你怎么去了解他的这个结构。



暮色的狐
这是一只高强度上网冲浪、高质量输出内容的狐狸。主打ACGN杂谈、技术干货分享、第九艺术鉴赏、网梗百科解析、情感树洞鸡汤、正能量价值观~
 最新文章