Null driver что это
Мы защищаем некоторые из грядущих игр Riot с помощью новых систем для борьбы с жульничеством.
Внимание! Эта статья переполнена техническими подробностями, и в ней рассказывается об инструментах противодействия жульничеству, которые будут не только в League of Legends. В других играх (вроде "Проекта A") они появятся даже раньше, чем в Лиге.
Потратив на исследования около 8 лет и 20 миллионов долларов из государственного бюджета, ведущие ученые смогли установить, что жульничество было изобретено в период между 3,5 миллиардами лет до н. э. и 20 ноября 1985 года. Его точное происхождение до сих пор не определено, но одно известно наверняка: жулики будут всегда.
За последние 20 лет разработка инструментов для взлома и защиты от них переросла из благородной борьбы за контроль над памятью игрового клиента в технологии, которые модифицируют операционную систему – и даже "железо" – компьютера жулика. Современные методы жульничества могут помешать античитам получать необходимые данные, а если последним приходится работать в пользовательском режиме, ситуация еще больше усугубляется.
Что такое пользовательский режим?
Это самый ограниченный уровень привилегий в операционной системе, на котором может запускаться программное обеспечение. Браузер, честно купленный WinRAR и ваши любимые игры работают именно в пользовательском режиме. Такие программы не могут напрямую заглянуть во "внешний мир" вокруг себя – как правило, для чтения и записи данных вне собственных процессов их код должен полагаться на стандартные API операционной системы. Попробуем объяснить с помощью сравнения: если мы (в пользовательском режиме) хотим узнать, что именно было добавлено в наш говяжий гуляш (League of Legends), нам нужно обратиться к поварам на кухне (Microsoft Windows).
Если какой-то доморощенный гений заявит вам: "Лол, мой чит работает на 0-м уровне, его не засечь" – знайте, что он говорит именно об этом. И вот-вот улетит в бан.
В последние годы разработчики читов начали использовать уязвимости или взламывать инструменты проверки подписей Windows, чтобы запускать свои приложения (или их фрагменты) на уровне ядра. И у нас возникает проблема: код, выполняемый на этом уровне, может перехватывать системные вызовы, которые мы используем для получения данных. ПО жуликов меняет их таким образом, чтобы они казались нормальными, а нам сложно было что-то обнаружить. Мы даже видели специализированное аппаратное обеспечение, которое использует DMA 1 для чтения и обработки системной памяти – и если все сделано правильно, обнаружить такое вмешательство в пользовательском режиме невозможно 2 .
И хотя большинство игроков откажутся ставить модифицированную сборку Windows, практика показывает, что пугающее количество жуликов без раздумий готовы стать частью ботнета какого-то парня в обмен на способность атаковать на бегу. В итоге множество современных читов работают на более высоком уровне привилегий, чем наш античит. Вернемся к замечательной кухонной аналогии: когда вы спрашиваете шеф-повара о происхождении мяса в гуляше, какой-то мутный чувак убеждает руководство ресторана, что он "во всем разберется", и отвечает на наш вопрос: "Прямо с фермы, ешьте на здоровье".
1 DMA расшифровывается как "Direct Memory Access", то есть "прямой доступ к памяти". Это метод, с помощью которого аппаратное обеспечение может, как вы наверняка догадались, получить доступ сразу к памяти, минуя Windows API. Некоторые из самых продвинутых сообществ жуликов использовали его, чтобы перенаправлять память на отдельный компьютер для ее обработки и получения преимуществ в игре.
2 Мы тут же наняли того парня, который разработал методы обнаружения такого рода жульничества.
Зачем вы мне это рассказываете?
Исторически ваша любимая команда по противодействию жульничеству была вынуждена играть в эту игру на пользовательском уровне – и все равно не оставляла от жуликов мокрого места. Нам не приходилось идти на крайние меры благодаря преимуществу в виде стабильной зарплаты и отсутствию необходимости ложиться спать, когда скажет мама. Но как бы нам ни нравилась идея набирающей обороты войны с подростками на поле безопасности, мы теперь входим в мультиигровую вселенную, где линейность времени и какая-никакая потребность в сне поставят крест на этой стратегии.
Поэтому некоторые из будущих игр от Riot будут защищены драйвером режима ядра.
Мне уже начинать паниковать?
Есть целый ряд причин не делать этого.
- Стресс может привести к облысению, а мы не хотим, чтобы у вас мерзла голова.
- Это не дает нам никаких возможностей для слежки, которых не было раньше. Если бы нам нужен был секретный рецепт рождественской запеканки вашей бабушки, мы без проблем могли бы заполучить его и в пользовательском режиме, а затем продать в какое-нибудь кулинарное шоу. Цель этого обновления – следить за целостностью системы (чтобы мы могли доверять получаемым данным) и не давать жуликам вмешиваться в наши игры (чтобы вы не винили вражеское автоприцеливание в собственных неудачах).
- Это не новая технология. Некоторые сторонние системы для противодействия жульничеству – вроде EasyAntiCheat, Battleye и Xigncode3 – уже используют драйвер режима ядра для защиты ваших любимых ААА-игр. Мы просто устанавливаем собственного помощника шеф-повара на кухню Windows, чтобы, задавая вопрос "а это блюдо точно без глютена?", мы были уверены, что получим честный ответ.
- Теперь создавать читы, которые невозможно обнаружить, будет гораздо сложнее. Так что мы сможем защитить вас от автоприцеливания, себя от постов на Reddit, а жуликов от них же самих.
Античит – одна из важнейших составляющих многопользовательской сетевой игры, и мы хотим, чтобы вы играли в мире, в котором не придется ставить под сомнение способности ваших соперников. От жульнической лихорадки нет лекарства, но мы продолжим делать все возможное, чтобы обеспечить вам максимальное качество игры.
Передача завершена, но примерно через четыре мегасекунды я вернусь с продолжением нашего бестселлера "Борьба с жуликами в LoL", в котором расскажу о ботах в ваших играх ARAM.
Функция делетепринтердриверекс удаляет указанное имя драйвера принтера из списка имен поддерживаемых драйверов на сервере и удаляет файлы, связанные с драйвером. Эта функция также может удалять определенные версии драйвера.
Синтаксис
Параметры
Указатель на строку, завершающуюся нулем, которая указывает имя сервера, с которого должен быть удален драйвер. Если этот параметр имеет значение NULL, функция удаляет драйвер принтера с локального компьютера.
указатель на строку, завершающуюся нулем, которая указывает среду, из которой должен быть удален драйвер (например, Windows NT x86, Windows IA64 или Windows x64). Если этот параметр имеет значение NULL, имя драйвера удаляется из текущей среды вызывающего приложения и клиентского компьютера (не из целевого приложения и сервера печати).
Указатель на строку с завершающим нулем, указывающую имя драйвера для удаления.
Параметры удаления файлов и версий драйвера. Этот параметр может принимать одно или несколько следующих значений.
Значение | Значение |
---|---|
DPD _ удалить _ определенную _ версию | Удаляет версию, указанную в двверсионфлаг. Это не гарантирует, что драйвер будет удален из списка поддерживаемых драйверов для сервера. |
DPD _ удалить _ неиспользуемые _ файлы | Удаляет все неиспользуемые файлы драйверов. |
DPD _ удалить _ все _ файлы | Удаляет драйвер только в том случае, если все связанные с ним файлы могут быть удалены. Операция удаления завершается ошибкой, если какие либо файлы драйвера используются другим установленным драйвером. |
Если _ _ не указана DPD удалить определенную _ версию, функция удаляет все версии драйвера, если ни одна из них не используется. Если ни один из DPD _ _ не удаляет неиспользуемые _ файлы или DPD не _ _ _ указан, функция не удаляет файлы драйверов.
Версия удаляемого драйвера. Этот параметр может иметь значение 0, 1, 2 или 3. Этот параметр используется только в том случае, если двделетефлаг включает _ флаг DPD удаления _ определенной _ версии.
Возвращаемое значение
Если функция выполнена, возвращаемое значение будет ненулевым.
Если функция выполняется неудачно, возвращается нулевое значение.
Remarks
Это блокирующая или синхронная функция, которая может не возвращать значение немедленно. Скорость возврата этой функцией зависит от факторов времени выполнения, таких как состояние сети, Конфигурация сервера печати и факторы реализации драйвера принтера, которые трудно предсказать при написании приложения. Вызов этой функции из потока, который управляет взаимодействием с пользовательским интерфейсом, может привести к невозможности реагирования приложения.
Прежде чем функция удалит файлы драйверов, она вызывает функцию дрвдриверевент драйвера, позволяя драйверу удалить все закрытые файлы, которые не используются. дополнительные сведения о дрвдриверевент см. в пакете sdk для Microsoft Windows Driver Kit (DDK).
Если файлы драйверов загружены в данный момент, функция переместит их в каталог TEMP и помечает их для удаления при перезапуске.
Перед вызовом делетепринтердриверекс необходимо удалить все объекты принтера, использующие драйвер принтера.
Последнее обновление: 07/01/2021 [Время на прочтение:
Файлы SYS, такие как null.sys, классифицируются как файлы Win64 EXE (Драйвер). Как файл NULL Driver он был создан для использования в Microsoft® Windows® Operating System от компании Microsoft.
Первая версия null.sys для Windows Vista была представлена 11/08/2006 в Windows Vista. 07/04/2011 вышла версия 10.0.16299.371 (WinBuild.160101.0800) для Microsoft Office Access 2010 14. Файл null.sys включен в версии ОС Windows 10, Windows 8.1 и Windows 8.
В этой короткой статье приводятся подробные сведения о файле, шаги по устранению проблем SYS с null.sys и список бесплатных загрузок для каждой версии, содержащейся в нашем полном каталоге файлов.
Совместимость с Windows 10, 8, 7, Vista, XP и 2000
Средняя оценка пользователей
Сведения о разработчике и ПО | |
---|---|
Разработчик ПО: | Microsoft Corporation |
Программа: | Microsoft® Windows® Operating System |
Авторское право: | © Microsoft Corporation. All rights reserved. |
Сведения о файле | |
---|---|
Набор символов: | Unicode |
Код языка: | English (U.S.) |
Флаги файлов: | (none) |
Маска флагов файлов: | 0x003f |
Точка входа: | 0x6010 |
Размер кода: | 1536 |
Информация о файле | Описание |
---|---|
Размер файла: | 7.0 kB |
Дата и время изменения файла: | 2020:03:04 14:21:48+00:00 |
Тип файла: | Win64 EXE |
Тип MIME: | application/octet-stream |
Предупреждение! | Possibly corrupt Version resource |
Тип компьютера: | AMD AMD64 |
Метка времени: | 2015:04:10 16:14:16+00:00 |
Тип PE: | PE32+ |
Версия компоновщика: | 14.10 |
Размер кода: | 1536 |
Размер инициализированных данных: | 4608 |
Размер неинициализированных данных: | 0 |
Точка входа: | 0x6010 |
Версия ОС: | 10.0 |
Версия образа: | 10.0 |
Версия подсистемы: | 10.0 |
Подсистема: | Native |
Номер версии файла: | 10.0.16299.371 |
Номер версии продукта: | 10.0.16299.371 |
Маска флагов файлов: | 0x003f |
Флаги файлов: | (none) |
Файловая ОС: | Windows NT 32-bit |
Тип объектного файла: | Driver |
Подтип файла: | 7 |
Код языка: | English (U.S.) |
Набор символов: | Unicode |
Наименование компании: | Microsoft Corporation |
Описание файла: | NULL Driver |
Версия файла: | 10.0.16299.371 (WinBuild.160101.0800) |
Внутреннее имя: | null.sys |
Авторское право: | © Microsoft Corporation. All rights reserved. |
Название продукта: | Microsoft® Windows® Operating System |
Версия продукта: | 10.0.16299.371 |
✻ Фрагменты данных файлов предоставлены участником Exiftool (Phil Harvey) и распространяются под лицензией Perl Artistic.
Null.sys — ошибки «синего экрана» (BSOD)
Существует ряд причин, по которым вы можете столкнуться с проблемами с null.sys. Большинство проблем с файлами SYS связаны с ошибками «синего экрана» (BSOD). Эти типы ошибок null.sys могут быть вызваны аппаратными проблемами, устаревшей прошивкой, поврежденными драйверами или другими проблемами, связанными с программным обеспечением (например, обновление Microsoft Office Access 2010). В число этих ошибок входят:
- Не удается найти null.sys.
- Не удалось загрузить null.sys.
- Файл null.sys отсутствует или поврежден.
- Windows не удалось запустить — null.sys.
Обнаружена проблема, в результате которой ОС Windows завершила работу, чтобы предотвратить повреждение компьютера. По всей видимости, причиной проблемы стал следующий файл: null.sys.
:( На вашем ПК возникла проблема, которую не удалось устранить, и его необходимо перезагрузить. Сведения об ошибке можно найти в Интернете: [BSOD] (null.sys).
STOP 0x0000000A: IRQL NOT LESS EQUAL (null.sys)
STOP 0×0000007A: KERNEL DATA INPAGE (null.sys)
STOP 0x0000003B: SYSTEM SERVICE EXCEPTION (null.sys)
STOP 0x00000050: PAGE FAULT IN A NONPAGED AREA (null.sys)
STOP 0x0000001E: KMODE EXCEPTION NOT HANDLED (null.sys)
STOP 0x0000007E: SYSTEM THREAD EXCEPTION NOT HANDLED (null.sys)
Крайне важно устранять ошибки «синего экрана»
В большинстве случаев ошибки BSOD null.sys возникают после установки нового оборудования, программного обеспечения (Microsoft Office Access 2010) или выполнения неудачного обновления Windows. В остальных случаях к ошибке «синего экрана» null.sys может привести повреждение программного обеспечения, вызванное заражением вредоносным программным обеспечением. Таким образом, крайне важно, чтобы антивирус постоянно поддерживался в актуальном состоянии и регулярно проводил сканирование системы.
СОВЕТ ОТ СПЕЦИАЛИСТА: Как показывает опыт, целесообразно всегда создавать резервную копию системы Windows и (или) точку восстановления системы, прежде чем вносить какие-либо изменения в аппаратное или программное обеспечение на компьютере. Таким образом, в случае неблагоприятного поворота событий и возникновения связанной с файлом null.sys ошибки «синего экрана» после недавних изменений можно восстановить систему в предыдущее состояние.
Шаг 1. Восстановите компьютер до последней точки восстановления, «моментального снимка» или образа резервной копии, которые предшествуют появлению ошибки.
Чтобы начать восстановление системы (Windows XP, Vista, 7, 8 и 10):
Если на этапе 1 не удается устранить ошибку null.sys, перейдите к шагу 2 ниже.
Шаг 2. Если вы недавно установили приложение Microsoft Office Access 2010 (или схожее программное обеспечение), удалите его, затем попробуйте переустановить Microsoft Office Access 2010.
Чтобы удалить программное обеспечение Microsoft Office Access 2010, выполните следующие инструкции (Windows XP, Vista, 7, 8 и 10):
После полного удаления приложения следует перезагрузить ПК и заново установить Microsoft Office Access 2010.
Если на этапе 2 также не удается устранить ошибку null.sys, перейдите к шагу 3 ниже.
Microsoft Office Access 2010 14
Шаг 3. Выполните обновление Windows.
Если ни один из предыдущих трех шагов по устранению неполадок не разрешил проблему, можно попробовать более агрессивный подход (примечание: не рекомендуется пользователям ПК начального уровня), загрузив и заменив соответствующую версию файла null.sys. Мы храним полную базу данных файлов null.sys со 100%-ной гарантией отсутствия вредоносного программного обеспечения для любой применимой версии Microsoft Office Access 2010 . Чтобы загрузить и правильно заменить файл, выполните следующие действия:
Windows 10: C:\Windows\System32\drivers\Windows 10: C:\Windows\Temp\527D94AF-D053-4381-B105-0D815D53791E\amd64_microsoft-windows-null_31bf3856ad364e35_10.0.16299.371_none_b6ce3ac485e12238\
Windows 10: C:\Windows\WinSxS\amd64_microsoft-windows-null_31bf3856ad364e35_10.0.16299.15_none_cc52196f8c217df1\
Windows 8.1: C:\Windows\System32\drivers\
Windows 8: C:\Windows\System32\drivers\
Показать на 4 каталогов больше + Windows 7: C:\Windows\System32\drivers\
Windows Vista: C:\Windows\System32\drivers\
Windows XP: C:\WINDOWS\system32\dllcache\
Windows XP: C:\Windows\System32\drivers\
Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.
Оригинал: "Device Drivers, Part 5: Character Device Files — Creation & Operations"Автор: Anil Kumar Pugalia
Дата публикации: April 1, 2011
Перевод: Н.Ромоданов
Дата перевода: июнь 2012 г.
Эта статья является продолжением серии статей о драйверах устройств в Linux. В ней обсуждаются вопросы, касающиеся символьных драйверов и их реализации.
В моей предыдущей статье я упоминал, что даже при регистрации диапазона устройств <major, minor> , файлы устройств в директории /dev не создаются — Светлана должна была создать их вручную с помощью команды mknod . Но при дальнейшем изучении Светлана выяснила, что файлы устройств можно создавать автоматически с помощью демона udev . Она также узнала о втором шаге подключения файла устройства к драйверу устройства — связывание операций над файлом устройства с функциями драйвера устройства. Вот что она узнала.
Автоматическое создание файлов устройств
Ранее, в ядре 2.4, автоматическое создание файлов устройств выполнялось самим ядром в devfs с помощью вызова соответствующего API. Однако, по мере того, как ядро развивалось, разработчики ядра поняли, что файлы устройств больше связаны с пользовательским пространством и, следовательно, они должны быть именно там, а не в ядре. Исходя из этого принципа, теперь для рассматриваемого устройства в ядре в /sys только заполняется соответствующая информация о классе устройства и об устройстве. Затем в пользовательском пространстве эту информацию необходимо проинтерпретировать и выполнить соответствующее действие. В большинстве настольных систем Linux эту информацию собирает демон udev, и создает, соответственно, файлы устройств.
Демон udev можно с помощью его конфигурационных файлов настроить дополнительно и точно указать имена файлов устройств, права доступа к ним, их типы и т. д. Так что касается драйвера, требуется с помощью API моделей устройств Linux, объявленных в <linux/device.h> , заполнить в /sys соответствующие записи. Все остальное делается с помощью udev . Класс устройства создается следующим образом:
Затем в этот класс информация об устройстве (<major, minor>) заносится следующим образом:
Здесь, в качестве first указывается dev_t . Соответственно, дополняющими или обратными вызовами, которые должны вызыватся в хронологически обратном порядке, являются:
Посмотрите на рис.1 на записи /sys , созданные с помощью chardrv — запись <device class name> ( <имя класса устройств> ) и с помощью mynull — запись <device name format> ( <формат имени устройства> ). Здесь также показан файл устройства, созданный с помощью udev по записи <major>:<minor> , находящейся в файле dev .
Рис.1: Автоматическое создание файла устройства
В случае, если указаны несколько младших номеров minor, API device_create() и device_destroy() могут вызываться в цикле и в этом случае окажется полезной строка <device name format> ( <формат имени устройства> ). Например, вызов функции device_create() в цикле с использованием индекса i будет иметь следующий вид:
Операции с файлами
Независимо от того, что системные вызовы (или, в общем случае, операции с файлами), о которых мы рассказываем, применяются к обычным файлам, их также можно использовать и с файлами устройств. Т.е. мы можем сказать: если смотреть из пользовательского пространства, то в Linux почти все является файлами. Различие - в пространстве ядра, где виртуальная файловая система (VFS) определяет тип файла и пересылает файловые операции в соответствующий канал, например, в случае обычного файла или директория - в модуль файловой системы, или в соответствующий драйвер устройства в случае использования файла устройства. Мы будем рассматривать второй случай.
Затем передадим эту структуру в VFS с помощью вызова cdev_add() . Обе операции cdev_init() и cdev_add() объявлены в <linux/cdev.h> . Естественно, что также надо закодировать фактические операции с файлами ( my_open , my_close , my_read , my_write ).
Итак, для начала, давайте все это сделаем как можно проще - скажем, максимально просто в виде "null драйвера".
null - драйвер
Светлана повторила обычный процесс сборки, добавив при этом некоторые новые проверочные шаги, а именно:
- Собрала драйвер (файл .ko ) с помощью запуска команды make .
- Загрузила драйвер с помощью команды insmod .
- С помощью команды lsmod получила список всех загруженных модулей.
- С помощью команды cat /proc/devices . получила список используемых старших номеров major.
- Поэкспериментировала с "null драйвером" (подробности смотрите на рис.2).
- Выгрузила драйвер с помощью команды rmmod .
Рис.2: Эксперименты с "null драйвером"
Подведем итог
Светлана олпределенно была довольна; она сама написала символьный драйвер, который работает точно также, как и стандартный файл устройства /dev/null . Чтобы понять, что это значит, проверьте пару <major, minor> для файла /dev/null , а также выполните с ним команды echo и cat .
Но Светлану стала беспокоить одна особенность. В своем драйвере она использовала свои собственные вызовы ( my_open , my_close , my_read , my_write ), но, к удивлению, они, в отличие от любых других вызовов файловой системы, работают таким необычным образом. Что же тут необычного? Необычно, по крайней мере с точки зрения обычных файловых операций, то, что чтобы Светлана не записывала, при чтении она ничего не могла получить. Как она сможет решить эту проблему? Читайте следующую статью.
Читайте также: