在客户端/服务器握手中验证客户端二进制文件

时间:2013-10-18 18:29:37

标签: security client-server

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

在连接到服务器期间是否有任何方法可以检查他们是否正在使用未经修改的程序版本?

3 个答案:

答案 0 :(得分:2)

不,真的没办法那样做。

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

你可以尝试让恶意用户的事情变得更难,但没有切实可行的方法来实现你所希望的。

答案 1 :(得分:2)

您所描述的是视频游戏行业在过去十五年中一直在争夺的问题。简而言之,如何防止用户修改客户端(在他们的情况下,一般是为了防止作弊,但也出于版权原因)。如果这种努力教会了我们任何东西,那就是防止对客户的修改是一场永远的军备竞赛,你永远不会决定性地赢得胜利。鉴于此,甚至不要尝试。

遵循标准的客户端 - 服务器假设客户端掌握在敌人手中并且不可信任。基于这个假设,在防御性的基础上构建服务器端,你就没事了。

答案 2 :(得分:0)

这非常困难,可能不值得。但是如果你有兴趣去追求它,你必须开发一些由Windows内核签名和监控的代码。

一些主题将使您了解问题的范围:

Protected media path

Driver signing

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

祝你好运!