更准确地识别 Mac OS 上的 运行 个应用程序

More accurate identification of running applications on Mac OS

通过使用 NSWorkspace 的 运行Applications,可以获取 Mac OS 上的 运行 应用程序列表作为 NSRunningApplication 对象,并从中获取额外的前台有什么应用程序等信息。

可以使用应用程序的名称 (localizedName) 来识别 运行 应用程序,但我确信这会被流氓应用程序欺骗。 bundleIdentifier 之类的其他东西似乎更好,但我相信它们也可能被欺骗。

我想对于 public 应用程序商店之外的应用程序,几乎所有元数据都可能被欺骗,但对于从应用程序商店获得的任何应用程序,像 bundleIdentifier 这样的东西应该是识别应用程序的安全方法应用程序,对吗?

如果我们包括某人从 Internet 下载的任意应用程序,是否有更好的方法来识别应用程序以过滤掉流氓应用程序?我意识到可能没有没有缺点的解决方案,但正在寻找最大努力的尝试。

正如您所提到的,所有这些东西都可以很容易地被欺骗。编写了一个完全符合您专业描述的产品后,解决方案就相对简单了:将每个流行应用程序的每个版本指纹识别到一个庞大的数据库中,然后对您在机器上发现的每个应用程序进行指纹识别,并在您的数据库中查找它们。当您发现以前从未见过的应用程序时,请将其标记为添加到您的数据库中。

维护该数据库是一项非常庞大且持续不断的工作。这就是产品的大部分价值所在。代理代码并不那么复杂。最新的数据库是客户支付的费用。 space 很难进入。

你是对的,你可以验证签名以确保从 MAS 下载的东西或 OS 的一部分是他们声称的。这将使您入门,但还远远不够;有很多不是来自 MAS。

另一个让人头疼的是,你可以在 NSWorkspace 中看到 "apps" 目前是什么 运行,但它的含义相当混乱。很多您不认为是 "apps" 的东西会出现在 运行 应用程序中,例如 MobileDeviceUpdater 和 nbagent。另一方面,像 mysqld 这样的东西不是。来自 运行 应用程序的指纹识别可能会遗漏不在该列表中的内容,或者恶意应用程序可能会在其捆绑包路径中撒谎,以使自己看起来合法。您可以使用 lsof 之类的工具来查看进程 确实 打开了哪些文件,但它变得越来越复杂。

祝你好运;这是一个很深的兔子洞,有几十个角落案例,而且文档很少。