Rpcs driver что это
Ни разу не возился с эмуляторами, так что не знаю просто или нет. Но не проще ли купить б/у ПС3 с мгс4, пройти и продать за те же деньги?
Конечно проще, но я хочу сначала попробовать добиться вразумительного результата на компе.
Когда я окончательно устану бодаться с емулем, тогда и возьму 3-йку )
Обрадую: заебешься быстро, а нормальных результатов не будет. Проще взять сраку и сохранить себе тонну времени и нервов. К сожалению, до совместимости хотя бы на уровне эмулей PS2 ещё очень далеко
Не согласен . На системе Ryzen 5 3600x + rx 580 8 gb + 32 gb ram + dualshock 4 прошел mgs 4 и mgs hd collections ,the last of us, killzone 1,2,3, resistanse 1,2,3, call of duty 3, ( некоторые в 30 fps но вполне играбельно).
Блин, какой же кайф обмазываться гайдами, сборками эмулятора и играть в этом всём на плюс-минус современном компе, надеясь что оно не будет лагать. А потом радоваться парочке игр, которые ты плюс-минус адекватно прошёл.
Куда там до игры на самой консоли, где всё работает нормально уже по-дефолту, если образ не битый.
Может и так. Но меня кроме тех игр что я прошел другие не интересуют. Покупать консоль хоть и старую ради 12 игр. такое себе. А эмуляторы использую года с 2004. Теккен на эмуле 1 соньки. Так же ps2, gamecube, wii , psp. На каждой консоли есть что то интересное но ради пары игр покупать ее я не готов. Имхо.
Ради 12 игр не западло купить далеко. когда знаешь что продашь за теже деньги тем более она стоит не дорого.
Я хз как ты Резистанс 3 прошёл, его на более серьезном железе запускают для играбельности, и то он с большими косяками эмулируется
С багами. ФПС 25-30.
Спасибо за оптимистический настрой)
игру надо качать с кэшем
А откуда скачать такую версию?
Вбивай в поисковике Кэш для эмулятора и название игры. На сайте эмулятора много инфы было по этому вопросу. еще был вопрос с выбором между OPENGL и Vulcan в настройках видяхи
Эмулятор сам создает кэш. Есть два вида записи игр для эмулятора. Образ для ultra iso или деймона с которого нужно скопировать файлы, или файлы с расширением pkg их надо устанавливать через эмулятор.
Я играл пару лет назад на худшем ПК и было более менее норм (в районе 30 фпс), есть кстати образ mgs 4 с русским переводом на просторах интернета, если сейчас фризит то лучше подождать новую сборку эмуля или наоборот взять какую-нибудь предыдущую
Окей, буду иметь в виду, спасибо)
Есть какие каcтомные версии игры или емулятора или хоть что нибуть заточеное под MGS4
Да. И в гайдах в интернете что ты смотрел такое должно было упоминаться)
To download: Click on the latest entry on the page > Click on 3 Published > Hover your mouse over the 3 dotted vertical menu button > click Download artifacts
To use the build: Simply install it in a new/separate folder, do not merge it with your current RPCS3 folder. You don't need to adjust any configuration on this build either as they're preapplied (although, it is recommended that you update the game to 2.0 for the best results).
Should you still want to use the latest master, use the canary patch below to stop the game from crashing. This patch is a game specific hack so it won't be merged into the patch manager. You will require firmware 4.87 to be installed, and then copy/paste the patch into a new txt file. Rename it "imported_patch.yml" and place it in the patches folder within your RPCS3 directory.
Ну и если что игра всё ещё ingame. То есть она конечно работает, но до идеала далеко. ред.
Минимальные системные требования:
Операционная система: Windows 7/8/10 64-bit/ Linux 64-bit/BSD 64-bitПроцессор: любой 64-разрядный процессор и выше.
Память: 2 ГБ.
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.
Обзор гелевого принтера Ricoh Aficio SG 3110 DNw
Вы когда-нибудь слышали о гелевых принтерах? Вот и я слышал краем уха, но сталкиваться с ними в жизни не доводилось. А вот на прошлой неделе случилось не только воочию увидеть такое устройство, но и даже немного поработать с ним. Речь о принтере Ricoh Aficio SG 3110 DNw. Собственно, его обзор – под хабракатом.
Для начала – несколько слов о самой технологии гелевой печати. Принцип работы гелевого принтера схож со струйным, только вместо привычных чернил здесь применяется специальный красящий гель, обладающий высокой вязкостью и позволяющий на выходе получать отпечатки хорошего качества. Кроме того, из-за вязкости гель мгновенно высыхает при контакте с бумагой, и в результате химической реакции становится устойчивым к влаге и свету. К тому же, поскольку гель высыхает быстро, это существенно увеличивает скорость печати и позволяет сразу же печатать в дуплексе.
Сама модель достаточно компактна и может поместиться практически где угодно – на столе, тумбочке и т. д. Кроме того, удобство заключается в том, что все необходимое (лоток подачи, слот для выхода бумаги, элементы управления и информационный экран) находится на передней панели принтера. Это позволяет при необходимости поместить устройство в любую нишу и без помех работать с ним.
Принтер подключается к компьютеру для персонального использования с помощью USB-кабеля. Имеется и контроллер Ethernet для подключения к офисной сети. Кроме того, модель оснащена и встроенным беспроводным адаптером Wi-Fi – на это, кстати, указывает буква «w» в названии модели.
Доступ к отсеку с картриджами осуществляется также с фронтальной стороны принтера – справа открывается небольшая крышка. От картриджей к печатающим головкам идут специальные трубки, по которым и поступает гель. Установка и замена картриджей производится элементарно и не вызовет затруднений даже у пользователя, который первый раз в жизни увидел принтер. Кстати, предусмотрена возможность горячей замены картриджей даже во время непосредственно процесса печати. Дело в том, что в трубках остается еще достаточное количество геля, и принтер может продолжать печатать независимо от того, сколько и каких именно картриджей вы заменяете.
Самих картриджей в принтере 4: черный, циан (голубой), маджента (розовый) и желтый. Черный рассчитан на 2500 листов, цветные – на 2200. Довольно ресурсоемкие по сравнению со струйными картриджами, рассчитанными, как правило, на 600-700 копий. Правда, тут есть один тонкий момент: поскольку технология новая, заправлять картриджи гелем, по крайней мере, у нас, еще не умеют. Поэтому придется приобретать новые расходники. Стоимость картриджей – приблизительно $46 за черный и $43 за цветные картриджи. С другой стороны, стоимость примерно сопоставима с расходниками для струйного принтера. Ресурс гелевого картриджа ориентировочно равен ресурсу струйного с учетом трех заправок. Тем более, что в случае струйного картриджа после 3-4-х заправок все равно придется покупать новый расходник.
Трубки с гелем
Помимо стандартного лотка для подачи бумаги, на принтер можно «навесить» снизу еще два дополнительных лотка. Кроме того, на задней панели можно установить лоток прямой подачи, который позволяет подавать бумагу высокой плотности до 220 г/м (двухсторонняя печать через этот лоток не поддерживается).
Управление принтером осуществляется с помощью специальной панели, состоящей из кнопок навигации и информационного монитора. По умолчанию монитор показывает статус принтера – емкость и готовность каждого из картриджей, а также количество отработанного геля. В меню можно посмотреть счетчики отпечатанных документов, формат и тип бумаги, настроить системные опции, контролирующие поведение принтера. Кроме того, монитор выполняет роль своеобразного информационного табло, своевременно реагирующего на ошибки и оповещая о них пользователя.
Теперь о самой печати. Принтер может печатать в четырех режимах: Высокая скорость, Приоритет скорости, Приоритет Качества, Высокое качество. Высокоскоростной режим вполне подходит для большинства рабочих документов, разрешение 300х150 dpi, символы вполне читаемы, при этом скорость печати составляет до 29 страниц в минуту. В высоком качестве разрешение составляет 3600х1200 dpi, качество печати по виду сопоставимо с лазерным принтером, скорость печати – около 9-10 страниц в минуту. Два «промежуточных режима имеют скорости соответственно 15 и 22 страницы в минуту. Кроме того, для цветной печати имеется специальный режим Economy Color, позволяющий снизить расход геля. Отпечатки при этом получаются более бледные, но цвет сохраняют.
Запускаем игры
Шаг 2. Тут все зависит от типа вашей игры. Если в ней есть файл с разрешением “.pkg”, нажмите File -> Install PKG
Шаг 3. Если же у вас есть папка с игрой, ее надо перенести в dev_hdd0game
Шаг 4. Для некоторых игр может понадобится файл с разрешением “.rap”, его нужно поместить в |dev_hddo|home|00000001|exdata| .
Шаг 5. Дважды щелкните по иконке игры или выберите File ->Boot game. Дождитесь, когда закончится компиляция. По завершению, игра начнется автоматически.
Windows: достучаться до железа
Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено. Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!
Скачиваем эмулятор
Шаг 1. Для начала, нужно скачать последнюю версию RPCS3 для вашей операционной системыШаг 2 Теперь создадим папку и назовем ее RPCS3
Именно в эту папку мы распакуем файлы эмулятора
Драйвер — это просто
Многие считают что самому создать драйвер для 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 (синий экран смерти), поэтому экспериментируйте осторожно и обязательно всё сохраняйте перед запуском драйвера.
Выводы?
Как видите, имея права администратора, можно делать с компьютером практически что угодно. Будьте внимательны - установка утилит от производителя вашего железа может обернуться дырой в системе. Ну а желающие поэкспериментировать со своим ПК - добро пожаловать на низкий уровень! Наработки выложил на GitHub. Осторожно, бездумное использование чревато BSODами.
В Windows есть фича "Изоляция ядра", которая включает I/O MMU, защищает от DMA атак и так далее (кстати об этом - в следующих сериях)
Так вот, при включении этой опции, некоторые драйвера (в том числе RW Everything и китайско-подписанный chipsec_hlpr) перестают запускаться:
Устанавливаем прошивку
Шаг 2. А теперь пора эту самую прошивку установить. Возвращаемся к нашей папке, выбираем файл rpcs3.exe и соглашаемся со всеми условиями, которые предложит всплывающее окно
Шаг 3. Выбираем File -> Install Framerate и выбираем файл прошивки (PS3UPDAT.PUP) из локальных файлов.
Прокси-драйвера
В итоге получается обходной манёвр – всё, что программе запрещено делать, разработчик вынес в драйвер, программа устанавливает драйвер в систему и уже через него программа делает, что хочет! Более того – выяснилось, что 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 физической памяти
Поиск по физической памяти
Самое нехорошее в такой ситуации - если подобный драйвер остаётся запущенным на ПК пользователя, для обращения к нему не нужно даже прав администратора! То есть любая программа с правами пользователя сможет читать и писать физическую память - хоть пароли красть, хоть ядро пропатчить. Именно на это уже ругались другие исследователи. Представьте, что висящая в фоне софтина, красиво моргающая светодиодиками на матплате, открывает доступ ко всей вашей системе. Или вирусы намеренно ставят подобный драйвер, чтобы закрепиться в системе. Впрочем, любой мощный инструмент можно в нехороших целях использовать.
Как на PC запускать игры от PS3 — пошаговая инструкция по эмулятору RPCS3
RPCS3 — первый и единственный на сегодняшний день стабильный эмулятор Sony PlayStation 3. Работа на RPCS3 была начата в 2011 году и на сегодняшний день он способен запускать такие игры как Demon’s Souls, Red Dead Redemption, Persona 5, God of War 3, Spider-man 3.
Через Python в дебри
Конечно же я захотел сделать свой небольшой "тулкит" для различных исследований и экспериментов на базе такого драйвера. Причём на Python, мне уж очень нравится, как просто выглядит реализация сложных вещей на этом языке.
Первым делом нужно установить драйвер в систему и запустить его. Делаем "как положено" и сначала кладём драйвер (нужной разрядности!) в System32:
Раньше в похожих ситуациях я извращался с папкой %WINDIR%\Sysnative, но почему-то на моей текущей системе такого алиаса не оказалось, хотя Python 32-битный. (по идее, на 64-битных системах обращения 32-битных программ к папке System32 перенаправляются в папку SysWOW64, и чтобы положить файлик именно в System32, нужно обращаться по имени Sysnative).
Затем регистрируем драйвер в системе и запускаем его:
А дальше запущенный драйвер создаёт виртуальный файл (кстати, та самая колонка "имя" в таблице с анализом дров), через запросы к которому и осуществляются дальнейшие действия:
И ещё одна полезная программа для ползания по системе, WinObj
Тоже ничего особенного, открываем файл и делаем ему IoCtl:
Вот здесь чутка подробнее. Я долго думал, как же обеспечить адекватную обработку ситуации, когда таких "скриптов" запущено несколько. Не останавливать драйвер при выходе нехорошо, в идеале нужно смотреть, не использует ли драйвер кто-то ещё и останавливать его только если наш скрипт "последний". Долгие упорные попытки получить количество открытых ссылок на виртуальный файл драйвера ни к чему не привели (я получал только количество ссылок в рамках своего процесса). Причём сама система точно умеет это делать - при остановке драйвера с открытым файлом, он остаётся висеть в "Pending Stop". Если у кого есть идеи - буду благодарен.
В конечном итоге я "подсмотрел", как это делают другие программы. Выяснилось, что большинство либо не заморачиваются, либо просто ищут запущенные процессы с тем же именем. Но одна из исследованных программ имела кардинально другой подход, который я себе и перенял. Вместо того, чтобы переживать по количеству ссылок на файл, просто на каждый запрос открываем и закрываем файл! А если файла нет, значит кто-то остановил драйвер и пытаемся его перезапустить:
А дальше просто реверсим драйвер и реализуем все нужные нам вызовы:
Легко и непринуждённо в пару команд читаем физическую память
В чём суть, капитан?
В архитектуре 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
Читайте также: