Windows sysnative

Sysnative папка в Windows 64-битной объяснил

Windows sysnative

С выпуском 64-разрядной версии Windows 7 в обычное распределение папок в каталоге Windows были внесены небольшие изменения. В 64-разрядную версию Windows 7, Windows 8 и Windows 10 включены две новые папки.

Это папки Sysnative и SysWOW64 . Это только в 64-битной Windows. Если вы используете 32-битную Windows на 64-битной машине, вы их не увидите.

Также вы не увидите их при запуске 32-битной Windows на 32-битной машине.

За пределами каталога Windows есть еще одна папка, которая называется Program Files (x86) . Мы привыкли к имени папки Program Files, в которой находятся исполняемые файлы наших программ.

В 64-разрядных системах 64-разрядные программы хранятся в папке Program Files, а 32-разрядные программы – в Program Files (x86). Однако Windows использует нечто вроде эмуляции для запуска 32-разрядных программ на 64-разрядной машине.

И, следовательно, необходимо знать и понимать, какие системные папки в Windows (64-разрядные), чтобы вы знали, как получить нужный файл.

В отличие от 32-разрядных компьютеров, где 32-разрядные библиотеки DLL хранятся в папке System32 , 64-разрядная версия Windows хранит библиотеки DLL, связанные с 64-разрядными файлами, в папке System32.

Это облегчает программирование и обеспечивает обратную совместимость. То есть, если 64-битная программа ссылается на System32 в своем коде, она автоматически получит 64-битную DLL при вызове.

Это помогает разработчикам, поскольку им не нужно менять код в своих программах для Windows 64-bit.

Короче говоря, Windows переместила все 32-разрядные библиотеки DLL из папки System32 в каталоге Windows в какую-то другую папку, так что предыдущие программы не нужно перекодировать, чтобы получить нужные библиотеки DLL даже при использовании API – после обновления до 64-разрядной. Проблема возникает, когда 32-разрядное приложение пытается получить доступ к папке System32. В этом случае произойдет сбой программы, так как она не написана для обработки 64-битных DLL.

Папка SysWOW64 в 64-битной Windows

Все 32-разрядные библиотеки DLL были перемещены в новую папку SysWOW64 в 64-разрядной версии Windows 7, Windows 8 и Windows 10, поэтому, когда 32-разрядные программы вызывают 32-разрядные библиотеки DLL , они должны добраться до папки SysWOW64.

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

Если это 32-разрядная программа, которая вызывает C: \ Windows \ System32 , эмулятор перенаправит путь к C: \ Windows \ SysWOW64 .

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

Sysnative Folder в 64-битной Windows

Могут быть случаи, когда 32-битной программе или приложению может потребоваться 64-битная DLL. В этом случае вам придется использовать папку перенаправления Sysnative . Вы можете считать SysNative виртуальной папкой и псевдонимом, указывающим на папку System32. Он не существует физически в вашей системе как таковой.

Поэтому, если вашей 32-разрядной программе требуется доступ к 64-разрядной библиотеке DLL, не используйте C: \ Windows \ System32 , поскольку эмулятор 32-разрядной программы перенесет ее в 32-разрядную папку DLL, которая называется SysWOW64. Вместо этого используйте C: \ Windows \ SysNative в качестве пути к программе DLL.

Использование Sysnative в пути перенаправит его в папку System32 вместо папки SysWOW64.

Если вы откроете File Windows Explorer, вы не найдете папку Sysnative в C: \ Windows. Даже если вы установили параметры папки, чтобы показать скрытые и системные папки. Это связано с тем, что Windows File Explorer является 64-битной программой при работе в 64-битной Windows, а папка Sysnative видима и доступна только для 32-битных программ.

Подводя итог:

  1. Папки System32 содержат 64-битные файлы DLL.
  2. SysWOW64 содержит 32-разрядные файлы DLL, а 32-разрядные программы автоматически перенаправляются в эту папку
  3. Sysnative – это папка перенаправления, которая позволяет 32-разрядным программам вызывать 64-разрядные библиотеки DLL.

Дополнительное чтение: MSDN.

Хотите узнать разницу между папками System32 и SysWOW64?

Источник: https://techarks.ru/windows/sysnative-papka-v-windows-64-bitnoj-obyasnil/

Папка WinSxS — зачем она нужна и можно ли ее удалить?

Windows sysnative

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

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

Папка WinSxS является одной из первых директорий, на которую обращают внимание пользователи, а все из-за ее размера. Что это за папка? Можно ли безопасно очистить или удалить WinSxS, и как это правильно сделать?

WinSxS — служебная папка, которая появилась еще в Windows Vista, и присутствует во всех последующих версиях операционной системы. Полный путь к папке: C:\Windows\WinSxS. Увидеть ее можно, если включить отображение скрытых файлов и папок в параметрах папок (вкладка «Вид»).

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

Например, если вышло очередное забагованное обновление или эти самые изменения чем-то не понравились.

Содержимое WinSxS используется в откате операционной системы к первоначальным настройкам, а также необходимо для работы Windows.

Учитывая специфику каталога, со временем он будет интенсивно расширяться.

Обновления приходят регулярно, тем более сам пользователь часто вносит различные изменения в работу операционной системы. Если оптимизация каталога ранее не проводилась, или же процедура выполнялась давно, то размер папки легко может превысить отметки в 20 ГБ, но здесь есть один нюанс.

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

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

Если папка WinSxS занимает свыше 10 ГБ памяти, то чистка практически наверняка нужна.

С другой стороны, освободить место можно и при более скромных объемах.

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

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

  • сбои, вылеты и перезапуск компьютера;
  • проблемы с установкой обновлений;
  • проблемы с откатом изменений.

Удалять саму папку WinSxS или ее содержимое, как и любой другой системной директории, настоятельно не рекомендуется, но это не означает, что пользователю нужно смириться с ситуацией. Есть возможность уменьшить занимаемый ею объем памяти.

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

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

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

Встроенное средство очистки дисков в Windows

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

Инструкция по использованию встроенного средства очистки дисков в Windows.

  1. Зайти в папку «Компьютер», кликнуть правой клавишей на системном диске (диск C), выбрать пункт «Свойства», а затем нажать кнопку «Очистка диска», где нас интересует кнопка «Очистить системные файлы». Альтернативный вариант — прописать в командной строке (открытой от имени Администратора) следующую команду cleanmgr.
  2. В появившемся окне нужно поставить галочку возле пункта «Очистка файлов обновлений» и нажать «ОК».
  3. Дождаться завершения процедуры и выполнить перезагрузку.

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

Этот метод актуален для ОС Windows 8.1 и Windows 10. В Windows 7 данной опции изначально нет, но она появится при установке пакета обновлений KB2852386.

Утилита DISM.exe

Этот метод предполагает использование консоли. Его эффективность выше, и в результате можно освободить больше места.

Инструкция по использованию утилиты DISM.exe для очистки папки WinSxS.

  1. Открыть командную строку от имени Администратора и прописать в ней команду: Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore.
  2. Дождаться завершения анализа. Утилита оценит необходимость очистки директории, и в нашем примере в дальнейших действиях нет нужды, но нас, конечно же, это не остановит.
  3. Инициализируем очистку каталога следующей командой: Dism.exe /online /Cleanup-Image /StartComponentCleanup.
  4. Ждем, пока утилита выполняет необходимые действия.
  5. Готово.

Но это еще не все, что можно сделать при помощи утилиты DISM.exe. Другие полезные действия перечислены ниже.

  1. Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase — команда для удаления устаревших и неиспользуемых версий компонентов каталога.
  2. Dism.exe /online /Cleanup-Image /SPSuperseded — команда для сжатия пакетов обновлений.

Теперь можно полюбоваться результатом, еще раз вызвав команду Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore и сравнив результат с первым анализом. Кстати, данная команда не поддерживается в Windows 7.

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

Планировщик задач

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

Чтобы очистить папку WinSxS при помощи планировщика задач, нужно выполнить следующий порядок действий.

  1. Вызвать планировщик задач в меню «Выполнить» (Win+R) или в командной строке, используя команду taskschd.msc.
  2. В открывшемся окне слева открыть каталог «Microsoft», затем «Windows», и здесь найти «Servicing».
  3. Выбрать «StartComponentCleanup» и в меню справа кликнуть «Выполнить».
  4. В течение часа задача будет выполнена.

Преимущество метода в том, что пользователь может настроить автоматическую очистку папки WinSxS по расписанию и забыть о проблеме. Для этого нужно кликнуть правой клавишей мыши на задаче «StartComponentCleanup», выбрав пункт «Свойства», вкладку «Триггеры», а здесь настроить расписание процедуры.

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

