我刚在youtube上观看了this视频。据我所知,黑客总是能够破解,但我正在寻找一种解决方案来提高我的游戏安全性。
我不希望用户能够更换他们的硬币。加密或混淆是一种选择吗?
我正在寻找一种轻量级的解决方案。
请分享您所知道或已做过的事情,以防止(更难)发生这种情况。
答案 0 :(得分:1)
我使用数据和盐创建MD5哈希并将其存储在数据库中。
示例:
Score: 1234
Lives: 3
Calculate MD5 from: "fsjdhASd8adnsa9asdmasdsd#1234#3#AS88asdDA*ASD8ASdmas"
Store on the database: 1234|3|b7f67f11fed055cce28d6f50fd829e9c
从数据库中读取时,我将得分和生命值与我所知道的盐连接起来,并检查它是否与存储的md5哈希相匹配。
示例:
Read score = 1234
Read lives = 3
Concatenate "fsjdhASd8adnsa9asdmasdsd#" + score + "#" + lives + "#AS88asdDA*ASD8ASdmas"
Calculated MD5 = b7f67f11fed055cce28d6f50fd829e9c
Calculate the MD5 from this string and check if it matches with the stored hash
如果分数改为9999,我会得到哈希0d64ebead4451f826c15b5d03853f8da,因此无效!
显然这不是绝对可靠的,用户可能会对代码进行逆向工程并对其进行更改,但这会让事情变得更难!
有些人仍然试图修改它,但后来我向服务器发送消息,将用户标记为骗子!
答案 1 :(得分:0)
最可靠的方法是存储重要信息服务器端并让客户端与服务器交互。 由于这些黑客只是在客户端试图为硬币购买东西时才是客户端,因此您应该询问服务器服务器是否允许购买。
当然,这可以通过劫持网络响应,伪造服务器以及如果不添加安全措施而不会被攻击。但至少这种黑客行为无效。
但加密或混淆也应该在某种程度上起作用,因为无法搜索该值,但是如果有人对您的应用程序进行逆向工程,那么也不会很难弄清楚如何做到这一点。 ProGuard可能会让你更安全一点,但服务器端仍然是最安全的方式。