программный код виндовс 10
Насколько сложный программный код у Windows?
Чтобы разобраться вопросе, насколько может быть сложным программный код «Виндовс» мы обратились к одному из разработчиков команды Windows NT в компании Microsoft — Кену Греггу (Ken Gregg).
Кен Грегг (Ken Gregg), разработчик в составе группы Windows NT
«Могу сказать вам, что у меня был доступ к исходному коду, когда я был в команде Windows NT (NT является основой для всех настольных версий Windows начиная с XP), во время проектов разработки NT 3.1 и NT 3.5. Всё было в рамках стандартов кодирования NT Workbook — эдакой «библии» для всей проектной команды.
. Хотя я и не читал каждую строку кода, но то, с чем мне пришлось работать, было очень:
Нужно исходить из того, что именно понимается под сложностью кода. Это понимание сугубо субъективное, ведь так? Благо существует множество различных метрик, используемых и комбинируемых для измерения сложности программного обеспечения в тех или иных ситуациях (та же самая модульность, многоуровневость и обслуживаемость).
Насколько сложна Windows в программном коде?
Конечно, чтобы прочитать и понять код, вам нужно было бы иметь представление об общей архитектуре Windows NT.
Вероятно, лучшим источником информации о внутренностях Windows сегодня являются книги Windows Internals 6th Edition (в двух томах).
Некоторые люди просто приравнивают сложность кода к размеру. У этого сравнения тоже есть метрика — строки кода (LOC).
Измерение LOC зависит от используемых инструментов и критериев. Их выбирают для точного определения строк кода на каждом языке программирования.
Кен Грегг (Ken Gregg)
«Существует много споров о методах, используемых для подсчета строк кода (LOC). Если использовать одни и те же критерии от одного выпуска к следующему, то получится относительное изменение размера базы кода.
Сравнивать эти числа с цифрами другой ОС, которая использовала другой метод подсчета строк кода, всё равно что сравнивать яблоки с апельсинами. То есть это некорректный подход».
Как менялся программный код Windows?
Как база кода Windows NT развивалась с 1993 года
MLOC — это количество миллионов строк исходного кода. По ним можно определить относительную сложность операционной системы, если опираться на размеры кода (LOC-методика).
Исходный код Windows состоит в основном из C и C++, а также небольшого количества кода на ассемблере.
Некоторые из утилит пользовательского режима и другие подобные службы пишутся на Си Шарп, но это относительно небольшой процент от общей базы кода.
Кен Грегг (Ken Gregg)
«Я намеренно не включил в список 16-битные версии ОС, выпущенные с 1985 по 2000 годы. Windows NT была основой для всех современных 32-бит и 64-бит версий Windows. Количество строк кода в серверных версиях было таким же, как и в несерверных версиях, выпущенных в том же году (то есть они имели одинаковую базу исходного кода)».
Несколько слов про ядро Windows NT
По словам Кена, работа над ядром NT началась в 1988 году. Ядро было создано с нуля в качестве 32-разрядной упреждающей многозадачной ОС.
Ядро NT впервые загрузилось в июле 1989 года на процессоре Intel i860 RISC. С самого начала был сильный толчок к тому, чтобы новая ОС была совместимой с различными архитектурами центральных процессоров и не была привязана только к архитектуре Intel x86 (IA-32).
NT в конечном итоге работал на MIPS, DEC Alpha, PowerPC, Itanium и, конечно, Intel x86 и x64.
Некоторая сложность была добавлена в базу кода на уровне абстрагирования оборудования (HAL). Это было нужно для поддержки неинтеловских архитектур.
А как вы оцениваете перспективы Windows в плане кода? Узнайте, какие версии Windows актуальны сейчас и какие ОС можно рассмотреть в качестве альтернативы.
Есть проблемы при использовании Windows и непонятен программный код для внедрения новых бизнес-инструментов в ОС от Microsoft? Проконсультируйтесь с экспертами по ИТ-аутсорсингу и получите поддержку по любым техническим вопросам и задачам.
32 Тбайт исходного кода и сборок Windows 10 утекло в Сеть
В Сети стала доступна для всеобщего обозрения огромная часть внутренних сборок и элементов ядра Windows. На betaarchive.com было загружено около 32 Тбайт непубличных установочных образов и проектов программного обеспечения. Предполагается, что данные были похищены с внутренних систем Microsoft в марте этого года.
Среди утёкших данных — исходный код, который распространяется по механизму Shared Source. По словам людей, которые видели его содержимое, он включает код базовых аппаратных драйверов Windows 10 и PnP, стеки USB и Wi-Fi, а также код ядра OneCore для ARM-устройств.
Любой, кто успел получить доступ к информации, мог использовать её для поиска уязвимостей систем безопасности. Это может привести к глобальному взлому компьютеров на базе Windows. Код работает в самом сердце операционной системы, на одном из самых доверенных уровней.
Среди утёкших копий официальных версий операционной системы оказались и секретные сборки Windows 10 и Windows Server 2016, которые ранее не появлялись в Сети. Они разработаны специально для поиска багов и тестирования и включают отладочные символы, которые обычно убираются из публичных версий ОС.
В списке, например, присутствуют предрелизные сборки Windows 10 Redstone и невыпущенные версии операционной системы для 64-битных ARM-процессоров. The Register считает, что в Сети оказалось слишком много сборок, чтобы Microsoft могла использовать механизмы защиты и предотвратить установку утёкших версий на сторонние компьютеры.
В свободном доступе оказались и различные версии Windows 10 Mobile Adaptation Kit. Это секретное программное обеспечение, с помощью которого Microsoft заставляет работать операционную систему на мобильных устройствах.
Утечка считается крупнейшей с момента попадания в Сеть исходного кода Windows 2000, произошедшего в 2004 году. Администраторы Beta Archive уже удаляют непубличные компоненты и сборки со своих серверов и форумов.
Изучаем дерево исходников Windows 10: от телеметрии до open source
Насколько бы закрытым ни было программное обеспечение Microsoft, информации о своем внутреннем устройстве оно выдает предостаточно. К примеру, экспорт функций из библиотеки по именам дает представление о ее интерфейсах. В свободном доступе есть и отладочные символы, которые повсеместно используются для диагностики ошибок в ОС. Однако на руках у нас все равно имеются только скомпилированные бинарные модули. Становится интересно: а какими они были до компиляции? Давайте попробуем разобраться, как вытащить побольше информации об исходных кодах, не делая ничего незаконного.
Идея, конечно, не нова. В свое время подобное делали и Марк Руссинович, и Алекс Ионеску. Мне лишь было интересно получить свежие данные, немного дополнив и уточнив уже проделанную другими работу. Для эксперимента нам понадобятся пакеты отладочных символов, которые есть в свободном доступе. Я взял пакеты для последней релизной версии «десятки» (64 бита), причем решил исследовать и релизный пакет (free build), и отладочный (checked build).
Отладочные символы — это набор файлов с расширением pdb (program database, база данных программы), в которых хранится различная информация для расширения возможностей отладки бинарных модулей в ОС, включая имена глобалов, функций и структур данных, иногда вместе с их содержимым.
Помимо символов можно взять условно доступную отладочную сборку «десятки». Такая сборка богата на ассерты, в которых бывают описаны не только недокументированые и отсуствующие в символьных файлах имена переменных, но и номер строки в файле, в котором сработал ассерт.
В примере видно не только имя файла и его расширение, но и структура каталогов до него, очень полезная даже без корня.
Натравливаем на файлы символов утилиту strings от sysinternals и получаем около 13 ГБ сырых данных. А вот кормить все файлы из дистрибутива отладочной сборки подряд — так себе идея, ненужных данных будет слишком много. Ограничимся набором расширений: exe — исполняемые файлы, sys — драйвера, dll — билиотеки, ocx — ActiveX-компоненты, cpl — компоненты панели управления, efi — EFI-приложения, в частности загрузчик. Сырых данных от дистрибутива набралось 5,3 ГБ.
К своему удивлению я обнаружил, что не так много программ способны хотя бы открыть файлы размером в десяток гигабайт, и уж тем более единицы смогли поддержать функцию поиска внутри таких файлов. В данном эксперименте для ручного просмотра сырых и промежуточных данных использовался 010 Editor. Фильтрация данных дешево и сердито осуществлялась скриптами на питоне.
Фильтрация данных из символьных файлов
В символьных файлах помимо прочего содержится информация компоновщика. То есть, в символьном файле присутствует список объектных файлов, которые использовались для компоновки соответствующего бинарника, причем в компоновщике используется полный путь до объектного файла.
Получаем абсолютные пути, сортируем, удаляем дубликаты. К слову, мусора получилось не так много, и он был удален вручную.
При осмотре полученных данных стала понятна примерная структура дерева исходных кодов. Корень — «d:\th», что по всей видимости означает threshold, в соответствии с названием ноябрьской версии Windows 10 — Threshold 1. Однако файлов с корнем «d:\th» оказалось мало. Это объясняется тем, что компоновщик принимает уже собранные файлы. А сборка объектников осуществляется в папки «d:\th.obj.amd64fre» для релизной сборки и «d:\th.obj.amd64chk» для отладочной.
Для примера:
d:\th.obj.amd64fre\shell\osshell\games\freecell\objfre\amd64\freecellgame.obj
это бывший
d:\th\shell\osshell\games\freecell\freecellgame.c??
По поводу расширения файлов: объектный файл получается из кучи разных типов исходного файла: «c», «cpp», «cxx», «asm» и т. д. На данном этапе неясно, какой именно тип исходного файла использовался, поэтому оставим расширение «c??».
Помимо папки «d:\th» наблюдается множество других корней. Например, «d:\th.public.chk» и «d:\th.public.fre». Данную папку мы опустим ввиду того, что в ней хранится публичная часть sdk, то есть она нам не очень интересна. Также стоит отметить различные пути проектов для драйверов, которые, судя по всему, собираются где-то на рабочих местах разработчиков:
c:\users\joseph-liu\desktop\sources\rtl819xp_src\common\objfre_win7_amd64\amd64\eeprom.obj
C:\ALLPROJECTS\SW_MODEM\pcm\amd64\pcm.lib
C:\Palau\palau_10.4.292.0\sw\host\drivers\becndis\inbox\WS10\sandbox\Debug\x64\eth_tx.obj
C:\Users\avarde\Desktop\inbox\working\Contents\Sources\wl\sys\amd64\bcmwl63a\bcmwl63a\x64\Windows8Debug\nicpci.obj
Другими словами, существует набор драйверов устройств, отвечающих стандартам, например, USB XHCI, которые входят в дерево исходных кодов ОС. А все специфичные драйвера собираются где-то в другом месте.
Выходные данные становятся все красивее! Однако на этом этапе дополнительные данные получить уже практически невозможно. Переходим к следующему набору сырых данных.
Фильтрация данных из исполняемых файлов
На этом этапе есть несколько проблем с данными, полученными из символов. Первая проблема: мы не уверены, что правильно откатили путь сборки исходного файла в объектный файл.
И они действительно есть! То есть, для большинства каталогов можно утверждать, что их структура восстановлена правильно. Конечно, все еще остаются сомнительные каталоги, но думаю, эта погрешность вполне приемлема. Попутно можно смело заменять расширение «c??» на расширение совпавшего по пути исходника.
Вторая проблема — заголовочные файлы. Дело в том, что это важная часть исходных файлов, однако из заголовочника не получается объектный файл, а это значит, что из информации об объектных файлах нельзя восстановить заголовочники. Приходится довольствоваться малым, а именно теми заголовочниками, которые мы нашли в сырых данных бинарных файлов.
Третья проблема: мы все еще не знаем большинство расширений исходных файлов.
Ну а как же исходники на ассемблере? За последним штрихом можно обратиться к Windows Research Kernel — исходным кодам Windows XP — и часть исходников на ассемблере переименовать вручную.
Изучаем полученные данные
Телеметрия
Какое-то время я изучал вопрос об устройстве телеметрии в Windows 10. К сожалению, анализ на скорую руку не выявил ничего стоящего. Я не нашел никаких кейлоггеров, никакой утечки чувствительных данных, ничего, к чему можно было бы прикопаться. И первым ключевым словом для поиска среди исходных файлов было «telemetry». Результат превзошел мои ожидания: 424 совпадения. Самые интересные приведу ниже.
Комментировать, пожалуй, не стоит, поскольку все равно достоверно ничего не известно. Однако эти данные могут послужить хорошей отправной точкой для более детального исследования.
Kernel Patch Protection
Следующая находка — всеми любимый PatchGuard. Правда, в дереве исходников ОС присутствует только один файл непонятного, скорее всего бинарного типа.
d:\th\minkernel\ntos\ke\patchgd.wmp
Поискав совпадения в нефильтрованных данных, я обнаружил, что на самом деле Kernel Patch Protection — это отдельный проект.
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen00.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen01.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen02.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen03.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen04.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen05.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen06.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen07.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen08.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen09.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgd.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda2.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda3.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda4.c??
Сомнительные файлы
Не придумав больше ничего меня интересующего, я начал искать все подряд — и остался доволен!
d:\th\windows\core\ntgdi\fondrv\otfd\atmdrvr\umlib\backdoor.c??
в драйвере шрифтов?
d:\th\inetcore\edgehtml\src\site\webaudio\opensource\wtf\wtfvector.h
Web Template Framework, это всего лишь Web Template Framework, спорная аббревиатура. Погодите,
Open source?
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libjpeg\jaricom.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libpng\png.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libtiff\tif_compress.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\zlib\deflate.c??
Думаю, на этой находке пора закругляться.
Архив с текстовым файлом со списком исходников приведен по ссылке. Делитесь своими находками в комментариях!
32 ТБ исходного кода Windows 10 попало в открытый доступ, Microsoft подтвердила утечку
В открытый доступ попала огромная часть внутренних сборок и элементов ядра Windows 10. На сайте Betaarchive было загружено около 32 ТБ непубличных установочных образов и проектов операционной системы. Предполагается, что данные были похищены с внутренних систем Microsoft в марте этого года.
Среди утекших данных — исходный код, который распространяется по механизму Shared Source. По данным экспертов, он включает код базовых драйверов Windows 10 и PnP, стеки USB и Wi-Fi, а также код ядра OneCore для ARM-устройств. Представитель Microsoft подтвердил, что опубликованные файлы на самом деле являются частью исходного кода Windows 10.
Утечки исходного кода могут служить наводкой для хакеров, которые ищут уязвимости в ОС. Любой, кто успел получить доступ к информации, может использовать её для поиска критических брешей безопасности, что может привести к глобальному взлому компьютеров на базе Windows. Код работает в самом сердце ОС, на одном из самых доверенных уровней.
Среди утекших копий официальных версий операционной системы оказались и секретные сборки Windows 10 и Windows Server 2016, которые ранее не появлялись в Сети. Они разработаны специально для поиска багов и тестирования и включают отладочные символы, которые обычно убираются из публичных версий ОС.
По мнению экспертов, в Сети оказалось слишком много сборок, чтобы Microsoft могла использовать механизмы защиты и предотвратить установку утекших версий на сторонние компьютеры.
«Слив» считается крупнейшим с момента попадания в Сеть исходного кода Windows 2000, произошедшего в 2004 году.
Утечки произошли после того, как в Великобритании были арестованы двое мужчин по подозрению в краже данных Microsoft. Связаны ли эти события с утечкой — неясно. Но известно, что оба арестованных имели отношение к разработке Windows 10 и как минимум один был жертвователем ресурса BetaArchive.
СМИ: в сети оказались части исходного кода Windows 10
Администраторы форума, на который якобы выложили архив с данными, опровергают заявление журналистов.
Обновлено: в Microsoft подтвердили утечку части исходного кода, предназначенного для производителей оборудования и партнёров компании.
По информации издания The Register, файлы операционной системы были выложены на закрытый форум BetaArchive и содержали в себе исходный код Windows 10, а также ряд билдов, не демонстрировавшихся публике.
Как отметил шеф-редактор портала Крис Уильямс, из-за утечки размером в 32 терабайта хакеры могут найти множество уязвимостей в операционной системе и использовать их в будущем.
Впрочем, администрация BetaArchive опровергла заявление журналистов, подчеркнув, что «вес» архива, выложенного на сайт, оказался значительно меньше 32 терабайт.
До того, как вышел материал The Register, на сайте действительно была папка Shared Source Kit, которую мы удалили и не планируем восстанавливать, пока не проверим, что она соответствует правилам нашего сообщества.
В папке было 1,2 гигабайта данных, поделённых на 12 файлов по 100 мегабайт — что намного меньше 32 терабайт из статьи. В них бы не поместился исходный код, не говоря уже о том, что это противоречило бы правилам сайта.
При этом в администрации уточнили, что на портале регулярно появляются данные, связанные с Windows, которые предоставляют участники различных программ Microsoft, но эти архивы связаны с устаревшими билдами и бета-релизами.
Также сотрудники BetaArchive опровергли информацию о том, что архив, появившийся на сайте был опубликован двумя британцами, арестованными за хакерскую атаку на Microsoft.
По словам администраторов сайта, слухи о том, что они удалили профили и данные двух пользователей сразу после новостей об аресте англичан, не соответствуют действительности.
BetaArchive — закрытый форум, известный своими строгими правилами отбора участников. Так, зарегистрироваться на нём не смогли журналисты PC Gamer, желавшие уточнить детали утечки.






