DEFCON Conference 19.破解MMORPG以获得乐趣和收益。 第二部分

DEFCON Conference 19.破解MMORPG以获得乐趣和收益。 第一部分

乔什·菲利普斯(Josh Phillips):正如我们所说,所有黑客都很简单,使用它们有时不需要任何技能,只是一种创造性的业务方法。 要使用“超级大国”,您无需成为逆向工程之神,但它绝对可以帮助整数溢出或填充不足等问题,并且您可以轻松地将所需的值从0更改为最大值,例如对敌人造成致命伤害。



迈克·唐纳利(Mike Donnelly):是的,这全都归功于制作骇客工具的能力,例如,最大化您的装甲。 这发生在《魔兽世界》中-我们有一个人坐在兽人之都奥格瑞玛(Orgrimmar),脱下头盔100次并戴上头盔,将力量从2级提升至32级。

乔希·菲利普斯(Josh Phillips):这真的发生了吗,或者他只是使用了内存编辑器并拍摄了屏幕截图?

Mike Donnelly:您可能是对的!

Josh Phillips:我最喜欢的模式是GM模式。 一些公司生产的游戏具有逆向工程的可能性,因此,您成为通用汽车的“游戏大师”,可以传送人,破坏东西,发出命令并做其他有趣的事情。 还有一种有趣的黑客手段,例如从非玩家NPC角色盗窃物品。 《柯南时代》游戏是最早存在可以杀死GM的漏洞的游戏之一,我不认为其开发人员对此感到满意。

迈克·唐纳利(Mike Donnelly):漏洞是否可能欺骗关键玩家的ID?

乔什·菲利普斯(Josh Phillips):是的,就像您对服务器所说的:“我是一名游戏大师,现在我要死了。”

迈克·唐纳利(Mike Donnelly):有时候,当您声称自己是另一个游戏角色时,游戏服务器会信任您,并说:“我就是这样,我正在卖这个!”

乔希·菲利普斯(Josh Phillips):我已经说过,游戏开发者是幼稚的人。 黑客UI黑客的价值较低。 如果您想看得很远的游戏空间,或者像幽灵一样奔跑在游戏区域的地图上,而又保持原样,则很有用。



迈克·唐纳利(Mike Donnelly):您仍然可以使用这种语言的“狂野”翻译,因此,例如,联盟玩家将不再理解Ward玩家。 在这里,黑客行为发生在客户端,因此在对话过程中,不会显示对手发送给玩家的文字。 这相当容易做到,但是我怀疑有人会为这种黑客付出代价。

乔什·菲利普斯(Josh Phillips):演讲的下一部分叫做:“我在你的基地,伙计们,要杀了你!” 我将尝试向您解释如何编写一个传送黑客。 有一个简单的方法和一个困难的方法。

一种简单的方法是在内存中找到玩家的位置,对其进行重写,然后调用游戏功能,该功能负责更改玩家的位置以传送到选定的位置。 因此,如果您知道负责玩家位置的代码所在的位置,并且可以使用某些功能直接调用该代码,那么它可以是一个隐形传送法术,在Lua中称为“施法术”,那么您可以为其指定所需的值玩家的传送地点。 但是,服务器将无法识别您是普通的战士还是可以使用咒语的法师。 此方法适用于许多游戏。
困难的方法是伪造运动数据包。 这将需要数学计算和关于如何更新它们的知识,运动分组的反向工程等。 您可能需要调整时间戳以传送或运行得更快。



下一个hack是通过用所需的ID替换数据包中的原始ID来攻击游戏逻辑,我们在《柯南时代》的背景下提到过。 这些攻击包括对玩家交易技能的攻击,严重破坏或角色和游戏物品的坠落破坏的完全破坏,以及以抢劫为目的的NPC商人的攻击。 在《柯南时代》中,有可能对游戏中的任何角色造成严重伤害,甚至可以通过给GM分配一百万个秋天伤害来杀死GM,然后他就死了。

Mike Donnelly:是的,这很有趣!

