Обновить

Загрузка утилит Windows в обход Store и без лишних гигабайт: используем Microsoft Symbol Server

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.4K
Всего голосов 9: ↑9 и ↓0+9
Комментарии8

Комментарии 8

Менее очевидный факт: помимо PDB-файлов, тот же сервер хранит и сами PE-бинарники: .exe и .dll

Интересно, для чего это изначально сделано? Самим сотрудникам MS проще брать бинарники оттуда?

Это даже не то чтобы проще, а просто вынужденная мера. При отладке нужны определенные бинари (определенной сборки), для обеспечения воспроизводимой отладки конкретных версий программ.
Он хранит множество конкретных сборок файлов (DLL, EXE, SYS, PDB) и позволяет по уникальному идентификатору получить именно ту версию, которая использовалась при возникновении ошибки или создании дампа памяти.
Такой архив версий получается, ну он не хранит историю изменений а просто дает быстрый поиск версии файла и её загрузку.

Да, согласен что для внутренних целей репозиторий всех бинарников нужен - и проще запользовать для этого готовую логику симольного сервера.

Интересно.

Но не особо понятно, возможно в статье какие-то куски потерялись

Что делать если не помогло?

В данном случае Вам поможетлишь загрузка с wsl (либо можете взять любую ВМ на unix-based) и выполнил wget:

При чём тут wsl? Чем приведённый пример с wget отличается от curl выше?

Также непонятны проблемы с User-Agent. Скачивается файл с расширением blob, но это же тот же exe внутри, просто с другим именем?

https://winbindex.m417z.com/

Там тоже странно.

Пошёл на сайт, поискал powershell.exe, по кнопке "Show" нашёл ссылку, у которой указан md5 такой же, как у powershell.exe на моём компе. Но при этом файл имеет другой размер... На сайте нумерация съехала, что ли?

Сейчас постараюсь Вам пояснить.

При чём тут wsl? Чем приведённый пример с wget отличается от curl выше?

По поводу WSL. В приведённых примерах curl и wget делают практически одно и то же - отправляют HTTP-запрос с нужным User-Agent и скачивают файл.
Но при попытке загрузить .exe при помощи curl Вы можете столкнуться с проблемой связанной с TLS-стека, либо корп.политик. Чтобы не вдаваться в дебри решения проблем с TLS и не раздувать статью, показал пример на WSL. Думаю нужно было это в статье указать отдельно(

Также непонятны проблемы с User-Agent. Скачивается файл с расширением blob, но это же тот же exe внутри, просто с другим именем?

Тут спорный момент, я не могу гарантировать на 100% что скачанный файл .blob при переименовании его в .exe будет работать корректно и что мы получили настоящий PE-файл. Поэтому лучше использовать User-Agent. 
Ну либо можно заморочиться с проверкой содержимого через Format-Hex )))

Пошёл на сайт, поискал powershell.exe, по кнопке "Show" нашёл ссылку, у которой указан md5 такой же, как у powershell.exe на моём компе. Но при этом файл имеет другой размер... На сайте нумерация съехала, что ли?

Насчёт Winbindex - там отображается не только имя файла, но и конкретная версия из определённой сборки Windows. Поэтому вполне возможна ситуация, когда MD5 совпадает с вашим экземпляром, а размер кажется другим из-за особенностей отображения, путаницы между размером файла и размером образа в памяти (SizeOfImage) или просто ошибки интерфейса сайта. Для уверенности лучше сравнить SHA-256 и фактический размер файла после скачивания.

я не могу гарантировать на 100% что скачанный файл .blob при переименовании его в .exe будет работать корректно и что мы получили настоящий PE-файл.

Во-первых, сравнить это элементарно, и даже никаких hex-ов не надо, банальным fc /b. Я сравнил, файлы идентичны, user-agent ни на что не повлиял, файл скачался и через браузер, и через curl.

Во-вторых, имя blob возникает из того самого редиректа, так обозначено имя файла в новом урле. Поэтому браузер и использует это имя по умолчанию. При скачивании curl’ом вы указываете опцию -o oscdimg.exe, явным образом задающую имя сохраняемого файла, поэтому что там в урле уже не играет никакой роли. И, опять же, урловое blob-имя никак не меняется от того, указываем мы заголовок UA или нет. Проверяется элементарно, добавлением опции -v к параметрам curl, заставляющей его печатать все технические заголовки.

Гугл предлагает через winget:

winget install -e --id Microsoft.OSCDIMG

Удобно, стандартная системная утилита и хеш не нужен. Правда, есть нюансы - качает в какой то длиный путь внутри домашнего каталога и без спросу прописывает в PATH. И имя программы регистрозависимое.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации