gpt4 book ai didi

java - (Android) 通过一个简单的套接字攻击服务器

转载 作者:行者123 更新时间:2023-11-29 21:06:05 24 4
gpt4 key购买 nike

我写了一个 Android 游戏。现在,我想连接玩家的标记。

下面的代码是客户端程序,它将他们的名字、国家和标记发送到服务器。基本上,我使用“:”来分隔信息。

但是黑客可以通过反编译.apk文件知道我的服务器ip和端口。然后,他们可以创建一个基本的 Java 应用程序来访问我的服务器。他们可以给我发送“hacker:badserver:123456789”。最后,顶部标记变为“123456789”。

连接用户数据是否更安全?

Socket client = new Socket(ip, port);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Hacker:HK:3910");

最佳答案

黑客不需要 APK 来确定您服务器的 IP。他们可以简单地使用代理工具,例如 Fiddler 或数据包嗅探器。

在我作为游戏开发者的短暂工作期间(致力于网络多人游戏功能),您学会了假设作弊者和黑客拥有您游戏的源代码。然后围绕该假设设计协议(protocol)。

那么如何保护您的服务器不被流氓客户端攻击或作弊呢?你真的不能,但有些事情让它变得非常困难。

  1. 要求用户在允许游戏向您的服务器发布任何内容之前“登录”(名称/密码)。如果您发现有人作弊,请通过禁止他们登录来禁止他们的帐户玩游戏。在每个 HTTP 请求的 header 中使用“票证”或身份验证 token ,以便服务器进行验证。如果您禁止某人,他们将无法获得新帐户再试一次。

  2. HTTPS 而不是 HTTP。从技术上讲,黑客可以通过简单地将他的流氓客户端更改为也使用 HTTPS 进行发布来解决这个问题。他可以通过调试您的 APK 来对协议(protocol)进行逆向工程。但是现在你让他更难发现协议(protocol)是从什么开始的。使用 HTTPS,黑客无法使用 Fiddler 等简单工具来观察网络流量。

  3. 警惕发布版本中的大量调试。确保与任何协议(protocol)相关的“日志”语句仅在调试版本中,从不发布版本。

  4. 混淆一切并使用类似 HMAC 的东西用 key “签署”每条消息。这在技术上不是安全的,但会使任何破坏加密的人继续下去变得更加困难。类似于以下内容:

例子代码:

name = BASE64("Hacker");
messagetype = ROT13("HK");
score = 3910;
tosend = name + ":" + messagetype + ":" + Integer.ToString(score ^ 0xAAAAAAAA) + ":";
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(Your_Secret_Key);
byte[] rawHmac = mac.doFinal(data.getBytes());
tosend += Encoding.EncodeBase64(rawHmac);

“Your_Secrey_Key”在您的源代码中的某处进行了编码,并且仅在运行时解密。

以上将生成类似于以下内容的字符串:

SGFja2Vy:UX:AAAAA5EC:blahblahxyxunreadable

相应的服务器代码将解码消息并在接受之前使用 key 进行验证。

这是完美的安全性吗?没有。

我应该使用这些技术构建电子商务解决方案吗?绝对不是。

这些技术是否可以阻止 99% 的黑客尝试作弊?绝对地。

它是否击败了不惜一切代价赢得高分的最坚定的黑客?也许不会。但是“努力返回”的比率上升了。这可能不值得他们花时间。

希望这对您有所帮助。

关于java - (Android) 通过一个简单的套接字攻击服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24532340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com