Драйвер как открыть код
Многие считают что самому создать драйвер для Windows это что-то на грани фантастики. Но на самом деле это не так. Конечно, разработка драйвера для какого-то навороченного девайса бывает не простой задачей. Но ведь тоже самое можно сказать про создание сложных программ или игр. В разработке простого драйвера нет ничего сложного и я попытаюсь на примерах это показать.
Сперва нам нужно определится в чем мы же будем создавать наш первый драйвер. Поскольку материал ориентирован на новичков, то язык программирования был выбран один из простых, и это не Си или ассемблер, а бейсик. Будем использовать один из диалектов бейсика — PureBasic. Из коробки он не обучен создавать драйверы, но у него удачный набор файлов, используемых для компиляции и небольшое шаманство позволяет добавить эту возможность. Процесс компиляции состоит из нескольких этапов. Если кратко, то он происходит следующим образом: Сначала транслятор «перегоняет» basic-код в ассемблер, который отдается FASM'у (компилятор ассемблера), который создает объектный файл. Далее в дело вступает линкер polink, создающий исполняемый файл. Как компилятор ассемблера, так и линкер могут создавать драйверы и если немного изменить опции компиляции, то получим не исполняемый файл, типа EXE или DLL, а драйвер режима ядра (SYS).
Окно IDE с загруженным кодом драйвера показано на скрине.
Компиляция драйвера выполняется через меню «Компилятор» (это если кто не понял).
Теперь определимся что будет делать наш первый драйвер. Обычно при изучении программирования начинают с простых вещей, скажем, выполнения математических операций и вывода результата. Вот пусть наш драйвер делает тоже самое, ведь банальная математика производимая в режиме ядра это очень круто!
Может показаться что это куча бессмысленного кода, но это не так.
У каждого драйвера должна быть точка входа, обычно у нее имя DriverEntry() и выполнена она в виде процедуры или функции. Как видите, в этом драйвере есть такая процедура. Если посмотрите на начало кода, то в первых строках увидите как ей передается управление. В этой процедуре происходит инициализация драйвера. Там же назначается процедура завершения работы драйвера, которая в нашем случае имеет имя UnloadDriver(). Процедуры CreateDispatch() и CloseDispatch() назначаются обработчиками соединения и отсоединения проги из юзермода.
Процедура DeviceIoControl() будет обрабатывать запросы WinAPI функции DeviceIoControl(), являющейся в данном драйвере связью с юзермодом. В конце кода расположена так называемая ДатаСекция (DataSection), в которой находятся имена драйвера, сохраненные в формате юникода (для этого использована одна из фишек ассемблера FASM).
Видите сколько понадобилось кода для выполнения простейшей математической операции — сложения двух чисел?
А теперь рассмотрим программу, работающую с этим драйвером. Она написана на том же PureBasic.
Процедура Plus() осуществляет связь с драйвером. Ей передаются хэндл, доступа к драйверу и слагаемые числа, которые помещаются в структуру и указатель на указатель которой, передается драйверу. Результат сложения чисел будет в переменной «Result».
Далее следует код простейшего GUI калькулятора, скопированного из википедии.
Когда закроют окно, то перед завершением работы программы, закрывается связь с драйвером и производится его деинсталляция из системы.
Результат сложения чисел 8 и 2 на скриншоте.
Исходные коды драйвера и программы, можно найти в папке «Examples», PureBasic на файлопомойке, ссылку на который давал в начале статьи. Там так же найдете примеры драйвера прямого доступа к порам компа и пример работы с памятью ядра.
PS.
Помните, работа в ядре чревата мелкими неожиданностями аля, BSOD (синий экран смерти), поэтому экспериментируйте осторожно и обязательно всё сохраняйте перед запуском драйвера.
Мне здесь всегда что-нибудь путное подсказывали. решил снова обратиться за помощью.
И так, перейду к сути вопроса:
Каким ПО можно корректно открыть и отредактировать .sys файлы. но не на подобие config.sys, это ИМХО нотепадом , а те которые лежат в windowssystem32drivers. $) да. да. именно системные файлы из ядра форточек.
И вопрос № 2: Получу ли я запрет на использование файлов системой. если в закладке Security вытру группу System. Идентично ли это блокировке DrWebом.
С уважением Валера.
Буду благодарен за любую подсказку.
Еще раз прошу прошения за флейм.
Каким редактором можно открыть .str-файлы?
В играх тексты упакованы в .str файлы Открыть хоть как то получилось Блокнотом, но после.
Можно ли открыть .xnb, отредактировать его потом опять запихать?
Можно ли открыть .xnb, отредактировать его потом опять запихать? :)
Таблицы MyISAM: чем их можно открыть, чтобы посмотреть и отредактировать?
Здраствуйте! Я новичек в базах данных. У меня есть разные файлы с расширениями opt, frm, myd.
Открыть новую форму, в которой можно было бы отредактировать выделенные значения строки DGV
Всем доброго времени сутог! Такой вопрос, как сделать так, что бы в таблице, при нажатии.
>> Каким ПО можно корректно открыть и отредактировать .sys файлы
Ну конечно тем же самым ПО, которым можно открыть Winword.exe и превратить в Excel.exe путём редактирования! Ну что за простейшие вопросы, прямо не знаю!
Команч. я не знаю можно ли это сделать вообще поэтому и спрашиваю совета, а Вы сразу вместо объяснений сарказм выдаете.
Открыть драйвер - это вопрос хороший. Хоть блокнотом, если поймешь А вообще - тем же чем и ехе-шники, но ответственность на порядок больше.
Только, исходя из вопроса, настоятельно советую этого не делать. А уж тем более - редактировать.
Здравствуйте, мое мнение:
Даже если открыть все таки удасться, то что там поймешь и сохранишь ли изменения, мне кажется создатели 'Форточек' предусмотрели что-нибудь для защиты от неопытного пользователя и прочих 'любопытствующих'.
Да насчет защиты вы правы, они чем-то упакованы. попробовал проехаться по ним дизасcемблерами. вроде картинка получилась ничего. только вот в String Data имеет вид крякозябры.
чуть не упал со стула.
да если б их паковали чем-то, мы бы не дождались, пока они загрузятся
а по поводу строк - там уникод
Дело в том, что этот .sys файл добавляет софтина. и все PE идентификаторы выдают, что он упакован, пока еще не понял чем
А по поводу падения со стула. да Messir я с Вами абсолютно согласен по поводу стандартных .sys файлов OS, они не могут быть ни чем упакованы и EP у них тоже не упакован, хотя есть исключения вот например atapi.sys у него как ни странно упакован EP!
Спасибо!
А какой PE редактор посоветуете?
Нашёл PE Explorer , а он для Винды 7 64 бит файлы не поддерживает (((
Это не важно, её и не было.
А вот PE редактор, который бы редактировал .sys, сделанный для WIN 7 64-bit пока не могу найти ((
Ну-ну, удачи в редактировании.
Не забудьте сразу приготовить загрузочный диск с Windows, ERD Commander и т.п.
Потому что после редактирования очередного .sys-файла система запросто
может перестать загружаться.
То, что в файле нет цифровой подписи - это еще ни о чем не говорит, подпись
может храниться в другом месте (так называемые каталоги безопасности - .cat).
Как только вы измените хотя бы один битик в файле, подпись станет невалидной и
система не будет загружать такой драйвер (речь идет о 64-битных Vista и Windows 7, а
также о Windows 8 и выше любой разрядности, если включен Secure Boot).
Доброго времени суток!
Проблема поиска драйверов с выходом Windows 8/10 — существенно облегчилась (т.к. большую часть из них, обычно, находит и устанавливает сама ОС). Однако, в ряде случаев — драйвер система не находит, и, разумеется, это придется делать самостоятельно.
В сегодняшней статье я хотел более подробно описать вариант поиск драйвера по его коду (ID*, идентификатор оборудования). Этот способ универсален, и может выручить даже в самых сложных случаях.
Что такое ID (код оборудования)
Если упростить некоторые моменты, то это обычная текстовая строка, в которой зашифрована информация о производителе (VEN/VID), о модели устройства (DEV/PID), и пр. информация. Пример такой строки приведен ниже (прим.: для Bluetooth адаптера) .
Благодаря подобному коду (ID) — можно найти и установить драйвер практически для любого оборудования. Причем, это позволит избежать кучи проблем (конфликтов, несовместимости и пр.) и установить конкретно тот драйвер, который нужен вашему устройству.
Теперь о том, как найти этот код и как с помощью него установить драйвер.
Поиск драйвера по коду оборудования
ШАГ 1: узнаем ID-код оборудования
Для определения ИД (ID) оборудования необходимо открыть диспетчер устройств . Универсальный способ для этого: нажать сочетание Win+R (должно появиться окно "Выполнить") , ввести команду devmgmt.msc и нажать OK.
Запуск диспетчера устройств - devmgmt.msc
Альтернативный вариант запустить диспетчер устройств: нажать сочетание кнопок Win+X , и в появившемся меню выбрать нужное (см. скрин ниже, способ актуален для Windows 8/10) .
Для вызова этого меню - нажмите сочетание Win+X
В диспетчере устройств найдите нужное оборудование, кликните по нему правой кнопкой мышки и в контекстном меню выберите опцию "Свойства" .
Обратите внимание, что устройства, для которых нет драйвера в системе — помечены желтым восклицательным знаком как неизвестное устройство, см. скрин ниже (также они могут быть во вкладке "Другие устройства") .
Неизвестное устройство
Диспетчер устройств — свойства
Далее перейдите во вкладку "Сведения" , в графе "Свойство" выберите "ИД оборудования" . Перед вами должен предстать список строк (их количество может быть разным, но, если обратите внимание — данные в них повторяются) .
Сведения — ID оборудования
Чтобы скопировать строку, просто выберите ее и кликните правой кнопкой мышки, в контекстном меню выберите "Копировать" (или просто воспользуйтесь сочетанием Ctrl+C) .
Примечание : рекомендую сначала скопировать и искать по короткой строке, в которой содержится только VID и PID (VEN, DEV). Пример ниже.
Копировать ID оборудования
Теперь ID оборудование нам известно ( USB\VID_0BDA&PID_B00B ) .
ШАГ 2: где искать драйвер для оборудования, зная его код ID
Сайт с огромным количеством драйверов (на нем собраны десятки тысяч драйверов для самого разного оборудования). Единственный минус - обилие рекламы. Тем не менее, не порекомендовать не могу!
Поиск драйвера на Devid.info
Аналогичный сайт. На мой взгляд, он даже поудобнее, т.к. предлагает сразу загрузить архив с драйвером (без пред-просмотра лишней рекламы).
Строку с ИД можно просто вставить в любую поисковую систему и произвести поиск. При поиске драйверов к оборудованию от малоизвестных китайских брендов — нередко драйвер можно загрузить только с очень "специфичных" сайтов.
ШАГ 3: как установить драйвер, если нет исполняемого файла setup.exe / install.exe
❶ Если драйвер запакован в архив ZIP, RAR и пр.
Сначала извлеките содержимое архива (лучшие архиваторы). Как привило, в архиве содержится каталог с большим количеством "мелких" файлов и исполняемый файл setup.exe , который и нужно запустить для установки драйвера.
Извлечь файлы / Кликабельно
❷ Если исполняемого файла setup.exe нет
Тогда откройте диспетчер устройств (как это сделать), затем кликните правой кнопкой мышки по оборудованию и выберите в меню "Обновить драйвер" .
Диспетчер устройств — обновить драйвер
После выберите вариант "Выполнить поиск драйверов на этом компьютере" .
Выполнить поиск драйверов на этом компьютере
И укажите папку, куда были сохранены (извлечены из архива) файлы драйвера. После нажмите "Далее" .
Поиск драйвера на этом компьютере
Далее Windows проверит папку и предложит выбрать драйвер для установки. В общем-то, осталось только дождаться окончания установки.
Выбор драйвера для этого устройства
PS
Обновить сейчас - 21 устройство! (обновление драйверов в 1 клик мышкой в Driver Booster 6)
Доброго всем дня!
С появлением Windows 8/10 подключать новое оборудование к компьютеру стало гораздо быстрее, так как для большинства из них — драйверы устанавливаются сразу же автоматически, как только вы подключили устройство к USB-порту.
Поиск и установка драйвера
Как узнать, для какого оборудования нет драйверов:
- Пожалуй, это первое, с чего следует начать статью. Самый простой и быстрый способ — воспользоваться диспетчером устройств .
Чтобы его открыть, нажмите сочетание кнопок Win+R , затем введите команду devmgmt.msc , и нажмите OK;
Запуск диспетчера устройств - devmgmt.msc
Диспетчер устройств — неизвестное устройство — свойства
Кстати, обратите внимание на строку с аппаратным ID — это часто нужно при поиска драйвера по его коду (об это далее в статье) ;
ASTRA 32 - проблемный драйвер
Установка драйвера из папки, с диска или из интернета:
- Если у вас есть "родной" диск CD/DVD (например) от вашего оборудования — то, как правило, достаточно вставить его в дисковод: после чего автоматически запустится установщик, который проведет через все тернии.
Далее найдите в списке устройство, для которого хотите обновить драйвер, и нажав на него правой кнопкой мышки, в контекстном меню выберите "Обновить драйверы. " .
Обновить драйверы - диспетчер устройств
- либо автоматический поиск в интернете, скачивание и его установка (в этом случае вам вообще ничего ненужно делать — все сделает сама Windows. Правда, во многих случаях — это не срабатывает);
- либо выполнить поиск драйвера на этом компьютере (т.е. самому указать, где лежит драйвер, в какой папке).
Выбор варианта обновления
Если для вашего устройства уже когда-то были установлены драйвера, а затем вы их обновили — то вы можете выбрать старые версии драйверов: для этого выберите вариант "Выбрать драйвер из списка уже установленных драйверов" (стрелка 3 на скрине ниже) .
Поиск драйверов на этом компьютере
"Ручной" поиск драйвера по его коду:
- Если все остальные манипуляции не принесли никакого результата, и вы так и не смогли найти драйвер, можно попробовать найти его по коду;
- Примечание!
У каждого устройства есть свои уникальные идентификаторы, обозначаются они, как VID и PID. Имея эти два уникальных значения для своего оборудования — вы можете найти драйвер даже для того оборудования, о котором вы более ничего не знаете;
Свойства неизвестного устройства
Копируем ID устройства
Кстати, на скриншоте ниже показан пример поиска драйвера по ID оборудованию на известном сайте DevID (достаточно, скопировать строку с VID/PID и вставить ее в поле найти: среди найденных результатов выберите драйвер под свою ОС Windows, см. ниже).
DEVID - поиск драйвера по ID оборудования
Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено. Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!
В чём суть, капитан?
В архитектуре x86 есть понятие «колец защиты» («Ring») – режимов работы процессора. Чем ниже номер текущего режима, тем больше возможностей доступно исполняемому коду. Самым ограниченным «кольцом» является «Ring 3», самым привилегированным – «Ring -2» (режим SMM). Исторически сложилось, что все пользовательские программы работают в режиме «Ring 3», а ядро ОС – в «Ring 0»:
Режимы работы x86 процессора
В «Ring 3» программам запрещены потенциально опасные действия, такие как доступ к I/O портам и физической памяти. По логике разработчиков, настолько низкоуровневый доступ обычным программам не нужен. Доступ к этим возможностям имеют только операционная система и её компоненты (службы и драйверы). И всё бы ничего, но однажды я наткнулся на программу RW Everything:
RW Everything действительно читает и пишет практически всё
Эта программа была буквально напичкана именно теми функциями, которые обычно запрещаются программам «Ring 3» - полный доступ к физической памяти, I/O портам, конфигурационному пространству PCI (и многое другое). Естественно, мне стало интересно, как это работает. И выяснилось, что RW Everything устанавливает в систему прокси-драйвер:
Смотрим последний установленный драйвер через OSR Driver Loader
Прокси-драйвера
В итоге получается обходной манёвр – всё, что программе запрещено делать, разработчик вынес в драйвер, программа устанавливает драйвер в систему и уже через него программа делает, что хочет! Более того – выяснилось, что RW Everything далеко не единственная программа, которая так делает. Таких программ не просто много, они буквально повсюду. У меня возникло ощущение, что каждый уважающий себя производитель железа имеет подобный драйвер:
Софт для обновления BIOS (Asrock, Gigabyte, HP, Dell, AMI, Intel, Insyde…)
Софт для разгона и конфигурации железа (AMD, Intel, ASUS, ASRock, Gigabyte)
Софт для просмотра сведений о железе (CPU-Z, GPU-Z, AIDA64)
Софт для обновления PCI устройств (Nvidia, Asmedia)
Во многих из них практически та же самая модель поведения – драйвер получает команды по типу «считай-ка вот этот физический адрес», а основная логика – в пользовательском софте. Ниже в табличке я собрал некоторые прокси-драйвера и их возможности:
Результаты краткого анализа пары десятков драйверов. Могут быть ошибки!
Mem – чтение / запись физической памяти
PCI – чтение / запись PCI Configuration Space
I/O – чтение / запись портов I/O
Alloc – аллокация и освобождение физической памяти
Map – прямая трансляция физического адреса в вирутальный
MSR – чтение / запись x86 MSR (Model Specific Register)
Жёлтым обозначены возможности, которых явно нет, но их можно использовать через другие (чтение или маппинг памяти). Мой фаворит из этого списка – AsrDrv101 от ASRock. Он устроен наиболее просто и обладает просто огромным списком возможностей, включая даже функцию поиска шаблона по физической памяти (!!)
Неполный перечень возможностей AsrDrv101
Чтение / запись RAM
Чтение / запись IO
Чтение / запись PCI Configuration Space
Чтение / запись MSR (Model-Specific Register)
Чтение / запись CR (Control Register)
Чтение TSC (Time Stamp Counter)
Чтение PMC (Performance Monitoring Counter)
Alloc / Free физической памяти
Поиск по физической памяти
Самое нехорошее в такой ситуации - если подобный драйвер остаётся запущенным на ПК пользователя, для обращения к нему не нужно даже прав администратора! То есть любая программа с правами пользователя сможет читать и писать физическую память - хоть пароли красть, хоть ядро пропатчить. Именно на это уже ругались другие исследователи. Представьте, что висящая в фоне софтина, красиво моргающая светодиодиками на матплате, открывает доступ ко всей вашей системе. Или вирусы намеренно ставят подобный драйвер, чтобы закрепиться в системе. Впрочем, любой мощный инструмент можно в нехороших целях использовать.
Через Python в дебри
Конечно же я захотел сделать свой небольшой "тулкит" для различных исследований и экспериментов на базе такого драйвера. Причём на Python, мне уж очень нравится, как просто выглядит реализация сложных вещей на этом языке.
Первым делом нужно установить драйвер в систему и запустить его. Делаем "как положено" и сначала кладём драйвер (нужной разрядности!) в System32:
Раньше в похожих ситуациях я извращался с папкой %WINDIR%\Sysnative, но почему-то на моей текущей системе такого алиаса не оказалось, хотя Python 32-битный. (по идее, на 64-битных системах обращения 32-битных программ к папке System32 перенаправляются в папку SysWOW64, и чтобы положить файлик именно в System32, нужно обращаться по имени Sysnative).
Затем регистрируем драйвер в системе и запускаем его:
А дальше запущенный драйвер создаёт виртуальный файл (кстати, та самая колонка "имя" в таблице с анализом дров), через запросы к которому и осуществляются дальнейшие действия:
И ещё одна полезная программа для ползания по системе, WinObj
Тоже ничего особенного, открываем файл и делаем ему IoCtl:
Вот здесь чутка подробнее. Я долго думал, как же обеспечить адекватную обработку ситуации, когда таких "скриптов" запущено несколько. Не останавливать драйвер при выходе нехорошо, в идеале нужно смотреть, не использует ли драйвер кто-то ещё и останавливать его только если наш скрипт "последний". Долгие упорные попытки получить количество открытых ссылок на виртуальный файл драйвера ни к чему не привели (я получал только количество ссылок в рамках своего процесса). Причём сама система точно умеет это делать - при остановке драйвера с открытым файлом, он остаётся висеть в "Pending Stop". Если у кого есть идеи - буду благодарен.
В конечном итоге я "подсмотрел", как это делают другие программы. Выяснилось, что большинство либо не заморачиваются, либо просто ищут запущенные процессы с тем же именем. Но одна из исследованных программ имела кардинально другой подход, который я себе и перенял. Вместо того, чтобы переживать по количеству ссылок на файл, просто на каждый запрос открываем и закрываем файл! А если файла нет, значит кто-то остановил драйвер и пытаемся его перезапустить:
А дальше просто реверсим драйвер и реализуем все нужные нам вызовы:
Легко и непринуждённо в пару команд читаем физическую память
PCI Express Config Space
Немного отвлечёмся на один нюанс про PCIE Config Space. С этим адресным пространством не всё так просто - со времён шины PCI для доступа к её конфигурационному пространству используется метод с использованием I/O портов 0xCF8 / 0xCFC. Он применён и в нашем драйвере AsrDrv101:
Чтение и запись PCI Config Space
Но через этот метод доступны только 0x100 байт конфигурационного пространства, в то время как в стандарте PCI Express размер Config Space у устройств может быть достигать 0x1000 байт! И полноценно вычитать их можно только обращением к PCI Extended Config Space, которая замаплена где-то в адресном пространстве, обычно чуть пониже BIOS:
Адресное пространство современного x86 компа, 0-4 ГБ
На чипсетах Intel (ну, в их большинстве) указатель на эту область адресного пространства можно взять из конфига PCI устройства 0:0:0 по смещению 0x60, подробнее описано в даташитах:
У AMD я такого не нашёл (наверняка есть, плохо искал), но сам факт неуниверсальности пнул меня в сторону поиска другого решения. Погуглив стандарты, я обнаружил, что указатель на эту область передаётся системе через ACPI таблицу MCFG
А сами ACPI таблицы можно найти через запись RSDP, поискав её сигнатуру по адресам 0xE0000-0xFFFFF, а затем распарсив табличку RSDT. Отлично, здесь нам и пригодится функционал поиска по памяти. Получаем нечто такое:
На всякий случай оставляем вариант для чипсетов Intel
Всё, теперь осталось при необходимости заменить чтение PCI Express Config Space через драйвер на чтение через память. Теперь-то разгуляемся!
Читаем BIOS
В качестве примера применения нашего "тулкита", попробуем набросать скрипт чтения BIOS. Он должен быть "замаплен" где-то в конце 32-битного адресного пространства, потому что компьютер начинает его исполнение с адреса 0xFFFFFFF0. Обычно в ПК стоит флеш-память объёмом 4-16 МБ, поэтому будем "сканировать" адресное пространство с адреса 0xFF000000, как только найдём что-нибудь непустое, будем считать, что тут начался BIOS:
В результате получаем:
Вот так в 10 строчек мы считали BIOS
Но подождите-ка, получилось всего 6 мегабайт, а должно быть 4 или 8 что-то не сходится. А вот так, у чипсетов Intel в адресное пространство мапится не вся флешка BIOS, а только один её регион. И чтобы считать всё остальное, нужно уже использовать SPI интерфейс.
Не беда, лезем в даташит, выясняем, что SPI интерфейс висит на PCI Express:
И для его использования, нужно взаимодействовать с регистрами в BAR0 MMIO по алгоритму:
Задать адрес для чтения в BIOS_FADDR
Задать параметры команды в BIOS_HSFTS_CTL
Прочитать данные из BIOS_FDATA
Пилим новый скрипт для чтения через чипсет:
Исполняем и вуаля - в 20 строчек кода считаны все 8 МБ флешки BIOS! (нюанс - в зависимости от настроек, регион ME может быть недоступен для чтения).
Точно так же можно делать всё, что заблагорассудится - делать снифер USB пакетов, посылать произвольные ATA команды диску, повышать частоту процессора и переключать видеокарты. И это всё - с обычными правами администратора:
Немного помучившись, получаем ответ от SSD на команду идентификации
А если написать свой драйвер?
Некоторые из вас наверняка уже подумали - зачем так изворачиваться, реверсить чужие драйвера, если можно написать свой? И я о таком думал. Более того, есть Open-Source проект chipsec, в котором подобный драйвер уже разработан.
Зайдя на страницу с кодом драйвера, вы сразу наткнетесь на предупреждение:
В этом предупреждении как раз и описываются все опасности, о которых я рассказывал в начале статьи - инструмент мощный и опасный, следует использовать только в Windows режиме Test Mode, и ни в коем случае не подписывать. Да, без специальной подписи на обычной системе просто так запустить драйвер не получится. Поэтому в примере выше мы и использовали заранее подписанный драйвер от ASRock.
Если кто сильно захочет подписать собственный драйвер - понадобится регистрировать собственную компанию и платить Microsoft. Насколько я нагуглил, физическим лицам такое развлечение недоступно.
Точнее я так думал, до вот этой статьи, глаз зацепился за крайне интересный абзац:
У меня под рукой нет Windows DDK, так что я взял 64-битный vfd.sys , скомпилированный неким critical0, и попросил dartraiden подписать его «древне-китайским способом». Такой драйвер успешно загружается и работает, если vfdwin запущена с правами администратора
Драйвер из статьи действительно подписан, и действительно неким китайским ключом:
Как оказалось, сведения о подписи можно просто посмотреть в свойствах.. А я в HEX изучал
Немного поиска этого имени в гугле, и я натыкаюсь на вот эту ссылку, откуда узнаю, что:
есть давно утёкшие и отозванные ключи для подписи драйверов
если ими подписать драйвер - он прекрасно принимается системой
малварщики по всему миру используют это для создания вирусни
Основная загвоздка - заставить майкрософтский SignTool подписать драйвер истёкшим ключом, но для этого даже нашёлся проект на GitHub. Более того, я нашёл даже проект на GitHub для другой утилиты подписи драйверов от TrustAsia, с помощью которого можно подставить для подписи вообще любую дату.
Несколько минут мучений с гугл-переводчиком на телефоне, и мне удалось разобраться в этой утилите и подписать драйвер одним из утекших ключей (который довольно легко отыскался в китайском поисковике):
И в самом деле, китайская азбука
И точно так же, как и AsrDrv101, драйвер удалось без проблем запустить!
А вот и наш драйвер запустился
Из чего делаю вывод, что старая идея с написанием своего драйвера вполне себе годная. Как раз не хватает функции маппинга памяти. Но да ладно, оставлю как TODO.
Выводы?
Как видите, имея права администратора, можно делать с компьютером практически что угодно. Будьте внимательны - установка утилит от производителя вашего железа может обернуться дырой в системе. Ну а желающие поэкспериментировать со своим ПК - добро пожаловать на низкий уровень! Наработки выложил на GitHub. Осторожно, бездумное использование чревато BSODами.
В Windows есть фича "Изоляция ядра", которая включает I/O MMU, защищает от DMA атак и так далее (кстати об этом - в следующих сериях)
Так вот, при включении этой опции, некоторые драйвера (в том числе RW Everything и китайско-подписанный chipsec_hlpr) перестают запускаться:
Читайте также: