1

通过使用 NSWorkspace 的 runningApplications,可以获得 Mac OS 上正在运行的应用程序列表作为 NSRunningApplication 对象,并从中获取附加信息,例如前台的应用程序。

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

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

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

4

1 回答 1

1

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

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

您是正确的,您可以验证签名以确保从 MAS 或操作系统的一部分下载的内容是他们声称的内容。这会让你开始,但还不够;有很多东西不是来自 MAS。

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

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

于 2019-01-29T19:21:34.090 回答