【问题标题】:Flash game hackingFlash游戏黑客
【发布时间】:2010-10-06 13:51:13
【问题描述】:

我通常在我的网站上组织锦标赛(基于 Flash),这次我添加了一个锦标赛,用户必须在其中完成一个拼图游戏,而在最短时间完成它的人会赢得一些奖品。由于拼图游戏总是产生随机位置,因此他们很难破解。他们甚至不能直接下载游戏,因为它不能使用闪存保护程序等下载。但我想知道他们是否可以制作一个自动完成拼图游戏的程序。

请告诉我。即使时间也不能被破解,因为我使用时间也在我的服务器端打勾,所以我匹配游戏提交的时间和存储在我的服务器中的时间。

【问题讨论】:

  • 实际上,用户不必创建一个可以为他播放的 AI...他只需使用 HTTP 嗅探器(一个可以让您控制发送到/从您的计算机)并跟踪您的游戏请求,然后尝试重复它们。但是.. Rook 可能是对的,反编译代码会更容易。

标签: flash security


【解决方案1】:

那么 Flash 应用程序是如何告诉服务器谜题已经解决的呢?使用TamperData,攻击者可以拦截/修改/重放这个请求,即使它是通过HTTPS。如果您尝试嵌入秘密,则可以通过反编译 flash 应用程序甚至在应用程序运行时调试 flash 并在内存中找到秘密来获得它。

通常我会说你想要做的事情是不可能的。但是,让我们玩这个元安全难题。是拼图吧?所以这意味着这个难题只有一个解决方案。所以你可以使用一些加密来解决这个问题,这个解决方案与Message Authentication Code 非常相似,但这有点不同。

当拼图启动时,Flash 应用会请求拼图。为每个拼图分配一个随机数以及传输到闪存端的随机位置。解决后,您可以根据拼图中的碎片位置连接每个数字。所以在闪存端总是将数字从左到右然后向下连接。当 flash 客户端收到谜题时,数字将是乱序的,唯一的方法是它们的顺序正确是如果谜题已经解决。当它解决后,对连接的数字进行哈希处理。理想情况下,您应该使用 sha256,尽管 md5 会起作用,因为攻击者不知道哈希值,因此不会发生冲突

服务器知道拼图何时开始,因为闪存端请求了与拼图对应的数字。服务器知道拼图何时完成,因为闪存端传输了解决方案哈希。服务器提前知道解决方案哈希是什么,因为它分配了数字。这很像一个mac,但不同的是,秘密在于拼图的顺序。

【讨论】:

  • 使用加密并不能解决任何问题。您可以发送一个哈希,或者等效地,您可以发送一个列表,其中列出了哪些片段去哪里。但这并不能解决这样一个事实,即这可能是一个相当简单的图像处理问题,一个坚定的黑客总是可以简单地编写一个程序来找出哪些碎片去哪里了。如果每次都使用相同的图像(即剪辑不变),它会变得更容易。
  • @bdonlan 安全的一个重要部分是:“目的是否证明手段合理”。为什么要废弃整个项目,因为存在一种没人会使用的攻击?是的,有些混蛋可以写一个图像识别程序,他得到的比他投入的更多吗?他有壳吗?还是他在一些蹩脚的比赛中得到10分?为此写一个漏洞利用,告诉我谁在乎。写一个在新闻中出现的漏洞,在 defcon 上谈论它,然后告诉我谁在乎。
  • @当谈到我的热情时,我会一直对此有强烈的感觉吗?
【解决方案2】:

是的,它可以被黑客入侵。首先,不要过分相信您的“闪存保护程序”保护。一个确定的对手能够检索代码 - 毕竟,代码 在用户的计算机上,否则它无法运行。

其次,“随机位置”并不一定意味着什么。如果碎片上有任何类型的唯一 ID,或者如果随机化是在客户端完成的,则很容易将它们放在正确的位置。您必须至少随机化切割的形状。即使这样,考虑到原始图像,编写一个快速求解器也不会太难。

哦,这一切都假设您的服务器进行了更多的验证,而不仅仅是在用户完成时被告知。你需要确保他们确实解决了图像——但我不相信这是一个人工智能难题;似乎即使您的 Flash 代码是不可破解的,如果图像集很小,也很容易找出每个部分的正确方向和位置。

【讨论】:

  • 可以被黑,有解决办法。
【解决方案3】:

抱歉评论选项不存在 实际上我已经使用 xml 文件来描述拼图(每个)的位置。 并且对于时间它是隐藏的并且使用被篡改的daya他只能看到随机没有。这就是你可以说的 mysql 的 s.no。 它就像验证时间和游戏时间,每个都有不同的字符串 所以我的问题是,是否有人可以使用我的 xm 文件来检测拼图的位置并创建一个应用程序,只需单击一下即可将每块拼图放置在正确的位置

【讨论】:

  • “随机不”是什么意思?无论如何,攻击者可以只保留已解决的拼图图像的副本,然后使用程序比人类解决问题的速度更快地查看哪些部分适合...
  • 顺便说一下,看看具体向客户端发送/从客户端发送什么样的数据会很有帮助 - 否则,很多这只是猜测。
  • 评论不是一个选项,因为您创建了两个帐户。我现在已将它们合并在一起,因此您应该可以发表评论(您可以随时评论自己的问题和对自己问题的回答。)请将其移至预期的任何答案。谢谢,欢迎!
【解决方案4】:

恕我直言,在客户端-服务器游戏中避免作弊的唯一方法是让客户端只是一个 GUI,并确认服务器上的每个用户操作。如果如此理想的客户端应用程序甚至不应该知道如何回答用户(直到服务器发送类似“在磁贴 21-17 上沿方向 7 播放动画 5”之类的内容)

【讨论】:

    【解决方案5】:

    数据包编辑,他们可以使用wireshark之​​类的东西来捕获数据包,如果时间写在他们的浏览器中,他们会得到一个数据包,告诉他们使用的时间,他们可以使用代理进行中间人攻击,他们编辑数据包说你使用的时间更少,或者只是在 Python 中创建一个简单的 UDP 数据包发送者。即使你不安装游戏,他们仍在运行它,他们可以通过在 HTML 源代码中找到 swf 来下载 Flash 游戏。指向存储此游戏的页面的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      相关资源
      最近更新 更多