Обход ограничений включенного контроля доступа к папкам Защитника Windows
У меня есть приложение, написанное на C#, которое устанавливается через InnoSetup.
При включенном доступе к контролируемым папкам в Защитнике Windows 10 программе установки не удается создать значок на рабочем столе (показывая сообщение PersistFile::Save failed, code 0x80070002
) - несмотря на то, что работает с правами администратора.
Кроме того, установленному приложению (которое НЕ запускается с правами администратора) не удается записать в папки пользователя, например " Документы".
Это происходит даже для новых файлов или папок, которые не перезаписывают ничего существующего. Для защиты от вымогателей я ожидаю, что только изменение существующих файлов считается опасным.
Первый вопрос, который мне приходит в голову: почему мое заявление считается вредоносным и поэтому блокируется?
Я провел обширное исследование, чтобы получить ответ, но не смог найти ничего, что помогло бы:
Веб-ресурсы от Mircosoft, описывающие, какие приложения считаются вредными и почему их нельзя найти - там только догадки.
Подписание моего приложения с помощью расширенного сертификата проверки (который помогает подавлять предупреждения SmartScreen) не меняет поведение Защитника Windows.
Я позволил Windows App Certification Kit проанализировать установщик, который сообщил о нескольких предупреждениях и одной критической ошибке. Я исправил все проблемы, на которые жаловался Кит (кроме предупреждения о /SAFESEH, которое невозможно с InnoSetup), но это не изменило поведение Защитника Windows в отношении блокировки доступа.
Итак, мой уточненный вопрос: как я могу правильно обойти блокировку доступа Защитника Windows для моей установки и моего приложения?
Чтобы понять проблему и создать основу для экспериментов, я создал небольшой пример приложения на C#, который
- создает новые (а затем удаляет) каталоги в общедоступном пути к рабочему столу, пути к рабочему столу пользователя, обычным путям документов и путям документов пользователей
- связывается скриптом InnoSetup с подписанным установщиком
Используя Visual Studio для сборки решения и InnoSetup для упаковки сборки, должно быть легко воспроизвести поведение с включенным доступом к контролируемым папкам. (Обязательно загляните на README.md для описания шагов сборки!)
Пожалуйста, ознакомьтесь с примером проекта.