Предыстория (делюсь болью)
Сидел я тут на днях ковырял образы винды различными утилитами (хотя изначально должен был использовать oscdimg.exe), но желаемой цели добиться не мог. И всё же решил загрузить oscdigm, но мелкомягкие приготовили целый квест…
Для тех кто не вкурсе поясню, oscdimg.exe — это экзешник ввесом около 400 КБ, который позволяет через ps редактировать ISO-образы. Только Microsoft решили впихнуть его в пакет Windows ADK, загрузить который можно с оф.сайта в двух вариантах (с онлайн-установкой и «офлайн-установкой»). Вы скачиваете .exe для установки ADK, потом он обращается к серверу Microsoft Store, догружает всё что нужно и готово. Но так как, у меня (не только у меня, но всё же) существует ряд проблем с работой Microsoft Store, загрузкой приложений из него — то онлайн вариант нам не подошел. И я уверенный в своих силах, решил сейчас скачаю офлайн-инсталлер, установлю пакет ADK, уберу всё лишнее и буду использовать oscdimg. Да вот только «офлайн»-инстраллер, работает крайне интересным способом:
Цель — один исполняемый файл весом 400 КБ. Официальный путь — скачать Windows ADK размером в несколько гигабайт, установить, найти нужный .exe, удалить установщик. Именно так Microsoft предлагает получить oscdimg.exe
Но есть способ лучше. В этой статье разберём технику прямой загрузки PE-исполняемых файлов с серверов Microsoft, поймём, как она устроена изнутри, и напишем инструментарий для автоматизации.
Что такое Microsoft Symbol Server
Microsoft поддерживает публичный сервер отладочных символов по адресу msdl.microsoft.com. Формально он предназначен для отладчиков WinDbg, Visual Studio, чтобы те могли скачивать PDB-файлы с отладочными символами для системных библиотек.
Менее очевидный факт: помимо PDB-файлов, тот же сервер хранит и сами PE-бинарники: .exe и .dll. Именно этим мы и воспользуемся.
Небольшой дисклеймер:
Сервер предназначен для отладочных инструментов Microsoft. В статье рассматривается техническая возможность получения размещённых там файлов.
Анатомия URL на Symbol Server
Адрес каждого файла строится по детерминированной схеме из трёх компонентов PE-заголовка:

Ключевой сегмент — составной хеш 688CABB065000. Он формируется из двух полей PE-заголовка:
|
Поле PE |
Структура |
Формат в URL |
Описание |
|---|---|---|---|
|
|
|
8 hex-цифр, upper-case |
Время компиляции в формате Unix timestamp |
|
|
|
hex без ведущих нулей |
Размер образа в памяти после загрузки |
Итоговый сегмент: {TimeDateStamp:08X}{SizeOfImage:X}. Это тот же ключ, который используют DbgHelp.dll и SymSrv.dll при поиске файлов на сервере символов.
Почему нужен специальный User-Agent
Сервер фильтрует запросы по полю User-Agent. Обычный браузерный идентификатор вернёт ошибку или редирект. Необходимо имитировать клиент Windows Debugger:
curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" \ https://msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe \ -o oscdimg.exe
Флаг -L важен: сервер возвращает HTTP 302 и перенаправляет на CDN Microsoft (домен вида vsblobprod*.blob.core.windows.net). Без следования редиректам файл не скачается.
Важно. Используйте curl.exe, а не curl. В PowerShell псевдоним curl указывает на Invoke-WebRequest, у которого другой синтаксис и поведение.
Что делать если не помогло?
В данном случае Вам поможетлишь загрузка с wsl (либо можете взять любую ВМ на unix-based) и выполнил wget:
wget --user-agent="Microsoft-Symbol-Server/10.0.0.0" \ https://msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe \ -O oscdimg.exe
В данном случае –user-agent=“…” — маскирует запрос под официальный отладчик Microsoft. Без этого сервер Microsoft msdl выдаст ошибку доступа 403.
Готовые примеры команд для различных утилит
oscdimg.exe — создание ISO-образов
curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" ` https://msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe ` -o oscdimg.exe
oscdimg — утилита Microsoft для создания ISO-образов в форматах ISO 9660, Joliet и UDF. Официально распространяется в составе Windows ADK (Assessment and Deployment Kit), но нередко нужна сама по себе.
signtool.exe — подпись исполняемых файлов
curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" ` https://msdl.microsoft.com/download/symbols/signtool.exe/910D667173000/signtool.exe ` -o signtool.exe
signtool используется для подписи PE-файлов сертификатами Authenticode, верификации подписей и простановки временных меток. Альтернативный официальный источник — Windows SDK, но он весит несколько гигабайт.
icacls.exe — Управление списками контроля доступа NTFS (ACL)
curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" ` https://msdl.microsoft.com/download/symbols/icacls.exe/578998547000/icacls.exe ` -o icacls.exe
Основной инструмент командной строки для работы с ACL (Access Control Lists) в NTFS. Замена устаревшей cacls.exe — начиная с Windows Vista/2008, именно icacls является рекомендованным Microsoft инструментом. Позволяет выдавать, отзывать и заменять права доступа, сохранять и восстанавливать ACL, работать с наследованием. Незаменим в скриптах развёртывания, при настройке серверных директорий и в CI/CD пайплайнах, где нужно зафиксировать права на файлы артефактов.
В WinPE и минимальных сборках Server Core бывает нужна конкретная версия с поддержкой нужных флагов, либо утилита вовсе отсутствует, если образ сконфигурирован с минимальным набором компонентов.
Использование Winbindex
Это именно тот инструмент, который индексирует все бинарники с msdl.microsoft.com.
Если Вам нужна другая утилита и её хэш, то можете заходить на https://winbindex.m417z.com/ и пользоваться им.
Введите имя файла (например, wevtutil.exe), выберите версию Windows и архитектуру — получите прямую ссылку для скачивания. Проект поддерживается сообществом и обновляется с каждым крупным обновлением Windows.
Итог
Вот такой простой способ я Вам показал, думаю «Америку я вам не открыл», но кому-то надеюсь это поможет.
Не обязательно загружать гигабайты ADK и SDK и «прочего мусора» с ним, всё можно обойти гораздо более простым путем, при этом сэкономив время.
ссылка на оригинал статьи https://habr.com/ru/articles/1042486/