【发布时间】:2013-10-27 17:02:44
【问题描述】:
我正在构建一个连接到服务器的客户端程序。此客户端程序需要将源代码作为许可的一部分提供给用户(不是选项)。但是,我需要确保当用户使用该客户端程序连接到服务器时,它使用原始代码运行并且没有被更改和重新编译。
在连接到服务器期间,有什么方法可以检查他们使用的是未更改版本的程序吗?
【问题讨论】:
我正在构建一个连接到服务器的客户端程序。此客户端程序需要将源代码作为许可的一部分提供给用户(不是选项)。但是,我需要确保当用户使用该客户端程序连接到服务器时,它使用原始代码运行并且没有被更改和重新编译。
在连接到服务器期间,有什么方法可以检查他们使用的是未更改版本的程序吗?
【问题讨论】:
不,真的没有办法做到这一点。
您基本上遇到了“受信任的客户”问题。客户端代码在用户的 PC 上运行,用户可以完全控制该 PC。他可以改变程序在磁盘甚至内存中的字节。如果您要尝试对代码执行哈希或校验和,他可以简单地更改进行验证的代码并使其返回“未修改”。
您可以尝试让恶意用户的操作更加困难,但没有切实可行的方法来实现您的期望。
【讨论】:
您所描述的是视频游戏行业在过去 15 年中一直在努力解决的问题。简而言之,如何防止用户修改客户端(在他们的情况下,通常是为了防止作弊,尽管也出于版权原因)。如果这种努力教会了我们什么,那就是防止对客户端进行修改是一场持续的军备竞赛,你永远不会决定性地获胜。鉴于此,甚至不要尝试。
遵循标准的客户端-服务器假设,即客户端掌握在敌人手中并且不可信。根据这个假设构建你的服务器端,你会没事的。
【讨论】:
这是非常非常困难的,可能不值得。但是,如果您有兴趣追求它,则必须开发一些经过代码签名并由 Windows 内核监控的东西。
几个主题将引导您了解问题的范围:
媒体设备和设备驱动程序均由制造商进行数字签名,并由 Windows 持续监控。如果出现任何问题,它就会被关闭(这是技术术语)。看起来非常令人生畏。而且我不知道该技术是否可用于不是设备驱动程序且与 DRM 无关的桌面软件。
祝你好运!
【讨论】: