Skip to main content
 首页 » 编程设计

c#之是否可以强制仅从已知客户端调用 Web 服务

2024年02月24日31lonelyxmas

场景:

我可以完全控制的公开可用的 Web 服务。 但我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问 Web 服务。 我可以在桌面客户端中存储一个 secret 密码,但这很容易破解。

是否有任何已知的实现来强制执行此操作? PKI、非对称 key ?

请您参考如下方法:

如果公众可以访问此桌面应用程序的副本,任何优秀的逆向者都可以破解它并“模仿”它与服务器的交易。无论您的密码学有多安全,应用程序加密/解密数据所需的一切都包含在二进制文件中,因此破解者只需要从中挖掘出来即可。

密码学的目标是在传输数据时保护数据免受“中间人”黑客攻击,但如果您可以访问任何对等点,则可以轻松破解它。

您的服务器绝不能相信来自客户端的内容。

[编辑恢复]

尽管您不能 100% 保证您的服务器的假定客户端是或不是您的应用程序或第三方制作的某些“模拟器”,但您可以让他们把事情复杂化。游戏反作弊的一种常见做法是,有时会随机地向客户端 App 提出一个技巧性问题,例如“您的 main.exe 从偏移量 A 到偏移量 B 的哈希值是多少?”或“从现在开始,数据包类型 0x07 与数据包类型 0x5f 交换”。一旦检测到假货,服务器就会进入“愚蠢模式”,出现故障,并将他们的 IP/帐户列入该模式的黑名单几个小时,这样他们就无法确定他们的程序做错了什么。

如果您检测到有人在构建模拟器,请让他们重新开始:打乱数据包类型表、密码表、更改某些数据包格式并强制您的客户端进行更新。你暂时不会看到 cookies 打扰你了......大声笑