Исходная ситуация В команде разработки под Windows используется внутренний набор SDK и CLI-утилит, которые распространяются как ZIP/MSI и часто обновляются. Сейчас проверка целостности делается вручную по заметкам в Wiki, из-за чего периодически в сборку попадают неподписанные или модифицированные бинарники, а также «потерянные» версии без прозрачного состава. Техническая среда и предметная область - Windows 10/11 x64 - .NET 8 Desktop (WPF или WinUI 3) или C++/Qt - на выбор, но результат должен быть готовой десктоп программой с инсталлятором - Репозитории/артефакты: локальная папка, сетевой шаринг (UNC), а также скачанные ZIP/MSI - Проверки: SHA-256/SHA-512, Authenticode (WinVerifyTrust), базовая валидация сертификатной цепочки, сбор SBOM (CycloneDX или SPDX) по содержимому пакета Что требуется сделать (несколько этапов) 1) Анализ формата поставки и правил - На вход даётся 10-15 типовых пакетов (ZIP/MSI) и пример текущих правил в виде таблицы (ожидаемые файлы, маски, версии, требования к подписи) - Нужно уточнить и зафиксировать в конфиге приложения схему правил: допустимые имена/маски, обязательные файлы, допустимые издатели сертификатов, минимальные версии, исключения 2) Разработка десктоп приложения - Приложение выбирает источник (папка/UNC/файл ZIP/MSI), распаковывает во временную область, строит дерево файлов и выполняет проверки - Генерирует отчёт в двух видах: человекочитаемый (PDF или HTML-файл) и машинный (JSON) - Поддерживает профили правил (например Dev/CI/Release) с переключением - Имеет режим «сравнить два пакета» - показывает разницу по файлам, хэшам, подписям и версиям 3) Реализация проверок - Хэширование каждого файла и сравнение с эталоном, если он задан - Проверка Authenticode для PE-файлов: статус подписи, издатель, срок действия сертификата на момент подписи, отметка времени (timestamp) если есть - Для неподписанных или с ошибкой подписи файлов - отдельный список с причиной - Проверка версий для EXE/DLL через FileVersionInfo и сравнение с правилами - SBOM: сформировать перечень файлов с метаданными (путь, размер, хэш, версия где применимо), упаковать в CycloneDX/SPDX JSON; допускается упрощённый вариант без анализа зависимостей, но с корректной схемой и идентификаторами компонентов на уровне файлов/пакета 4) Упаковка и поставка - Сборка готового установщика (MSIX или MSI/WiX, или Squirrel - на выбор) и portable-версии - Логи диагностики (файл лога) и понятные сообщения об ошибках - Короткая инструкция (README на русском) как добавлять/менять правила и как запускать проверку Ограничения - Всё должно работать офлайн, без внешних облачных сервисов - Нельзя требовать установки тяжёлых зависимостей у пользователя (кроме стандартного .NET Desktop Runtime, если выбран .NET) - На пакете размером до 3 ГБ и 50 000 файлов проверка должна укладываться в 7 минут на ПК уровня i7/16GB/SSD, прогресс должен отображаться - Временные файлы должны очищаться автоматически даже при ошибках Измеримые критерии приёмки - На предоставленных тестовых пакетах приложение выдаёт одинаковые результаты при повторных запусках, отчёт JSON валиден и соответствует согласованной схеме - Для 5 заранее подготовленных кейсов (подписанный файл, неподписанный, подпись с просроченным сертификатом без timestamp, подпись с timestamp, файл с неверной версией) приложение корректно классифицирует статус и отражает причину в отчёте - Режим сравнения двух пакетов показывает минимум: добавленные/удалённые/изменённые файлы, изменения хэшей, изменения статуса подписи, изменения версий - Установщик ставит и удаляет приложение без мусора, portable-версия запускается без установки Что будет предоставлено - Набор тестовых ZIP/MSI (через ссылку/архив), текущая таблица правил, список доверенных издателей, примеры ожидаемых отчётов (в любом виде) Ожидаемый результат Готовая десктоп программа для Windows, исходники, конфиги правил, установщик и portable-сборка, плюс минимальный набор авто-тестов для логики проверок (хотя бы unit-тесты на разбор правил и классификацию статусов подписи).