Более точная идентификация запущенных приложений в Mac OS

Используя runningApplications из NSWorkspace, можно получить список запущенных приложений в Mac OS в виде объектов NSRunningApplication и получить дополнительную информацию, например, какое приложение находится на переднем плане.

Можно идентифицировать запущенное приложение по его имени (localizedName), но я уверен, что мошеннические приложения могут подделать его. Другие вещи, такие как bundleIdentifier, кажутся лучше, но я считаю, что их тоже можно подделать.

Я полагаю, что почти все метаданные могут быть подделаны для приложений за пределами общедоступного магазина приложений, но для любых приложений, полученных из магазина приложений, такие вещи, как bundleIdentifier, должны быть безопасными способами идентификации приложения, верно?

Если мы включим произвольные приложения, которые кто-то загружает из Интернета, есть ли лучший способ идентифицировать приложение, чем отфильтровывать мошеннические приложения? Я понимаю, что не может быть решения, которое не имело бы недостатков, но ищу попытку сделать все возможное.


person Locksleyu    schedule 29.01.2019    source источник


Ответы (1)


Как вы упомянули, все эти вещи можно довольно легко подделать. Написав продукт, который делает именно то, что вы описываете профессионально, решение относительно простое: отпечаток каждой версии каждого популярного приложения в огромной базе данных, а затем отпечаток каждого приложения, которое вы обнаружите на компьютере, и просмотрите их в своей базе данных. Когда вы обнаружите приложение, которое никогда раньше не видели, отметьте его для добавления в базу данных.

Поддержание этой базы данных является очень большой и постоянной задачей. Именно в этом заключается большая часть ценности продукта. Код агента не так уж и сложен. Актуальная база данных — это то, за что клиенты платят. Это довольно трудное пространство для входа.

Вы правы в том, что вы можете проверить подписи, чтобы убедиться, что вещи, загруженные из MAS или части ОС, являются тем, за что они себя выдают. Это поможет вам начать, но этого недостаточно; есть так много всего, что не исходит от MAS.

Другая головная боль заключается в том, что вы можете видеть, какие «приложения» в настоящее время работают в NSWorkspace, но это довольно запутанно, что это значит. Многие вещи, которые вы не считаете «приложениями», появляются в запущенных приложениях, таких как MobileDeviceUpdater и nbagent. С другой стороны, такие вещи, как mysqld, не являются таковыми. Отпечатки пальцев из запущенных приложений могут пропустить вещи, которых нет в этом списке, или вредоносные приложения могут лгать о своем пути к пакету, чтобы выглядеть законными. Вы можете использовать такие инструменты, как lsof, чтобы увидеть, какие файлы процесс на самом деле открыл, но это становится все сложнее и сложнее.

Удачи; это глубокая кроличья нора с десятками угловых случаев и очень небольшим количеством документации.

person Rob Napier    schedule 29.01.2019