2

我正在构建一个连接到服务器的客户端程序。此客户端程序需要将源代码作为许可的一部分提供给用户(不是选项)。但是,我需要确保当用户使用该客户端程序连接到服务器时,它使用原始代码运行并且没有被更改和重新编译。

有什么方法可以在连接到服务器期间检查他们使用的是未更改版本的程序吗?

4

3 回答 3

2

不,真的没有办法做到这一点。

您基本上遇到了“受信任的客户”问题。客户端代码在用户的 PC 上运行,用户可以完全控制该 PC。他可以改变程序在磁盘甚至内存中的字节。如果您要尝试对代码执行散列或校验和,他可以简单地更改进行验证的代码并使其返回“未修改”。

您可以尝试使恶意用户的事情变得更加困难,但是没有实际的方法可以实现您的期望。

于 2013-10-18T19:03:35.627 回答
2

您所描述的是电子游戏行业在过去 15 年中一直在努力解决的问题。简而言之,如何防止用户修改客户端(在他们的情况下,通常是为了防止作弊,尽管也出于版权原因)。如果这种努力教会了我们什么,那就是防止对客户端进行修改是一场持续的军备竞赛,你永远不会决定性地获胜。鉴于此,甚至不要尝试。

遵循标准的客户端-服务器假设,即客户端掌握在敌人手中并且不可信。基于该假设防御性地构建您的服务器端,您会没事的。

于 2013-10-18T20:37:59.907 回答
0

这是非常非常困难的,可能不值得。但是,如果您有兴趣追求它,则必须开发一些经过代码签名并由 Windows 内核监控的东西。

几个主题将引导您了解问题的范围:

受保护的媒体路径

司机签字

媒体设备和设备驱动程序均由制造商进行数字签名,并由 Windows 持续监控。如果出现任何问题,它就会被关闭(这是技术术语)。看起来非常令人生畏。而且我不知道该技术是否可用于不是设备驱动程序且与 DRM 无关的桌面软件。

祝你好运!

于 2013-10-19T03:00:31.623 回答