0

我刚刚在 youtube 上看过这个视频。据我所知,黑客总是能够破解,但我正在寻找一种解决方案来提高我的游戏安全性。

我不希望用户能够更改他们的硬币。加密或混淆是这里的一种选择吗?

我正在寻找一个轻量级的解决方案。

请分享您知道或为防止(使其更难)发生这种情况所做的事情。

4

2 回答 2

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,因此它是无效的!

显然这不是万无一失的,用户可能会对代码进行逆向工程并对其进行更改,但这会使事情变得更加困难!

有些人仍然尝试修改它,但随后我向服务器发送了一条消息,将用户标记为作弊者!

于 2013-05-29T18:12:58.660 回答
0

最可靠的方法是存储重要信息服务器端并让客户端与服务器交互。由于这些黑客仅在客户端尝试为硬币购买东西时才属于客户端,因此您应该询问服务器服务器是否允许购买。

当然,这可以通过劫持网络响应、伪造服务器以及不添加安全措施来破解。但至少这种 hack 不会有任何效果。

但是加密或混淆也应该在某种程度上起作用,因为它无法搜索该值,但是如果有人对您的应用程序进行逆向工程,那么也不难弄清楚这是如何完成的。ProGuard 可能会让你更安全一些,但服务器端仍然是最安全的方式。

于 2013-05-29T18:12:02.790 回答