我需要计算运行MacOS的计算机的机器ID,但我不知道在哪里检索信息 – 像硬盘序列号等等.我的特定应用程序的主要要求是用户必须无法欺骗它.在你开始大笑之前,我知道这很遥远,但至少
最好的解决方案是C/C++中的一个,但如果没有别的办法我会采用Objective-C.最佳解决方案不需要root权限.
有任何想法吗?谢谢.
Erik建议使用system_profiler(及其底层但未记录的SystemProfiler.framework)是您最大的希望.您的基本要求是不可能的,任何没有硬件支持的解决方案都将很快被破解.但是您可以使用system_profiler和/或SystemProfiler.framework构建合理的混淆级别.我不确定你的实际要求,但这些帖子可能有用:
> Store an encryption key in Keychain while application installation process(这与网络身份验证有关,这听起来像你的问题)
> Obfuscating Cocoa(这更像是复制保护,这可能不是你的问题)
我将在此重复我在第一篇文章中所说的内容:安全地确保只有您的客户可以与您的服务器通信是不可能的,期间,不可能的.如果这是您的基本要求,那么这不是一个可解决的问题.我将扩展它,说不可能构建你的程序,以便人们不能拿出你输入的任何支票,所以如果目标是许可,那也不是一个完全可解决的问题.上面的第二篇文章讨论了如何从业务而不是工程角度思考这个问题.
编辑:关于您要求重新启动的请求,请记住Mac OS X具有内核扩展.通过加载内核扩展,始终可以修改系统在运行时如何看到自己而无需重新启动.原则上,这将是一个Mac rootkit,从根本上说它不比Linux rootkit复杂.您需要仔细考虑攻击者是谁,但如果您的攻击者包含Mac内核黑客(这不是一个无关紧要的群组),那么即使重启要求也不合理.这并不是说你不能让大多数用户烦恼.一个相当称职的攻击者总能做到这一点.所有现代操作系统都是如此;关于Mac,这里没什么特别的.