
Инструмент, который позволяет сравнивать информацию о символах, типах и системных вызовах бинарных файлов Microsoft Windows в разных версиях ОС, используя веб-интерфейс и/или LLM.
WinDiff — это веб-инструмент с открытым исходным кодом, который позволяет просматривать и сравнивать информацию о символах, типах и системных вызовах двоичных файлов Microsoft Windows в разных версиях операционной системы. База данных двоичных файлов автоматически обновляется, включая информацию из последних обновлений Windows (включая Insider Preview).
Инструмент вдохновлён ntdiff и стал возможен благодаря Winbindex.
WinDiff состоит из двух частей: инструмента командной строки на Rust и веб-интерфейса на TypeScript с использованием фреймворка Next.js.
Инструмент командной строки используется для создания сжатых JSON-баз данных на основе файла конфигурации и полагается на Winbindex для поиска и загрузки необходимых PE-файлов (и PDB). Типы восстанавливаются с помощью resym. Идея инструмента командной строки заключается в возможности легко обновлять и пересоздавать базы данных по мере выхода новых версий Windows. Код инструмента командной строки находится в каталоге windiff_cli.
Внешний интерфейс используется для визуализации данных, сгенерированных инструментом командной строки, в удобном для пользователя виде. Интерфейс следует тому же принципу, что и ntdiff: он позволяет просматривать информацию, извлечённую из официальных Microsoft PE и PDB для определённых версий Microsoft Windows, а также сравнивать эту информацию между версиями. Код внешнего интерфейса находится в каталоге windiff_frontend.
Запланированное действие GitHub ежедневно получает новые обновления из Winbindex и обновляет файл конфигурации, используемый для генерации живой версии WinDiff. В настоящее время из-за ограничений (бесплатных планов) по хранилищу и вычислительным ресурсам в живой версии сохраняются только обновления KB и Insider Preview за последние менее года. Вы, конечно, можете самостоятельно пересобрать локальную версию WinDiff без этих ограничений, если это необходимо. См. следующий раздел.
Примечание: Winbindex не предоставляет уникальные ссылки для загрузки для 100% проиндексированных файлов, поэтому может случиться, что информация о некоторых PE-файлах будет недоступна в WinDiff. Однако, как только эти PE-файлы появятся на VirusTotal, Winbindex сможет предоставить для них уникальные ссылки для загрузки, и они будут автоматически интегрированы в WinDiff.
Полная сборка WinDiff «самодокументирована» в ci/build_frontend.sh, который является скриптом сборки для создания живой версии WinDiff. Вот его содержимое:
# Resolve the project's root folder
PROJECT_ROOT=$(git rev-parse --show-toplevel)
# Generate databases
cd "$PROJECT_ROOT/windiff_cli"
cargo run --release "$PROJECT_ROOT/ci/db_configuration.json" "$PROJECT_ROOT/windiff_frontend/public/"
# Build the frontend
cd "$PROJECT_ROOT/windiff_frontend"
npm ci
npm run build
Файл конфигурации, используемый для генерации данных для живой версии WinDiff, находится здесь: ci/db_configuration.json, но вы можете изменить его или использовать свой собственный. Приветствуются пул-реквесты, направленные на добавление новых двоичных файлов для отслеживания в живой конфигурации.
Репозиторий содержит агентский навык, который превращает WinDiff в автоматизированного ассистента по исследованию безопасности. Вместо того чтобы самостоятельно щёлкать по интерфейсу сравнения, вы можете попросить Claude Code сравнить две версии Windows и описать, что изменилось — и почему это важно.
Навык находится в .claude/skills/windiff-version-diff-analysis/. Когда вы открываете этот репозиторий в Claude Code, он загружается автоматически и срабатывает на запросы вроде:
ntoskrnl.exe между 21H2 и 24H2 и расскажи, что нового.»win32k.sys / ci.dll, что важно для EDR или античита?»Для двух версий навык запускает windiff_cli, чтобы сгенерировать базы данных, сравнивает их и создаёт отчёт, который интерпретирует дельту сырых символов/типов/системных вызовов, используя знания внутреннего устройства Windows (префиксы API, роли компонентов), и предназначен для трёх аудиторий: разработчиков антивирусов/EDR, разработчиков античита и исследователей уязвимостей. Он выделяет новые системные вызовы, новые флаги смягчения (включая биты, скрытые внутри анонимных битовых полей, со ссылкой на родителя, например _EPROCESS::MitigationFlags2Values), новую телеметрию ETW/Threat Intelligence и коллбэки ядра, изменения целостности кода и совершенно новые компоненты.
Вот отчёт, сгенерированный Claude Opus 4.7 по запросу «Сравни ntoskrnl.exe между 25H2 и 26H1 и расскажи, что нового. Напиши отчёт в файле Markdown»: ntoskrnl_25H2_to_26H1.md
Базовая логика сравнения навыка — это отдельный скрипт Python без зависимостей, который можно использовать самостоятельно с любыми базами данных, созданными windiff_cli:
# List the OS versions / binaries available in a database directory
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public --list
# Diff one binary between two OS versions ("version_update_architecture" suffixes)
python3 .claude/skills/windiff-version-diff-analysis/scripts/windiff_diff.py \
windiff_frontend/public ntoskrnl.exe 21H2_BASE_amd64 22H2_BASE_amd64
Он выводит удобочитаемую сводку в stderr и структурированный JSON (добавленные/удалённые экспорты, символы, модули, системные вызовы и изменения типов/битовых полей) в stdout. Полный рабочий процесс и справочные материалы см. в SKILL.md навыка.