Более точная идентификация запущенных приложений в Mac OS
Используя runningApplications NSWorkspace, можно получить список запущенных приложений в Mac OS в виде объектов NSRunningApplication, и из этого получить дополнительную информацию, например о том, какое приложение находится на переднем плане.
Можно идентифицировать работающее приложение, используя его имя (localizedName), но я уверен, что это может быть подделано мошенническими приложениями. Другие вещи, такие как bundleIdentifier, кажутся лучше, но я считаю, что это тоже может быть подделано.
Я полагаю, что почти все метаданные могут быть подделаны для приложений за пределами общедоступного магазина приложений, но для любых приложений, полученных из магазина приложений, такие вещи, как bundleIdentifier, должны быть безопасными способами идентификации приложения, верно?
Если мы включаем произвольные приложения, которые кто-то загружает из Интернета, есть ли лучший способ определить приложение для фильтрации мошеннических приложений? Я понимаю, что не может быть решения, которое не имеет недостатков, но ищет попытки изо всех сил.
1 ответ
Как вы упоминаете, все эти вещи могут быть довольно легко подделаны. Написав продукт, который в точности соответствует тому, что вы описываете профессионально, решение относительно простое: отследить каждую версию каждого популярного приложения в огромной базе данных, а затем отследить каждое обнаруженное на компьютере приложение и найти их в своей базе данных. Когда вы обнаружите приложение, которое никогда не видели, отметьте его для добавления в базу данных.
Поддержание этой базы данных очень большое и постоянное усилие. Вот где большая часть стоимости продукта. Код агента не так сложен. Современная база данных - это то, за что платят клиенты. Это довольно трудное место, чтобы попасть в него.
Вы правы в том, что можете проверять подписи, чтобы убедиться, что то, что загружено из MAS или части ОС, является тем, что они утверждают. Это поможет вам начать, но этого недостаточно; так много всего, что не исходит от MAS.
Другая головная боль заключается в том, что вы можете видеть, какие "приложения" в настоящее время работают в NSWorkspace, но это довольно грязно, что это означает. Множество вещей, которые вы не считаете "приложениями", обнаруживаются в запущенных приложениях, например MobileDeviceUpdater и nbagent. С другой стороны, такие вещи, как MySQL не являются. Отпечатки пальцев при запуске приложения могут пропустить вещи, которых нет в этом списке, или вредоносные приложения могут лгать о своем пути к пакетам, чтобы выглядеть законно. Вы можете использовать такие инструменты, как lsof
чтобы увидеть, какие файлы действительно есть у процесса, но он становится все более и более сложным.
Удачи; это глубокая кроличья нора с десятками угловых коробок и очень небольшим количеством документации.