Как установить драйвер sys

Windows: достучаться до железа

Как установить драйвер sys

Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено…

Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя.

Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!

В чём суть, капитан?

В архитектуре 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)
  • Чтение CPUID
  • Alloc / Free физической памяти
  • Поиск по физической памяти

Самое нехорошее в такой ситуации – если подобный драйвер остаётся запущенным на ПК пользователя, для обращения к нему не нужно даже прав администратора! То есть любая программа с правами пользователя сможет читать и писать физическую память – хоть пароли красть, хоть ядро пропатчить.

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

Впрочем, любой мощный инструмент можно в нехороших целях использовать.

Через Python в дебри

Конечно же я захотел сделать свой небольшой “тулкит” для различных исследований и экспериментов на базе такого драйвера. Причём на Python, мне уж очень нравится, как просто выглядит реализация сложных вещей на этом языке.

Первым делом нужно установить драйвер в систему и запустить его. Делаем “как положено” и сначала кладём драйвер (нужной разрядности!) в System32:

#puts the driver into Windows/System32/drivers folderdef SaveDriverFile(self): winPath = os.environ['WINDIR'] sys32Path = os.path.join(winPath, “System32”) targetPath = os.path.join(sys32Path, “drivers\\” + self.name + “.sys”) file_data = open(self.file_path, “rb”).read() open(targetPath, “wb”).write(file_data)

Раньше в похожих ситуациях я извращался с папкой %WINDIR%\Sysnative, но почему-то на моей текущей системе такого алиаса не оказалось, хотя Python 32-битный. (по идее, на 64-битных системах обращения 32-битных программ к папке System32 перенаправляются в папку SysWOW64, и чтобы положить файлик именно в System32, нужно обращаться по имени Sysnative).

Затем регистрируем драйвер в системе и запускаем его:

#registers the driver for further startupdef RegisterDriver(self): serviceManager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS) driverPath = os.path.join(os.environ['WINDIR'], 'system32\\drivers\\' + self.name + '.sys') serviceHandle = win32service.CreateService(serviceManager,self.name,self.name, win32service.SERVICE_ALL_ACCESS, win32service.SERVICE_KERNEL_DRIVER, win32service.SERVICE_DEMAND_START, win32service.SERVICE_ERROR_NORMAL, driverPath, None,0,None,None,None) win32service.CloseServiceHandle(serviceManager) win32service.CloseServiceHandle(serviceHandle) #starts the driverdef RunDriver(self): win32serviceutil.StartService(self.name)

А дальше запущенный драйвер создаёт виртуальный файл (кстати, та самая колонка “имя” в таблице с анализом дров), через запросы к которому и осуществляются дальнейшие действия:

И ещё одна полезная программа для ползания по системе, WinObj

Тоже ничего особенного, открываем файл и делаем ему IoCtl:

#tries to open the driver by namedef OpenDriver(self): handle = win32file.CreateFile(“\\\\.\\” + self.name, win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL | win32file.FILE_FLAG_OVERLAPPED, None) if handle == win32file.INVALID_HANDLE_VALUE: return None return handle #performs IOCTL!def IoCtl(self, ioctlCode, inData, outLen=0x1100): out_buf = win32file.DeviceIoControl(self.dh,ioctlCode,inData,outLen,None) return out_bufВот здесь чутка подробнее. Я долго думал, как же обеспечить адекватную обработку ситуации, когда таких “скриптов” запущено несколько. Не останавливать драйвер при выходе нехорошо, в идеале нужно смотреть, не использует ли драйвер кто-то ещё и останавливать его только если наш скрипт “последний”.

Долгие упорные попытки получить количество открытых ссылок на виртуальный файл драйвера ни к чему не привели (я получал только количество ссылок в рамках своего процесса). Причём сама система точно умеет это делать – при остановке драйвера с открытым файлом, он остаётся висеть в “Pending Stop”.

Если у кого есть идеи – буду благодарен.

В конечном итоге я “подсмотрел”, как это делают другие программы. Выяснилось, что большинство либо не заморачиваются, либо просто ищут запущенные процессы с тем же именем.

Но одна из исследованных программ имела кардинально другой подход, который я себе и перенял.

Вместо того, чтобы переживать по количеству ссылок на файл, просто на каждый запрос открываем и закрываем файл! А если файла нет, значит кто-то остановил драйвер и пытаемся его перезапустить:

#perform IOCTL!def IoCtl(self, ioctlCode, inData, outLen=0x1100): #open driver file link driverHandle = self.OpenDriver() if driverHandle is None: self.ReinstallDriver() driverHandle = self.OpenDriver() #second try if driverHandle is None: return None #perform IOCTL out_buf = win32file.DeviceIoControl(driverHandle,ioctlCode,inData,outLen,None) #close driver file link win32file.CloseHandle(driverHandle) return out_buf