乔希·菲利普斯(Josh Phillips):您还可以在该游戏中使用恶意代码,以使某人与您建立交易关系甚至不知道它。 您可以强迫NPC向您出售某些东西,但除我之外,许多玩家仍在使用此技术,因为我不喜欢从计算机角色中窃取。 而且我认为你们都不应该这样做。

Mike Donnelly:这会引起数字化眼泪...

乔希·菲利普斯(Josh Phillips):之后是骗人或克隆物品。 许多游戏都有诸如服务器端划界问题之类的漏洞。 例如,柯南时代,无尽的任务,最终幻想XII和《创世纪Online》具有分区功能,即,如果您在一侧施放咒语并在越过服务器线后找到在那打败您的敌人,您就可以继续战斗。 重复方法的缺点是,您可以以极大的速度(例如每秒1000次)将事物从交易窗口来回移动到背包。 结果,服务器停止跟踪事物,它们完全塞满了您的背包。 每个人都知道《暗黑破坏神1》游戏,您只需将一个物体扔在地上,跑上去,将其悬停在上面,试图捡起它,然后它立即出现在您的背包中,同时仍留在地面上,因此这是一种非常有趣的黑客方式。

正如我所提到的,黑客游戏资源或资产黑客是不值得的,除非别人为您发布了可以借出的作品。 玩过《魔兽世界》的人都知道有人可以神奇地出现在你的身边-我不知道它的正确名称是什么...

迈克·唐纳利(Mike Donnelly):战场,战场。

乔希·菲利普斯(Josh Phillips):实际上,我从没玩过《魔兽世界》,对我来说太无聊了。 因此,玩家使用远距传送立即从战场转移到敌军基地并杀死那里的所有对手。 他们还可以修改游戏地图,并创建一条隧道以地下运行到所需区域,以便没人能看到它。 也许您会看到他的小名字-标签在地图上移动,但您不会看到玩家本人。 但是无论如何,这些黑客方法都不值得付出努力。

我将以马基雅维利的名言开始“破解420游戏”部分:“没有危险就不会成就任何伟大的事情,”因此您可能会被起诉。

Mike Donnelly:是的,是的,是的。

乔希·菲利普斯(Josh Phillips):我认为确实如此。 您可以在游戏中使用该机器人,几年前有人对此进行了讨论,而我想打他,因为这并不有趣。 因此,为此,您需要执行一些操作,例如读取像素并自动执行此过程,这里没有反向工程。 例如,一次快速击键,就可以重绘自己损坏的“红色”临界点,以使它们不会变成红色,并且不会死亡。 这是规模非常有限的骇客,如果您迅速采取行动,您的行动将不会被注意到。

Mike Donnelly:的确如此,您需要迅速采取行动。 有谁知道为什么检测如此糟糕? 正确理解我的意思,我不想在客户端进行检测来修饰情况,这里的每个人似乎都很聪明……显然,游戏制作人不喜欢我们在说的一切,因此他们尝试在游戏中找到您的软件,如果找到了,拜托你。 如果您出于娱乐目的而作弊,那么您可能损失的最大损失是自己的游戏帐户,但是如果您有10万个客户,这将是一个大问题,因为如果您禁止所有客户,那么您就烧光了。



因此,防止检测到作弊非常重要。 我们稍后再讨论,但是现在我要指出,在客户端检测软件非常重要。

乔希·菲利普斯(Josh Phillips):你们是否想知道为什么禁令浪潮每3个月大约发布一次? 事实是,当您每周禁止5万个帐户时,由于成本高昂,重新链接这5万个帐户的人将永远不会再这样做。 但是,如果您每3个月或4个月禁止他们使用不超过一次,则他们将重新购买帐户,因为这将有利可图。 公司的想法是这样的:我们发现这些家伙使用了例如Glider机器人,但不会禁止他们,因为如果我们经常禁止他们,他们将给我们带来不超过50美元的利润。

Mike Donnelly:是的,是的。

Josh Phillips:另一种破解方法是在插入小的汇编代码以生成一些小东西时注入代码,例如,远程调用某种RPC过程。 我的意思是说,攻击的范围可能会增加,实际上,您可以使用DLL注入到用高级C或C ++编写的大量代码中,这很容易检测。 您编写了一个DLL加载器,该加载器修复了所有导入以及所有这些问题。

