Mac OS 的机器 ID 是什么?

4
我需要计算运行MacOS的计算机的机器ID,但我不知道从哪里检索信息 - 比如硬盘序列号等。我的特定应用程序的主要要求是用户不能伪造它。在你开始笑之前,我知道这很遥远,但至少伪造方法必须需要重新启动。

最好的解决方案是使用C/C++,但如果没有其他办法,我会接受Objective-C。超级最佳解决方案将不需要root权限。

有什么想法吗?谢谢。

一个重复的 https://dev59.com/YXNA5IYBdhLWcg3wgeId,我认为它有更好的答案 - yairchu
3个回答

3

工具/usr/sbin/system_profiler可以为您提供各种硬件组件的序列号列表。您可以考虑使用这些值作为文本生成md5哈希或类似内容。


是的,我一直在尝试那个。问题是我完全不知道system_profiler从哪里获取数据,所以我不敢依赖它 - 我担心它可能太脆弱了。 - Pedro d'Aquino
但如果你制作了一个哈希表,这应该不是一个问题,因为在给定哈希值的情况下,重新创建被哈希的对象在计算上是不可行的。 - samoz
@samoz:我表达得可能不太清楚。想象一下这种情况:我的应用程序用于识别网站(比如银行)的客户。当用户第一次登录网站时,我会在用户的计算机上安装我的应用程序,运行system_profiler并对输出进行哈希处理。假设下一次他登录时,我想查看是否与之前相同的计算机,因此我再次运行system_profiler。但是,如果他欺骗了某些东西,比如他的磁盘序列号,那么system_profiler的输出将不同,他将破坏我的系统。在这种情况下,加密是无关紧要的。 - Pedro d'Aquino
@Pedro:这怎么能让东西更安全呢?如果用户有多台电脑怎么办?如果他们升级了硬件或购买了新电脑怎么办?不要试图比你的用户聪明。或者,如果这是一个特别安全密集型的应用程序,您可能需要考虑使用RSA SecurID令牌进行双因素身份验证等措施。 - Joe
@Pedro:如果用户想欺骗您,并且具有相当的技术水平,那么这种方法注定是不安全的。例如,无法保证他们运行的应用程序是您安装的(或要求他们安装的)应用程序,而不是一个被黑客篡改的变体,它将始终返回他们想要的任何硬件信息。正如Rob所说,您需要在服务器端进行安全性处理,因为那是您实际控制的唯一位置。您不能信任客户端上运行或来自客户端的任何内容。 - Gordon Davisson
@Joe,Gordon:感谢您的评论。我同意你们所说的一切。这不是我们用来防止欺诈的唯一措施。这只是一个额外的身份验证层 - 我们的客户在Windows上已经使用了相当长的时间,并且对结果非常满意 - 事实上,我们正在将其移植到其他操作系统。再次感谢您的所有建议。 - Pedro d'Aquino

3
Erik的建议是使用system_profiler(以及其基础但未记录在案的SystemProfiler.framework),这是您最好的希望。您的基本要求是不可能实现的,任何没有硬件支持的解决方案都很容易被黑客攻击。但是,您可以使用system_profiler和/或SystemProfiler.framework构建合理水平的混淆。
我不确定您的实际要求,但这些帖子可能会有用: 我在第一篇文章中说过,我会在这里重复一遍:无论如何,都不可能确保只有您的客户端可以与您的服务器进行安全通信。如果这是您的基本要求,那么这是一个无法解决的问题。我将通过说出这样一句话来扩展这个问题:不能构建您的程序以使人们无法取出您放置的任何检查,因此,如果目标是许可证,那么这也不是一个完全可解决的问题。上面的第二篇文章讨论了如何从商业而不是工程角度考虑这个问题。

编辑:关于您要求需要重新启动的请求,请记住Mac OS X具有内核扩展。通过加载内核扩展,始终可以在运行时修改系统对自身的看法,而无需重新启动。原则上,这将是一个Mac rootkit,其本质上并不比Linux rootkit更复杂。您需要仔细考虑您的攻击者是谁,但如果您的攻击者包括Mac内核黑客(这不是一个微不足道的群体),那么即使需要重新启动,这也是不可行的。这并不是说您不能让欺骗对大多数用户变得很烦人。对于所有现代操作系统都是如此;在这里,Mac没有任何特殊之处。

谢谢。你显然对这个主题非常了解。为了澄清,我不是在做拷贝保护。客户是一个非常害怕欺诈的安全网站。你是否有关于system_profiler的更多信息,例如它的数据来自哪里(如果它直接轮询硬件等)?我搜索了“SystemProfiler.framework”,但没有找到任何东西。 - Pedro d'Aquino
我的回复太长了,无法在此处展示。我已经在这个主题的网址上发布了一篇长篇介绍:http://robnapier.net/blog/understanding-systemprofiler-393 - Rob Napier
另外,关于欺诈问题,您是担心客户被骗,还是担心客户成为欺诈的原因?我怀疑是后者。您解决这个问题的方式是在服务器端查找表明欺诈行为的行为,因为您永远不能信任客户端应用程序。您还需要确定您愿意接受多少欺诈。任何系统都存在一些欺诈行为,而消除它的成本呈指数增长。研究Visa和银行如何处理这些问题。 - Rob Napier

1

使用ifconfig如何获取连接到计算机的网络适配器的MAC ID?


@alan,samoz:不幸的是,是的。 - Pedro d'Aquino
@samoz:经过一些搜索,似乎欺骗它们很容易。你说得对。 - Alan Haggai Alavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接