【问题标题】:How to hack proof a data submission program如何破解数据提交程序的证明
【发布时间】:2011-01-31 12:16:21
【问题描述】:

我正在为游戏编写分数提交系统,我需要确保返回服务器的报告不会被伪造(也就是被黑客入侵)。

我知道我可以在程序中存储密码或私人密码来验证或加密请求,但如果程序被反编译,狡猾的黑客可以提取密码/密码并使用它来伪造报告。

是否存在完美的解决方案?

提前致谢。

【问题讨论】:

    标签: encryption passwords cryptography


    【解决方案1】:

    没有。你所能做的就是让作弊者难以为继。

    您没有说您正在运行什么环境,但听起来您正在尝试解决代码身份验证问题*:知道正在执行的代码实际上就是您认为的那样。这是一直困扰网游的问题,一直没有好的解决办法。

    此类系统通常被破坏的常见方式:

    • 捕获、修改和重播向服务器提交的内容
    • 修改二进制文件以允许作弊
    • 在程序应用签名/加密/其他之前使用调试器修改内存中的提交

    Punkbuster 是试图解决其中一些问题的系统示例:http://en.wikipedia.org/wiki/PunkBuster

    也可以考虑http://en.wikipedia.org/wiki/Cheating_in_online_games

    很有可能,这对您的游戏来说太难了。在你的二进制文件中隐藏一个公钥并对剩下的所有内容进行签名可能会让你在安全方面遥遥领先。

    * 抱歉,我实际上不记得它的正式名称是什么。我一直在想“运行代码身份验证”,但谷歌没有给出这个术语。

    【讨论】:

    • 真可惜。感谢您的详细回答。
    【解决方案2】:

    您可以做一件事 - 记录所有用户输入并将其作为提交的一部分发送到服务器。然后,服务器可以通过游戏引擎的本地副本重放输入以确定分数。不过,显然这并不适合所有类型的游戏。根据游戏的不同,您可能需要包括重放保护。


    另一种可能适用于某些类型游戏的方法是在提交内容中包含高分比赛的视频记录。提供指向高分表中视频的链接,以及报告可疑条目的链接。这将让您“众包”作弊检测 - 如果作弊者的分数达到第 1 位,那么得分为 2 到 10 的玩家有很大的动力为您验证视频。如果分数被报告的次数足够多,您可以自己检查视频并决定是否应将其删除(并且用户禁止)。

    【讨论】:

    • 嗯...这很聪明。谢谢。
    • 可能是你能得到的最好的。尽管如此,机器人或计算机辅助玩家仍然是可能的。还有一个技术问题是,要让这种重播发挥作用,游戏需要具有确定性。例如,浮点舍入或迭代某些无序容器可能会出现问题。当然,即使使用正确的锁定,多线程也会导致不确定性。
    • @CodeInChaos:这是真的。您必须小心确保游戏是确定性的(给定相同的初始种子),这可能会很棘手,具体取决于您使用线程的方式。
    • 使 PRNG 具有确定性是最小的问题。它抖动的语言可以生成 x87 或 SSE 指令,从而产生不同的结果(或进行一些影响结果的其他优化)。例如,在 C# 中,迭代 DictionaryHashSet 时返回元素的顺序是未定义的。
    • @CodeInChaos:同意。迭代器问题似乎可以克服(确保代码的最终结果不依赖于元素顺序)。浮点数比较棘手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2022-11-23
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多