您可以攻击网络数据包的级别,并可以对网络协议进行反向工程。 这是一项非常耗时的工作,因为没有太多游戏可以进行这种内容分析。 这仍然不是一件容易的事,如果您认为自己是专业人士,则可以编写自己的游戏客户端。 人们常常以为自己可以做到并且花了很多时间徒劳无功,但是如果您真的有能力写出一个好的客户,比如几个月前把我毁了的家伙,那么您每月可以赚几十万。

迈克·唐纳利(Mike Donnelly):编写自定义客户不是您要出售的产品,而是“黄金耕作”和真钱交易。 如果您编写了游戏客户端,则可以要求您的合作伙伴在Pharming服务器上启动一千万个游戏副本。 如果您的游戏客户端不需要大量的3D渲染操作,那么其出色的性能可用于扩展黄金种植。
乔希·菲利普斯(Josh Phillips):如果您通常可以在计算机上运行2-3个游戏客户端,并且能够启动200-300个客户端,那么这将是一个很大的规模。

现在考虑一种叫做反作弊的东西。 在它的帮助下,您可以处理计算和禁止作弊者的软件。 这通常是一项非常艰巨的任务,但有时却很重要,不要被发现,否则您可能会失去一切。 在幻灯片上,我引用了孙子的另一句话。他说:“对无形式感要极其微妙。 变得极度神秘直到沉默。”

Mike Donnelly:我想指出检测的技术方面并不多,但是您应该策略性地进行处理,这不在“ MMO Hacking”一书中。 也许有这样的书?



Josh Phillips:是的,它是由我的一位朋友写的。

迈克·唐纳利(Mike Donnelly):这个家伙首先被淘汰。 因此,就像本书中没有提到的那样,但是如果我们谈论一种战略性业务方法,那么您应该担心与您的软件有关的两个主要问题。 您有一个攻击面来确定检测您的软件的难度,在这种情况下,防欺诈可以在很小的情况下简单地增加检测代码。 其次,您应该拥有我简称为“智能”的知识,也就是说,您对敌人在做什么的了解程度如何,您需要了解其检测程序的工作方式,因为这非常重要。 这两件事协同工作,并且如果攻击面太大,则很难说清敌人在做什么,因为他的努力可能很小-只需编写一行代码来检测您的机器人即可。 如果您做的事情真的很酷,例如我的机器人,它会在2毫秒内响应,如果怪物做了什么,则可以避免被发现。

因此,这是在选择功能和设计客户要求时必须做出的决定。 您必须通过添加此类功能来增加攻击面来决定是否要冒险。

在显示下一张幻灯片之前,我想谈一谈我和其他《魔兽世界》软件开发人员所经历的事情。 一个人开发了软件,我们称它为Innerspace,它是通过将dll注入到一个相当大的游戏中来工作的。 这个人精通逆向工程,因此他采取了所有措施来对抗暴雪检测程序。 但是他仍然将dll保留在内存中,这是他想要“混淆”的,更重要的是,他必须修补暴雪的功能之一。 因此,他只是简单地转到该函数的开头,并在代码中的正确位置插入了“跳远”,请确保他已经屏蔽了足够多的内容并且没有人会找到他。

下一张幻灯片显示了插入代码的函数,请注意以红色突出显示的值,我们将增加此片段,以便每个人都可以看到。



这是一段插入游戏内部的代码,但不是《魔兽世界》 ...

乔希·菲利普斯(Josh Phillips):因为迈克(Mike)追逐暴雪(Blizzard)...

迈克·唐纳利(Mike Donnelly):我只是想从《魔兽世界》中举一个例子不是一个好主意。 在此代码段中,您看到游戏使用了askForBuddiesList朋友列表查询,该查询具有一个从未使用过的可选参数。 可以将其理解为包裹号,团队号或BOB号-“ Over子兄弟”。 这个可选参数被“粘贴”到代码的这个位置并发送到服务器,一切都非常简单。

因此,此“粘贴”代码-让我们向下滚动几行到注释-说:旧代码是askForBuddiesList(0),它是0,现在新代码与选项参数_asm一起使用,以前从未使用过。