В этом случае мы будем очищать неактивные компоненты. В будущем, при необходимости, их возможно восстановить.

  1. В командной строке, открытой от имени Администратора, прописываем следующее: DISM.exe /Online /English /Get-Features /Format:Table.
  2. Получаем список компонентов с указанием состояния (Enable / Disable).
  3. Чтобы удалить компонент, необходимо прописать команду DISM.exe /Online /Disable-Feature /featurename:XXX /Remove, где XXX — название компонента для удаления.

Посмотреть активные и неактивные компоненты Windows можно в разделе «Программы и компоненты», который находится по здесь: Панель управления\Программы\Программы и компоненты. Интересующий пункт находится в левой части окна. 

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

Воспользовавшись предложенными в статье способами, можно уменьшить размер WinSxS. Результат зависит от выбранного способа и того, как часто пользователь выполняет очистку системы от мусора. Как правило, интерес к папке WinSxS возникает при необходимости освобождения места на системном диске. А том, как это сделать можно прочитать здесь.

Источник: https://club.dns-shop.ru/blog/t-93-programmnoe-obespechenie/36072-papka-winsxs-zachem-ona-nujna-i-mojno-li-ee-udalit/

Sysnative можно ли удалить

Windows sysnative

11.02.2016  windows

Если вас смущает то, что папка WinSxS много весит и интересует вопрос о том, можно ли удалить ее содержимое, в этой инструкции подробно будет описан процесс очистки данной папки в Windows 10, 8 и Windows 7, а заодно расскажу, что это за папка и для чего она нужна и можно ли удалить WinSxS полностью.

В папке WinSxS хранятся резервные копии системных файлов операционной системы до обновлений (и не только, о чем — далее).

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

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

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

Также в Windows 10 папка WinSxS используется, например, для сброса Windows 10 в исходное состояние — т.е. необходимые для автоматической переустановки файлы берутся именно из нее.

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

Очистка папки WinSxS в Windows 10

Прежде чем говорить об очистке папки хранилища компонентов WinSxS, хочу предупредить о некоторых важных вещах: не пытайтесь удалить эту папку.

Просто довелось видеть пользователей, у которых папка WinSxS не удаляется, они используют методы, похожие на описанные в статье Запросите разрешение от TrustedInstaller и в конце-концов удаляют ее (или часть системных файлов из нее), после чего удивляются, почему система не загружается.

В Windows 10 папка WinSxS хранит не только файлы, связанные с обновлениями, но и файлы самой системы, используемые в процессе работы, а также для того, чтобы вернуть ОС в исходное состояние или выполнить некоторые операции, связанные с восстановлением.

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

  1. Запустите командную строку от имени администратора (например, через правый клик по кнопке Пуск)
  2. Введите команду Dism.exe /online /cleanup-image /AnalyzeComponentStore и нажмите Enter. Папка хранилища компонентов будет проанализирована и вы увидите сообщение о необходимости ее очистки. 
  3. Введите команду Dism.exe /online /cleanup-image /StartComponentCleanup и нажмите Enter для запуска автоматической очистки папки WinSxS. 

Один важный момент: не следует злоупотреблять этой командой.

В некоторых случаях, когда резервных копий обновления Windows 10 в папке WinSxS нет, после выполнения очистки, папка может даже слегка увеличиться. Т.е.

производить очистку есть смысл, когда указанная папка слишком, на ваш взгляд, разрослась (5-7 Гб — это не слишком).

Также очистку WinSxS можно произвести автоматически в бесплатной программе Dism++

Как очистить папку WinSxS в Windows 7

Для очистки WinSxS в Windows 7 SP1 требуется предварительно установить необязательное обновление KB2852386, которое добавляет соответствующий пункт в утилиту очистки диска.

Вот как это сделать:

  1. Зайдите в центр Обновления Windows 7 — это можно сделать через панель управления или воспользоваться поиском в меню пуск. 
  2. Нажмите «Поиск обновлений» в меню слева и подождите. После этого, кликните по необязательным обновлениям. 
  3. Найдите и отметьте необязательное обновление KB2852386 и установите его. 
  4. Перезагрузите компьютер.

После этого, для того, чтобы удалить содержимое папки WinSxS, запустите утилиту очистки диска (также, быстрее всего воспользоваться поиском), нажмите кнопку «Очистка системных файлов» и выберите пункт «Очистка обновлений Windows» или «Файлы резервной копии пакета обновлений».

