Это отличный вопрос, и я думаю, что ответ «к сожалению, вы не можете».
Было бы интересно реализовать какой-то криптографический хэш, как те, которые использует Chrome для проверки файлов расширений, но это не очень сильная гарантия.
Рассмотрим (все это гипотетический):
- Вы можете обеспечить запись реестра/манифеста довольно легко этот путь, но как насчет самого файла?
- Предположим, что вы привязываете хэш исполняемого файла, тогда становится больно его обновлять (вам также придется обновлять расширение тоже в синхронизации). Может быть разрешено с помощью какой-либо публичной подписью, но вместо хэша.
- Предположим, вы подключили исполняемый файл в манифесте. Как его файлы данных? Что еще более важно, как насчет библиотек использует собственное приложение?
Обеспечение расширения/приложения Chrome легко, поскольку единственная «библиотека»/время выполнения, на которое вы полагаетесь, - это сам Chrome (и вы доверяете этому). Собственное приложение может зависеть от многих и многих вещей в системе (например, уже упомянутых библиотек), как вы отслеживаете?
В любом случае, это похоже на интересную вещь для мозгового штурма. Взгляните на Chrome bug tracker, если есть что-то похожее, если нет - попробуйте поднять запрос функции. Возможно, попробуйте список рассылки, связанный с хромом, чтобы спросить разработчиков.
Вы можете относительно легко подписать исполняемый файл во время сборки: вычислить хэш для исполняемого файла, зашифровать его с помощью закрытого ключа и сохранить его в самом исполняемом файле. Расширение снова вычисляет хэш, затем сравнивает его с тем, которое хранится в исполняемом файле (дешифруя его с помощью открытого ключа). Итак, это простой процесс подписания, но, как вы сказали, вам придется делать это с каждым файлом, от которого зависит родное приложение. – biziclop
Вы также можете утверждать, что если разделяемые библиотеки были скомпрометированы, вы уже потеряли игру. И я не уверен, насколько статическая связь улучшит ситуацию. – biziclop
А про реестр? Когда я устанавливаю приложение-хост, я устанавливаю расширение для вызова его по определенному мной пути. Но если кто-то изменит реестр и нацелится на другой путь с измененным приложением (а не на подписанное приложение), расширение не будет идентифицировать, что изменилось и будет нормально работать. Есть ли способ прочитать реестр, чтобы убедиться, что определенный путь в реестре соответствует истинно загруженному приложению? –