这就是我想要做的事情:当玩家赢得游戏时(以flash / actionscript编码),他们会获得一个个性化的密钥,他们可以通过电子邮件发送给我以换取奖品。然后,我可以使用私有算法验证我的密钥。
我需要设计它,以便黑客几乎不可能在不赢得游戏的情况下生成有效的奖品密钥。这甚至可能吗?
我认为任何SWF文件基本上都容易受到反编译的影响,但我不确切地知道它们有多脆弱。也许任何生成有效密钥的算法都可以被黑客访问?
我可以使用actionscript 3中的所有方法,以及PHP / MySQL服务器,并控制将托管游戏的服务器。
答案 0 :(得分:4)
你真正想做的是安全地确定游戏的胜利者。
这很难,但是,根据游戏的不同,你可以尝试:
持续验证服务器的游戏状态(门打开,进入房间,地图上的坐标等),特别是关于时间(在坐标之间移动需要多长时间); < / p>
确定游戏是否会提前赢或输(例如scratch cards);
询问获胜者关于比赛的问题(“牛是什么颜色的?”)。
答案 1 :(得分:2)
免责声明:我不使用flash。
开始游戏时,我会从服务器获取一个唯一的令牌。在他们赢得游戏后,我将使用该唯一令牌生成代码并将其显示给用户。然后,您可以从服务器验证针对令牌的唯一代码。
你可以做的另一件事是在玩游戏时逐步“构建”独特的代码。如果他们不玩,他们至少必须回溯整个游戏才能生成代码。
我会说大多数游戏都以某种形式易受反编译,其目标是尽量减少损失。如果您赠送高价值的奖品,那么您当然会成为不道德的人的目标。
答案 2 :(得分:2)
保留密钥生成服务器端。即使它是一个简单的md5哈希,保持确切的生成细节是秘密的也是至关重要的。在你生成的任何哈希中添加一些随机字符,因此它不会像md5或sha1哈希一样。
当然,问题变成“我怎么知道用户真的赢了比赛”?反编译.swf将让一个坚定的用户弄清楚你发送“won = 1”并且繁荣,你得到一个获胜的密钥代码,此时游戏结束,可以这么说。
让你知道这有多难:
多年前,有一个网站提供你玩的小闪游戏,赢得积分,你可以交换奖品。它的编码非常草率,你不得不质疑网站运营商的理智。一些主要缺陷:
1)每天进行调查。一个问题,有一些选择。他们将问题的分值作为隐藏价值纳入调查表。它是通过GET提交的。您可以手动构建响应并每天给自己一次MAX_INT点数,只需在地址栏中执行“response.php?surveyID = XXX&amp; choiceID = YYY&amp; points = 4294967295”
2)他们相对较快地提到了这一点,并修复了积分漏洞,但由于某种原因取消了每日限制,所以你可以多次提交答案(比方说)20分。一个流行音乐。
3)在他们解决了这个问题后,人们开始攻击游戏 - 玩游戏并赢得比赛会给你(比方说)100分。在这里,他们在发布时更加聪明,并没有通过客户端来点击点值。但他们忘记验证播放的次数,这是保持客户端的 - 所以你可以在你的服务器上启动POST的次数多达100分 4)在确定并将“次播放”计数移至服务器后,人们只是让他们的机器人提交游戏的特定限制,但是在网站上提交了每个游戏的虚假声明5)他们开始将检查点放入游戏后(例如“告诉服务器级别1完成”,“看,他们刚刚完成2级”等等)人们只是将checkponit消息添加到窃取机器人的点。 / p>
等等...
如果您要开始使用任何价值的奖品进行奖品索赔,请注意,您可能会在短时间内多次尝试将预算超出骨干。
答案 3 :(得分:2)
简短回答是:
你不能。
答案很长:
由于您用来确定胜利者的其中一条信息是游戏本身和,因为游戏本身从一开始就受到了损害,因此您无法确定用户是否已完成游戏flash / actionscript决定胜利状态。即使脚本要求服务器在游戏路径上确定获胜状态的秘密,您仍然可以模拟这个,因此您无法确定您的服务器是否正在响应真人播放或已反编译的脚本以及某人手动播放答案。
你能做什么:
让人们更难以伪造回复,让脚本通过移动输出日志进行分析,在每次下载游戏时使用一次性填充来验证它是赢家,保持计时器运行确保玩家花时间玩游戏......在这个帖子中提出的其他想法也很好。
抱歉这个坏消息。
答案 4 :(得分:1)
首先,不要给用户一个“秘密”代码进行验证。
将页面传递给客户端时,创建“秘密”代码。可能是base64编码的GUID可以工作。记录guid,生成时以及数据库中的浏览器指纹。
游戏结束后,动作脚本会获取奖品的详细信息。将其与代码一起发回服务器。再次记录完成日期时间和浏览器指纹。
要验证,请检查guid生成之间经过的时间。另请查看浏览器指纹。
骗子会以三种方式脱颖而出。首先,日期/时间差异将非常短。你应该知道它通常需要多长时间才能玩。其次,您可能会看到包含无效代码的大量帖子。第三,浏览器指纹甚至可能告诉你谁在使用自动化工具。 <强>更新强>
我只是想指出一些你想要包含的东西。首先,@ aaz有一个很好的想法,即在他们填写获胜者信息时向玩家询问有关游戏的问题。这应该是随机化的一些元素。可能不仅仅是由于色盲的人数而导致的颜色;但在提供动作脚本之前,您肯定可以控制和记录服务器端。至少在发布结果时需要一定程度的人为干预。
其次,@约翰·刘易斯很好地记录了他们的游戏动作并提交了这些动作。也许任何点击坐标都可以保存并立即发送回服务器并保存日期/时间戳。您可以比较多个游戏中的这些坐标以查找模式。智能分析很重要。