Удаление содержимого WinSxS в Windows 8 и 8.1

В последних версиях ОС Windows возможность удалить резервные копии обновлений имеется в утилите очистки диска по умолчанию. То есть для того, чтобы удалить файлы в WinSxS, вам следует выполнить следующее:

  1. Запустить утилиту «Очистка диска». Для этого на начальном экране можете воспользоваться поиском. 
  2. Нажать кнопку «Очистка системных файлов»
  3. Выбрать пункт «Очистка обновлений Windows»

Помимо этого, в Windows 8.1 есть и еще один способ очистить эту папку:

  1. Запустите командную строку от имени администратора (для этого нажмите клавиши Win+X на клавиатуре и выберите нужный пункт меню).
  2. Введите команду dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Также, с помощью dism.exe вы можете точно узнать, сколько занимает папка WinSxS в Windows 8, для этого воспользуйтесь следующей командой:

dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Автоматическая очистка резервных копий обновлений в WinSxS

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

Для этого необходимо создать простую задачу StartComponentCleanup в Microsoft\Windows\Servicing с нужной периодичностью выполнения.

Надеюсь, статья будет полезной и предостережет от нежелательных действий. В случае возникновения вопросов — задавайте, постараюсь ответить.

А вдруг и это будет интересно:

Источник: https://remontka.pro/winsxs-windows/

Инструкция: Как очистить папку WinSxS в Windows, что это за папка и можно ли ее удалить

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

Тенденцией является отказ от жестких дисков и установка твердотельных накопителей малых объемов, специально под операционную систему. SSD диски стоят немало, и после установки на них Windows и пары программ, место может подойти к концу.

В такой ситуации пользователь может наткнуться на папку WinSxS, которая располагается в каталоге Windows. Ее размер может варьироваться от пары до десятков гигабайт.

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

WinSxS: что это за папка, и зачем она нужна

Перед тем как удалять одну из папок, которая находится в каталоге Windows, необходимо разобраться в ее предназначении.

Папка WinSxS присутствует в любой версии операционной системы, выше Windows 7. Ее задача – хранение резервных файлов операционной системы.

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

Уже через пару месяцев работы Windows, размер WinSxS начинает превышать гигабайт, а через год он может достигнуть показателя в 5 гигабайт и больше, в зависимости от частоты обновления операционной системы.

Ответ на вопрос «Можно ли удалить WinSxS?» довольно простой.

Файлы, хранящиеся внутри данной папки, удалять стоит в том случае, если после установленного обновления операционная система Windows работает стабильно.

Эти файлы в Windows 10 могут понадобиться не только для «отката» на версию Windows до обновления, но и для сброса операционной системы в исходное состояние.

Очистка WinSxS в Windows

Перед тем как приступить к процессу удаления содержимого папки WinSxS, следует предупредить, что стирать можно лишь некоторые данные, а не всю папку целиком.

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

Важно: Ни в коем случае не старайтесь удалять папку WinSxS целиком, предварительно заполучив разрешение на ее изменение от TrustedInstaller. Если при загрузке Windows не обнаружит на компьютере папку WinSxS, операционная система рискует не заработать.

Как очистить WinSxS в Windows 10

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

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

В Windows 10 для этих задач имеется специальный инструмент, который позволяет удалить лишние резервные копии из папки, но при этом не тронуть файлы восстановления системы до исходного состояния.

Очистка WinSxS в Windows 10 проводится следующим образом:

  1. Вызовите командную строку от имени администратора;
  2. Далее пропишите в ней команду: Dism.exe /online /cleanup-image /AnalyzeComponentStore и нажмите кнопку Enter. После этого операционная система Windows 10 начнет анализировать папку WinSxS на предмет наличия файлов, которые можно удалить;
  3. По окончанию анализа в командной строке будет обозначена рекомендация от Windows – необходимо очистить хранилище компонентов или нет;
  4. Если очистка от лишних данных рекомендуется, пропишите команду Dism.exe /online /cleanup-image /StartComponentCleanup и нажмите кнопку Enter. Данная команда запустит автоматический процесс очистки папки WinSxS в Windows 10 от лишних резервных копий.

Источник: https://ichudoru.com/sysnative-mozhno-li-udalit/

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

Windows sysnative

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

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

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

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

В архитектуре 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/

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

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

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