我想知道如何获取 jvm 运行的操作系统类型。它也必须是“安全的”,所以System.getProperty("os.name")
这并不是一个真正的选项,因为它可以通过 -D 指令轻松规避。
我所说的“安全”是指不容易被规避。它适用于桌面应用程序。用户始终可以对代码进行反混淆、反编译、编辑和重新编译,但这比将 -D 传递给 jvm 困难得多。我们想让修补变得不平凡,而不是不可能(因为这是不可能做到的)。
首先,不可能保护代码不被运行时环境任意操纵。但为了至少难以欺骗你的支票,最好的选择可能是某种基于文件系统的操作系统指纹识别 http://en.wikipedia.org/wiki/TCP/IP_stack_fingerprinting.
文件.listRoots() http://java.sun.com/javase/6/docs/api/java/io/File.html#listRoots()是你的起点;在类 Unix 系统上,它将返回一个包含特征目录(如 /etc、/usr 等)的根目录。在 Windows 上,它将返回多个结果,但据我所知,操作系统安装驱动器不一定是 C:,并且特征目录不同Windows 版本和区域设置 - 请注意不要假设每个人都运行英文版本的 Vista。
您可以投入大量工作来识别不同版本的 Windows 和 Linux,以及 BSD 或 MacOS,而且一旦编译代码发布,从其中删除检查可能会花费更少的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)