fla*_*ker 10 security flash methods
我有2个Flash游戏(用as3编写).高分值都被黑客入侵.每场比赛得分的正常范围不超过5000(普通用户,只能获得2000 - 3000分).我目前的反黑客攻击方法是:
完成游戏后,flash将使用post参数发送:username = mike&score = 2000&hash = md5(secret.用户名.得分).在php页面中,我做了检查,如果哈希!= md5(secret.用户名.得分),它将返回错误,并且WONT将数据插入数据库.
我相信这种方法还不够,或者我的Flash游戏不会被黑客攻击.有什么我可以做的来改善我的Flash游戏安全/反黑客?
黑客是如何破解的?使用第三方软件,如Cheat Engine,Tamper数据(firefox ext),tamperIE等?
你能列出所有标准的黑客方法吗?(通过了解黑客的方法/问题,手段解决了50%的问题,至少我知道问题所在,并对此做了一定的预防)
好吧,我的标题有"49700",因为两个游戏的高分都是49700(实际上这个分数值插入我的数据库,不同的用户认为),所以我相信他们使用相同的方法
谢谢
如果完全在客户端运行,则无法确保您的分数验证安全.您必须至少在服务器端执行部分操作才能保证远程安全.我看到了两种方法:
您将定期分数更新发送到服务器,并在服务器端检查分数是否"跳得太多"(在游戏的上下文中定义).如果它"跳跃"你可以安全地假设玩家是黑客.
您将整个游戏移动顺序(以及任何随机生成或任何ai事件)发送到服务器,并在最后得分,并验证分数实际上是否准确.这显然不适用于每个游戏,但对于某些游戏,它可以工作.你没有透露具体的游戏内容,所以我会留在这里.
小智 5
到目前为止,最简单的方法,也是最难在Flash中失败的方法是使用CheatEngine简单地搜索存储分数的内存位置,然后将值更改为您想要的任何值.世界上所有的服务器提交哈希/腌制/验证都无法解决这个问题,因为您的游戏认为它在将其打包成一个很好的有效哈希提交之前是有效的.
如果它们总是落在预定值内,你可以对分数进行"健全性检查",但即使这样,一个坚定的黑客也可以简单地确定最大允许值是多少,并始终提交该值.
您可以尝试在内存中混淆您的分数值,以便使用CheatEngine更难找到它们,例如将它们存储为乘法值,然后在getter和setter中获取分数值,包括值的乘法/除法得到/为您的观点和分数提交小部件设置正确的分数.即使这只是一种摊位策略.
除非虚假的分数会花费你的钱,否则不要担心会浪费时间在.01%的作弊者身上,或者只是手动调整你的分数表.
在防止作弊方面要考虑的关键是:"这真的有多重要?" 如果您正在运行某种基于高分的竞赛并获得现金奖励,那么这是一个非常重要的优先事项.如果你只是觉得有些随意的人弄乱你的高分表,那就不值得花时间来阻止他们,只需每周检查一次并丢弃坏分数.
你最终是在试图推迟人们入侵你的系统的时间,或者让他们不值得这么做。您可以尝试在哈希中添加盐以增加一些额外的复杂性。这可以作为值发送到 Flash 游戏(将其作为参数添加到 HTML 中的 Flash 对象)并将其包含在哈希验证代码中。您可以发送某种会话 ID 或随机数,因此它总是不同的。您甚至可以通过不同的方法生成两个哈希值并检查它们。
当然,不要低估人们找到破解实际游戏功能的方法的可能性。或者说他们只是非常优秀的球员......