【发布时间】:2009-06-27 02:50:06
【问题描述】:
我需要计算运行 MacOS 的计算机的计算机 ID,但我不知道从哪里检索信息 - 诸如 HDD 序列号等。主要要求 对于我的特定应用程序来说,用户不能欺骗它。在你开始大笑之前,我知道这有点牵强,但至少至少,欺骗方法必须需要重新启动。
最好的解决方案是C/C++,但如果没有其他方法,我会选择Objective-C。最佳解决方案将不需要 root 权限。
有什么想法吗?谢谢。
【问题讨论】:
我需要计算运行 MacOS 的计算机的计算机 ID,但我不知道从哪里检索信息 - 诸如 HDD 序列号等。主要要求 对于我的特定应用程序来说,用户不能欺骗它。在你开始大笑之前,我知道这有点牵强,但至少至少,欺骗方法必须需要重新启动。
最好的解决方案是C/C++,但如果没有其他方法,我会选择Objective-C。最佳解决方案将不需要 root 权限。
有什么想法吗?谢谢。
【问题讨论】:
Erik 对system_profiler(及其底层但未记录的 SystemProfiler.framework)的建议是您最大的希望。您的基本要求是不可能的,任何没有硬件支持的解决方案都将很快被破解。但是您可以使用system_profiler 和/或 SystemProfiler.framework 构建合理级别的混淆。
我不确定您的实际需求,但这些帖子可能有用:
我将在此重复我在第一篇文章中所说的话:不可能,暂时,不可能,安全地确保只有您的客户端可以与您的服务器通信。如果这是您的基本要求,那么这不是一个可解决的问题。我将通过说不可能构建您的程序以使人们无法取出您放入的任何检查来扩展这一点,因此,如果目标是许可,那也不是一个完全可以解决的问题。上面的第二篇文章讨论了如何从业务而非工程的角度考虑这个问题。
编辑:关于您要求重新启动的请求,请记住 Mac OS X 具有内核扩展。通过加载内核扩展,始终可以修改系统在运行时看到自己的方式,而无需重新启动。原则上,这将是一个 Mac rootkit,它基本上并不比 Linux rootkit 复杂。您需要仔细考虑您的攻击者是谁,但如果您的攻击者包括 Mac 内核黑客(这不是一个无关紧要的群体),那么即使要求重新启动也是不合理的。这并不是说您不能让大多数用户讨厌欺骗。一个相当有能力的攻击者总是有可能的。在所有现代操作系统上都是如此; Mac 没有什么特别之处。
【讨论】:
工具 /usr/sbin/system_profiler 可以为您提供各种硬件组件的序列号列表。您可能会考虑使用这些值作为文本来生成 md5 哈希或类似的东西。
【讨论】:
使用ifconfig获取连接到计算机的网卡的MAC ID怎么样?
【讨论】: