可能无法实现,但我希望我的服务器应用程序不仅可以验证用户名和密码,还可以验证客户端应用程序是否未被修改。
我想生成一个随每个构建而变化的标识符,但对于同一构建的多次运行保持不变。
我试过了:
File jarFile = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
int theID = jarFile.lastModified());
但是当放置在不同的机器上时,时间戳会发生变化。
我想要一个生成私有ID的Validate.class。 Validate.class被发送到服务器,该服务器将Validate.class与其自己的类版本进行比较,然后验证类中包含的ID。这会在理论上起作用吗?或
答案 0 :(得分:0)
没有。你不能做这个。客户端正在对自己进行计算并将其发送到服务器。攻击者需要做的就是研究从合法客户端发送的内容(即硬编码值或客户端执行的计算),然后在他们自己建立连接时简单地重复该值(或计算)。服务器。
答案 1 :(得分:0)
不容易,因为你用来做这项检查的程序的任何部分都可以说谎并说它通过了。
您想要的是一个名为remote attestation的功能,其中某些硬件/软件证明系统处于特定状态的第三方。执行此操作的唯一方法是使用称为Trusted Platform Module的硬件。但是,这会将应用程序限制为运行某些版本的窗口或redhat linux的用户以及具有硬件TPM的用户。总之,除非你为NSA写这篇文章,否则它不值得。