因此,暴雪打算在游戏代码中找到该家伙修复的功能。 为此,他们将此函数调用更改为一个小的代码示例。 他们使用了寄存器,进行了一些数学计算,因此IDA将看不到与此功能的另一个链接。 然后,他们转到更正的函数,提取其代码的第一个字节,并将其作为从未使用过的参数发送。 那会发生什么呢? 他们每次发出此请求时都会发送一个自己的代码字节,当然,在服务器端,他们只是简单地“梳理”它,如果发现E9而不是零,那就完成了!

该软件的有趣之处在于,您在这里看不到“如果此人是机器人,请告诉服务器”。 您只看到我接收了此字节并将其发送,这是一小段代码,甚至都没有更改主网络代码,没有新参数,也没有新内容。 找到它的唯一方法是以某种方式观察如何收集此数据,然后我们可以说:“是的,这个东西总是0,现在是9,不好!”

因此,当他们这样做时,这个家伙失去了所有客户,因为他们等了几周才被禁止,然后公司一次又一次地罢工。
这是一个很好的例子,说明攻击表面的意义是多少,因为仅修复游戏的一项功能就导致了这种反应。 事实是,如果您认为知道检测代码在哪里,则总是有可能不是您所想的。 就暴雪而言,他们从来没有将检测代码放置在守望者的“游侠”之外;他们“将所有卵都保存在一个篮子里”,将探测器藏在了“游侠”中。 但是随后他们明智地说道,我们将在所需的任何地方发布我们的小代码-就是这样。
因此,保持难以检测非常重要。 如果他们提出了新的内核调用之类的要求,或者启动了私有API监视器,则可以检测到他们的活动,但是当他们迈出很小的一步时,您立即会被抓住。 因此,观察它们的作用以及如何创建新工具以监视系统中数据流的外观非常重要。

至于Glyder,我们有可以警告我们的工具,例如,Warden已更新,现在有9个入口点,而不是8个入口点。发出这样的警告后,我跑到办公室开始狂热地修复Glyder,将其带到订购并再次运行。 所以总有一条出路,主要是不要偷懒。 在这项业务中确实有很多工作要做,但是很值得。

Josh Phillips:是的,我想我们俩必须连续工作36个小时。

迈克·唐纳利(Mike Donnelly):当暴雪更新了“游侠”时,他们添加了一个新的扫描仪。 该扫描程序将在“看守者”内部进行加密的行,接收服务器密钥,解密此行并调用GetProcAddress函数,该函数从指定的动态连接的库(在本例中为kernel32.dll)中提取导出函数的地址。 如果我无聊,不用担心,那会更好玩。

因此,无论字符串是什么,他们都会接受该字符串,并且如果该字符串由此函数进行调节,则将在不使用任何参数的情况下将GetProcAddress应用于该字符串。 , , , , . , - kernel32.dll , , .

, , , , Hellgate: London. , , ! : « ! , »!



, , URL — YouTube! GetProcAddress, ProcAddress , , , , , ! , . , . , , ricroll, - !

: , . , - , , , dll . , . Blizzard , «, , – , ».

, , , command & control , «» Warden Punkbaster. WoW, , .

: .

: , . Punkbaster , , . window.name, Punkbaster. : «, , , IRC , , ».

, Punkbaster : «-, !», .

, . , , . . , .

: , , Diablo 3.



, – ? Blizzard . Blizzard . , , «» Blizzard, .

: , . , , , .

: , …

乔希·菲利普斯(Josh Phillips):我希望我们还有一点时间,所以我们将去问题和答案室,继续我们的交流。

Mike Donnelly:谢谢DefCon!




感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们, 为我们为您发明的入门级服务器的独特模拟,为Habr用户提供30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

VPS(KVM)E5-2650 v4(6核)10GB DDR4 240GB SSD 1Gbps,直到春季免费,直到半年付款,您都可以在此处订购。

戴尔R730xd便宜2倍?在荷兰和美国,我们有2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) 阅读有关如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?

Source: https://habr.com/ru/post/zh-CN437790/


All Articles