А дальше просто реверсим драйвер и реализуем все нужные нам вызовы:

class PmxInterface: def __init__(self): self.d = PmxDriver(“AsrDrv101”) def MemRead(self, address, size, access=U8): buf = ctypes.c_buffer(size) request = struct.pack(“

Источник: https://habr.com/ru/post/527006/

Как подписать драйвер в Windows x64 10/8.1/7 с помощью самоподписанного сертификата

Как установить драйвер sys

WinITPro.ru  /  Windows 10  /  Windows 7  /  Windows 8  /  Как подписать драйвер в Windows x64 10/8.1/7 с помощью самоподписанного сертификата

16.10.2018 itpro Windows 10, Windows 7, Windows 8 комментариев 50

Все 64 битные версии Windows, начиная с Windows 7, по умолчанию запрещают установку драйверов устройств, которые не подписаны с помощью корректной цифровой подписи.

Неподписанные драйвер блокируются операционной системой. Наличие цифровой подписи гарантирует (в какой-то мере), что драйвер выпущен конкретным разработчиком или вендором, а его код не был модифицирован после того, как он был подписан.

В Windows 10/7 x64 существует несколько способов отключить проверку цифровой подписи устанавливаемого драйвера: с помощью групповой политики или тестового режима загрузки системы (подробнее все способы описаны в статье Отключаем проверку цифровой подписи для установки неподписанных драйверов в Windows).

Сегодня мы покажем, как можно самостоятельно подписать любой неподписанный драйвер для 64 битной версии Windows 10 или Windows 7.

Предположим, что у нас имеется драйвер некого устройства для x64 Windows 10 или Windows 7, у которого отсутствует цифровая подпись (в нашем примере это будет драйвер для довольно старой видеокарты).

Архив с драйверами под нашу версию Windows (мне удалось найти драйвер для Windows Vista x64) был скачан с сайта производителя и его содержимое распаковано в каталог c:\tools\drv1\.

Попробуем установить драйвер, добавив его в хранилище драйверов Windows с помощью стандартной утилиты pnputil.

Pnputil –a “C:\tools\drv1\xg20gr.inf”

В процессе его установки Windows 7 отобразит предупреждение о том, что система не может проверить цифровую подпись данного драйвера.

В Windows 10 такое предупреждение даже не появляется, а в консоли появляется предупреждение, что в стороннем INF файле отсутствует информация о цифровой подписи.

При попытке установить драйвер из проводника Windows, если вы щелкните ПКМ по inf файлу драйвера и выберите Install / Установить появится ошибка:

The third-party INF does not contain digital signature information.

INF стороннего производителя не содержит информации о подписи.

Попробуем подписать данный драйвер с помощью самоподписанного сертификата.

Утилиты, необходимые для подписывания драйвера

Для работы нам понадобится скачать и установить (с настройками по умолчанию) следующие инструменты разработчика приложений для Windows.

  • Windows SDK (или Microsoft Visual Studio 2005 или выше) для вашей версии Windows – в состав этих пакетов входит Windows SDK Signing tools for Desktop, в которую включена необходимая нам утилита — signtool.exe;
  • Windows Driver Kit 7.1.0 — ISO образа  GRMWDK_EN_7600_1.ISO размером 649 Мб

Создаем самоподписанный сертификат и закрытый ключ

Создадим в корне диска каталог C:\DriverCert.

Откроем командную строку и перейдем в следующий каталог:

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin

Создадим самоподписанный сертификат и закрытый ключ, выданный, допустим, для компании Winitpro:

makecert -r -sv C:\DriverCert\myDrivers.p -n CN=”Winitpro” C:\DriverCert\MyDrivers.cer

Во время создания утилита попросит указать пароль для ключа, пусть это будет P@ss0wrd.

На основе созданного сертификата создадим публичный ключ для сертификата издателя ПО (PKCS).

cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc

Объединим публичный ключ (.spc) и персональный ключ (.p) в одном файле сертификата формата Personal Information Exchange (.pfx).

p2pfx -p C:\DriverCert\myDrivers.p -pi P@ss0wrd -spc C:\DriverCert\myDrivers.spc -pfx C:\DriverCert\myDrivers.pfx -po P@ss0wrd

Генерируем CAT файл драйвера

Создадим каталог C:\DriverCert\xg и скопируем в него все файлы из каталога, в который первоначально был распакован архив с драйвером (c:\tools\drv1\). Убедить что среди файлов имеются файлы с расширением .sys и .inf (в нашем случае xg20grp.sys и xg20gr).

Перейдем в каталог:

cd C:\WinDDK\7600.16385.1\bin\selfsign

На основе inf файла с помощью утилиты inf2cat.exe (входит в состав Windows Driver Kit -WDK) сгенерируем для нашей платформы cat файл (содержит информацию о всех файлах пакета драйвера).

inf2cat.exe /driver:”C:\DriverCert\xg” /os:7_X64 /verbose

Чтобы убедитесь, что процедура прошла корректно, проверьте, что в логе присутствуют сообщения:

Signability test complete.и

Catalog generation complete.

После выполнения команды в каталоге драйвера должен обновиться файл g20gr.cat

Подписываем драйвер самоподписанным сертификатом

Перейдите в каталог:

cd “C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64”

Подпишем комплект файлов драйвера созданным нами сертификатом, в качестве сервиса таймстампа (штамп времени) воспользуемся ресурсом Globalsign. Следующая команда подпишет CAT файл цифровой подписью с помощью сертификата, хранящегося в PFX-файл, защищенном паролем.

signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t http://timestamp.globalsign.com/scripts/timstamp.dll /v “C:\DriverCert\xg\xg20gr.cat”

Если файл подписан успешно, должна появится надпись:

Successfully signed: C:\DriverCert\xg\xg20gr.cat
Number of files successfully Signed: 1

Установка сертификата

Т.к. созданный нами сертификат является самоподписанным, система по-умолчанию ему не доверяет. Добавим наш сертификат в локальное хранилище сертификатов. Сделать это можно с помощью команд:

certmgr.exe -add C:\DriverCert\myDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:\DriverCert\myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER

Или из графического мастера добавления сертификатов (сертификат нужно поместить в хранилища TrustedPublishers и TrustedRootCertificationAuthoritiesлокальной машины). В домене вы можете централизованно распространить этот сертификат на рабочие станции с помощью групповой политики.

Установка драйвера, заверенного самоподписанным сертификатом

Попробуем еще раз установить подписанный нами драйвер, выполнив команду:

Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf

Теперь в процессе установки драйвера, окна-предупреждения об отсутствующей цифровой подписи драйвера не появится.

Successfully installed the driver on a device on the system.
Driver package added successfully.

В Windows 7 появляется такое предупреждение. о том, уверены ли вы, что хотите установить этот драйвер (в Windows 10 x64 1803 такое всплывающее окно не появляется). Нажав «Install», вы установите драйвер в системе.

Если по каким-то причинам драйвер не устанавливается, подробный лог установки драйвера содержится в файле C:\Windows\inf\setupapi.dev.log.

Этот лог позволит вам получить более подробную информацию об ошибке установки.

В большинстве случаем возникает ошибка «Driver package failed signature validation» — скорее всего это означает, что сертификат драйвера не добавлен в доверенные сертификаты.

Если установка драйвера прошла успешно, в файле setupapi.dev.log будут примерно такие строки:

>>>  [Device Install (DiInstallDriver) – C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181485ee80a\xg20gr.inf] >>>  Section start 2018/07/22 23:32:57.015
cmd: Pnputil  -i -a c:\DriverCert\xg\xg20gr.inf
ndv: Flags: 0x00000000
ndv: INF path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181485ee80a\xg20gr.inf
inf: {SetupCopyOEMInf: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181485ee80a\xg20gr.inf} 23:32:57.046
inf:      Copy style: 0x00000000
inf:      Driver Store Path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181485ee80a\xg20gr.inf
inf:      Published Inf Path: C:\WINDOWS\INF\oem23.inf
inf: {SetupCopyOEMInf exit (0x00000000)} 23:32:57.077

Источник: https://winitpro.ru/index.php/2014/05/08/kak-samostoyatelno-podpisat-drajver-dlya-windows-7/

Как принудительно поставить драйвер в Windows

Как установить драйвер sys

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

Это может быть старая версия OS, или старое устройство. В общем. иногда требуется установить драйверы вручную. Поставляются они обычно в виде нескольких файлов.

Чаще всего они имеют расширение inf или sys, но могут быть и другими.

Процедура установки драйвера в ОС Windows 10 зависит от того, каким именно способом вы его устанавливаете. Каждый способ имеет свои плюсы и минусы.

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

Помните, что самое важное – использовать драйвера из надёжных источников, чтобы не повредить операционную систему и случайным образом не запустить вирус, устранение которого займёт гораздо больше времени и сил, чем установка любого драйвера.

Что нужно для установки драйвера

Для того, чтобы установить драйвер вручную, нужен установочный диск или специальное программное обеспечение, которое поможет вам пошагово выполнить всю процедуру установки. Ниже мы рассмотрим одну из таких программ – Driver Easy. Бывают такие ситуации, когда по причине несовместимости драйвер с установочного диска выдаёт ошибку.

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

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

Установка драйвера вручную при помощи диспетчера устройств

1. Откройте панель управления Windows 10, нажав одновременно клавишу Win + X (клавиша Windows и клавиша X) и кликните левой кнопкой мыши на пункт «Панель управления»

2. Для удобства желательно настроить маленькие значки.

3. Кликните на «Диспетчер устройств».

В окне диспетчера устройств разверните категории и найдите нужное вам устройство. Затем щелкните правой кнопкой мыши на имя устройства и выберите «Обновить программное обеспечение драйвера». На фото приведён пример установки драйвера сетевого адаптера Realtek PCIe GBE Family Controller.

Перед обновлением драйвера настоятельно рекомендуется произвести резервное копирование данных. Это предотвратит нарушение работоспособности устройства при сбое установки.

1. В главном окне программы Driver Easy нажмите на драйвер устройства, нуждающегося в обновлении. После этого вы увидите стандартное окно диспетчера задач, о котором было написано выше. Выберите устройство для обновления.

2. Во всплывающем окне вы увидите два варианта. Нажмите «Обзор моего компьютера» для установки программного обеспечения драйвера.

3. Нажмите «Обзор», чтобы найти загруженный файл драйвера.

Нажмите в Driver Easy кнопку Down Triangle, затем выберите Open File Location, чтобы открыть папку с драйвером.

Для удобства вы можете скопировать и вставить местоположение загруженных файлов в поле.

Путь к файлу:

4. Нажмите кнопку «Далее», чтобы установить драйвер.

Как вы уже поняли, обновление занимает немало времени и требует базовых знаний работы с персональным компьютером.

Помимо обновления вручную, программа Driver Easy способна выполнять автоматический поиск, скачивание и установку всех драйверов, нуждающихся в обновлении.

Но, как мы уже и говорили, это небезопасно, так как эта функция работает в автоматическом режиме, и в этом случае невозможно сделать резервную копию на случай серьёзного сбоя.

Установка драйвера с компакт-диска или DVD-диска

Почти все производители компьютеров и оборудования поставляют в комплекте набор драйверов для разных аппаратных устройств.

Например, компакт-диск с драйверами, который идёт в комплекте с принтером, содержит драйверы для множества разных принтеров, а не только для того, который вы приобрели.

При установке драйверов убедитесь, что вы устанавливаете драйверы для своей модели принтера, а не для другой. Кроме того, убедитесь, что вы устанавливаете его для той версии Windows, которая установлена на вашем компьютере.

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

Если у вас есть компакт-диск с драйверами, но на компьютере нет дисковода или он не работает, вы также можете загрузить драйверы с USB-накопителя.

Установка драйверов с USB-накопителя

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

Убедитесь, что накопитель подключен к компьютеру, откройте проводник Windows и найдите в нём имя вашего устройства.

Например, если у вас есть USB-накопитель, которому при подключении назначен диск E:, то вам нужно кликнуть на значок с именем E: для того, чтобы открылось содержимое.

Как только драйверы будут обнаружены на диске, вы должны определить, каким именно образом они будут установлены на ваш компьютер. Если каталог содержит исполняемые файлы или файл установки (расширение *.exe), то вы можете установить драйвер с помощью этого файла. Если драйверы сжаты в ZIP-файл, вам необходимо распаковать файл при помощи таких архиваторов, как 7-Zip и WinZip.

Установка inf файла

Если приведенные выше рекомендации вам не помогли, то все инструкции по установке драйверов и аппаратных устройств всегда содержатся в файле с расширением .inf, который находится в папке C:Windowsinf.

Папка с файлами сведений защищена и является скрытой. Чтобы она отобразилась, в настройках вида папки поставьте галочку «Скрытые элементы».

Чтобы найти файл сведений нужного вам устройства, придерживайтесь следующей инструкции:

  • откройте диспетчер устройств;
  • кликните правой кнопкой мыши на выбранное устройство и выберите в меню «Свойства»
  • после этого перейдите на вкладку «Сведения». Раскройте список и выберите пункт «Имя INF». Название файла будет отображено в поле «Значение».
  • После того, как вы узнали имя файла, возвращайтесь в Диспетчер задач, выберите устройство, нажмите «Обновить драйвер» и укажите путь к файлу *.inf (в данном примере это будет C:Windowsinfoem3.inf).

    Источник

    Юрий созерцатель

    • Активность: 141k
    • Пол: Мужчина

    Юрий созерцатель

    Источник: https://pomogaemkompu.temaretik.com/1842659983666710619/kak-prinuditelno-postavit-drajver-v-windows/

    Поделиться:
    Нет комментариев

      Добавить комментарий

      Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.