Sttub30 sys что это за файл
DiSlord,
Доброго дня, спасибо за старание, спасибо за релиз!
Объясните пожалуйста для "танкистов" по этим пунктам:
Added harmonic threshold input- для чего этот вход и как его физически осуществить.
Added TCXO frequency input (allow prescision frequency calibration)- тут понятно для чего, но как физически осуществить тоже не ясно.
Added Vbat offset input- а для каких это целей?
Спасибо!
Экспернтые настройки:
Harmonic threshold - это пороговая частота после которой NanoVNA переключается на гармоники (ухудшается работа), генератор в нане SI5351 по даташиту работает до 200МГц. Но в целом большинство экземпляров может до 300МГц без особых проблем. Поэтому по дефолту стоит 300МГц. Но часть микросхем не может работать (или плохо работают около 300МГц), это видно если выставить диапазон 280-305МГц, отключить калибровку, если будут шумы/всплески. Надо посмотреть с какой частоты они начинаются, и ограничить верхний порог. Раньше для этого было необходимо подключение к компьютеру, вводить комманду в консоли. Сейчас это можно ввести в меню.
TCXO frequency - опорный ТСХО генератор для SI5351 имеет частоту 26МГц, и в целом довольно стабилен. Но если у вас есть хороший частотомер (желательна точность хотябы 1Гц на частоте 26МГц) вы можете откалибровать выход наны. Для этого выставте режим CW на частоту 26МГц, перейдите в экспертное меню, там введите TCXO = 26МГц, дайте нане и частотомеру прогреться (минут 15-20) замерте выходную частоту наны на канале CH0. Введите измеренную частоту как TCXO, после этого выход наны должен быть точно 26МГц. И в целом до 200МГц погрешность частоты будет минимальной. Это может быть полезно для точного измерения кварцев, или при плохом качестве TCXO наны
Vbat offset - это поправка для измерения напряжения батареи (выставьте в 0, затем переключите на экран версии, посмотрите какое напряжение батареи будет, замерте реальное напряжение батареи, и внесите эту поправку (напряжение батареи в милливольтах минус то что показано на экране в милливольтах))
SEPARATOR - это для внешнего ПО, чтобы нана выводила в консоль числа с плавающей точкой через запятую или точку (есть некоторые проблемы в внешним ПО которое криво работает с локалью)
Load config.ini - эта комманда запустит скрипт из файла config.ini с SD карты (в файле должны находится списки консольных комманд), это бывает полезным для восстановления настроек после сброса.
Clear config - делает сброс всех настроек к заводским.
Не забудте после внесения изменений сохранить конфиг
Добавлено через 17 минут(ы) :
Так же добавлена возможность изменить scale/ref текущего графика:
Кликая по красным зонам можно будет подвигать график вверх/вниз или увеличить/уменьшить масштаб
Так же добавлена возможность ввести шаг с которой будет меняться частота (опция JOG STEP в меню STIMULUS)
Теперь выбрав режим CW или START/STOP или CENTER/SPAN и кликнув по нужной частоте (перед ней появится >) рычагом можно менять эту частоту с заданным в JOG STEP шагом. (Еще одна опция - повторный клик по данной частоте вызовет экран ввода этой частоты).
Эта проблема может относиться к нескольким компьютерам, но в моем случае это была проблема с моим новым ноутбуком. Даже после распаковки мне не удалось активировать целостность памяти для изоляции ядра. На скриншоте выше видно, что это произошло из-за несовместимого водитель. В последних обновлениях Windows 10 вы можете щелкнуть синюю ссылку, чтобы просмотреть список несовместимых драйверы.
В большинстве случаев несовместимым драйвером является wdcsam64_prewin8.sys, драйвер Western Digital, входящий в состав Windows 10. Если вы щелкнете ссылку и в списке появится wdcsam64_prewin8.sys, выполните следующие действия, чтобы удалить этот драйвер, если он не нужен в вашей системе. .
В чем причина того, что не включена целостность памяти изоляции ядра?
Устранение сбоя целостности памяти изоляции ядра
Ноябрьское обновление 2021:
Теперь вы можете предотвратить проблемы с ПК с помощью этого инструмента, например, защитить вас от потери файлов и вредоносных программ. Кроме того, это отличный способ оптимизировать ваш компьютер для достижения максимальной производительности. Программа с легкостью исправляет типичные ошибки, которые могут возникнуть в системах Windows - нет необходимости часами искать и устранять неполадки, если у вас под рукой есть идеальное решение:
Удалите проблемный драйвер WD и удалите его из Магазина драйверов.
Проблема может быть вызвана повреждением драйвера на запоминающем устройстве WD (в основном внешнем). В этом случае удаление поврежденного драйвера может решить проблему.
- Выключите систему и подключите все оборудование (особенно диск WD), используемое в системе.
- Затем включите систему (лучше всего загрузить ее чисто) и войдите в систему с учетной записью администратора.
- Затем щелкните правой кнопкой мыши клавишу Windows и выберите «Диспетчер устройств» в меню доступа DeepL.
- Теперь разверните меню «Просмотр» и выберите «Показать скрытые устройства».
- Затем отключите устройство WD Ses (в разделе WD Drive Management). Также не забудьте отключить все устройства WD под устройствами хранения, жесткими дисками и другими устройствами (активными или скрытыми).
- Теперь удалите все устройства WD (которые были отключены на последнем шаге) и не забудьте установить флажок «Удалить программное обеспечение драйвера с этого устройства» во время удаления.
- Затем щелкните правой кнопкой мыши кнопку Windows и выберите «Приложения и компоненты».
- Теперь удалите все приложения, принадлежащие WD (например, Smartware, WD Backup и т. Д.).
- Затем щелкните правой кнопкой мыши кнопку Windows и выберите Проводник.
- Теперь перейдите по следующему пути (где C - ваш системный диск):
- Затем станьте владельцем (из системной учетной записи в учетную запись пользователя) файла wdcsam64_prewin8.sys (убедитесь, что вы предоставляете себе полный контроль), а если вы не можете стать владельцем, попробуйте стать владельцем в безопасном режиме вашей системы.
- Теперь удалите wdcsam64_prewin8.sys и повторите то же самое для всех других папок, начиная с WDCSAM.INF в папке FileRepository.
- Затем найдите wdcsam64_prewin8.sys в проводнике (выбрав этот компьютер) и удалите все файлы, найденные в результате поиска.
- Теперь проверьте, можете ли вы включить изоляцию ядра.
- Если нет, выключите систему и удалите все ненужные устройства (особенно устройства хранения WD).
- Затем включите систему и посмотрите, можно ли включить изоляцию ядра.
Часто задаваемые вопросы
Стоит ли включать изоляцию ядра?
Рекомендуется включить эту функцию, чтобы лучше защитить вашу систему. Однако, если вы включите его, вы можете столкнуться с проблемами совместимости и ошибками в некоторых системах, поэтому отключите его. Однако, если вы включаете его и все работает нормально, оставьте его включенным.
Как включить целостность памяти?
- Откройте Центр безопасности Защитника Windows.
- Щелкните «Безопасность устройства».
- В разделе «Изоляция ядра» щелкните ссылку «Сведения об изоляции ядра».
- Включите переключатель «Целостность памяти».
Что такое целостность памяти изоляции ядра?
Целостность памяти - это функция изоляции ядра. Включив параметр целостности памяти, вы можете предотвратить доступ вредоносного кода к высокозащищенным процессам в случае атаки.
Мне нужно включить целостность памяти?
Целостность памяти проверяет целостность кода, работающего в Windows, что делает Windows устойчивой к атакам вредоносных программ. Целостность памяти - это мощный рубеж безопасности, который помогает блокировать многие типы вредоносных программ, работающих в средах Windows 10 и Windows Server 2016 ».
Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено. Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!
В чём суть, капитан?
В архитектуре x86 есть понятие «колец защиты» («Ring») – режимов работы процессора. Чем ниже номер текущего режима, тем больше возможностей доступно исполняемому коду. Самым ограниченным «кольцом» является «Ring 3», самым привилегированным – «Ring -2» (режим SMM). Исторически сложилось, что все пользовательские программы работают в режиме «Ring 3», а ядро ОС – в «Ring 0»:
Режимы работы x86 процессора
В «Ring 3» программам запрещены потенциально опасные действия, такие как доступ к I/O портам и физической памяти. По логике разработчиков, настолько низкоуровневый доступ обычным программам не нужен. Доступ к этим возможностям имеют только операционная система и её компоненты (службы и драйверы). И всё бы ничего, но однажды я наткнулся на программу RW Everything:
RW Everything действительно читает и пишет практически всё
Эта программа была буквально напичкана именно теми функциями, которые обычно запрещаются программам «Ring 3» - полный доступ к физической памяти, I/O портам, конфигурационному пространству PCI (и многое другое). Естественно, мне стало интересно, как это работает. И выяснилось, что RW Everything устанавливает в систему прокси-драйвер:
Смотрим последний установленный драйвер через OSR Driver Loader
Прокси-драйвера
В итоге получается обходной манёвр – всё, что программе запрещено делать, разработчик вынес в драйвер, программа устанавливает драйвер в систему и уже через него программа делает, что хочет! Более того – выяснилось, что RW Everything далеко не единственная программа, которая так делает. Таких программ не просто много, они буквально повсюду. У меня возникло ощущение, что каждый уважающий себя производитель железа имеет подобный драйвер:
Софт для обновления BIOS (Asrock, Gigabyte, HP, Dell, AMI, Intel, Insyde…)
Софт для разгона и конфигурации железа (AMD, Intel, ASUS, ASRock, Gigabyte)
Софт для просмотра сведений о железе (CPU-Z, GPU-Z, AIDA64)
Софт для обновления PCI устройств (Nvidia, Asmedia)
Во многих из них практически та же самая модель поведения – драйвер получает команды по типу «считай-ка вот этот физический адрес», а основная логика – в пользовательском софте. Ниже в табличке я собрал некоторые прокси-драйвера и их возможности:
Результаты краткого анализа пары десятков драйверов. Могут быть ошибки!
Mem – чтение / запись физической памяти
PCI – чтение / запись PCI Configuration Space
I/O – чтение / запись портов I/O
Alloc – аллокация и освобождение физической памяти
Map – прямая трансляция физического адреса в вирутальный
MSR – чтение / запись x86 MSR (Model Specific Register)
Жёлтым обозначены возможности, которых явно нет, но их можно использовать через другие (чтение или маппинг памяти). Мой фаворит из этого списка – AsrDrv101 от ASRock. Он устроен наиболее просто и обладает просто огромным списком возможностей, включая даже функцию поиска шаблона по физической памяти (!!)
Неполный перечень возможностей AsrDrv101
Чтение / запись RAM
Чтение / запись IO
Чтение / запись PCI Configuration Space
Чтение / запись MSR (Model-Specific Register)
Чтение / запись CR (Control Register)
Чтение TSC (Time Stamp Counter)
Чтение PMC (Performance Monitoring Counter)
Alloc / Free физической памяти
Поиск по физической памяти
Самое нехорошее в такой ситуации - если подобный драйвер остаётся запущенным на ПК пользователя, для обращения к нему не нужно даже прав администратора! То есть любая программа с правами пользователя сможет читать и писать физическую память - хоть пароли красть, хоть ядро пропатчить. Именно на это уже ругались другие исследователи. Представьте, что висящая в фоне софтина, красиво моргающая светодиодиками на матплате, открывает доступ ко всей вашей системе. Или вирусы намеренно ставят подобный драйвер, чтобы закрепиться в системе. Впрочем, любой мощный инструмент можно в нехороших целях использовать.
Через Python в дебри
Конечно же я захотел сделать свой небольшой "тулкит" для различных исследований и экспериментов на базе такого драйвера. Причём на Python, мне уж очень нравится, как просто выглядит реализация сложных вещей на этом языке.
Первым делом нужно установить драйвер в систему и запустить его. Делаем "как положено" и сначала кладём драйвер (нужной разрядности!) в System32:
Раньше в похожих ситуациях я извращался с папкой %WINDIR%\Sysnative, но почему-то на моей текущей системе такого алиаса не оказалось, хотя Python 32-битный. (по идее, на 64-битных системах обращения 32-битных программ к папке System32 перенаправляются в папку SysWOW64, и чтобы положить файлик именно в System32, нужно обращаться по имени Sysnative).
Затем регистрируем драйвер в системе и запускаем его:
А дальше запущенный драйвер создаёт виртуальный файл (кстати, та самая колонка "имя" в таблице с анализом дров), через запросы к которому и осуществляются дальнейшие действия:
И ещё одна полезная программа для ползания по системе, WinObj
Тоже ничего особенного, открываем файл и делаем ему IoCtl:
Вот здесь чутка подробнее. Я долго думал, как же обеспечить адекватную обработку ситуации, когда таких "скриптов" запущено несколько. Не останавливать драйвер при выходе нехорошо, в идеале нужно смотреть, не использует ли драйвер кто-то ещё и останавливать его только если наш скрипт "последний". Долгие упорные попытки получить количество открытых ссылок на виртуальный файл драйвера ни к чему не привели (я получал только количество ссылок в рамках своего процесса). Причём сама система точно умеет это делать - при остановке драйвера с открытым файлом, он остаётся висеть в "Pending Stop". Если у кого есть идеи - буду благодарен.
В конечном итоге я "подсмотрел", как это делают другие программы. Выяснилось, что большинство либо не заморачиваются, либо просто ищут запущенные процессы с тем же именем. Но одна из исследованных программ имела кардинально другой подход, который я себе и перенял. Вместо того, чтобы переживать по количеству ссылок на файл, просто на каждый запрос открываем и закрываем файл! А если файла нет, значит кто-то остановил драйвер и пытаемся его перезапустить:
А дальше просто реверсим драйвер и реализуем все нужные нам вызовы:
Легко и непринуждённо в пару команд читаем физическую память
PCI Express Config Space
Немного отвлечёмся на один нюанс про PCIE Config Space. С этим адресным пространством не всё так просто - со времён шины PCI для доступа к её конфигурационному пространству используется метод с использованием I/O портов 0xCF8 / 0xCFC. Он применён и в нашем драйвере AsrDrv101:
Чтение и запись PCI Config Space
Но через этот метод доступны только 0x100 байт конфигурационного пространства, в то время как в стандарте PCI Express размер Config Space у устройств может быть достигать 0x1000 байт! И полноценно вычитать их можно только обращением к PCI Extended Config Space, которая замаплена где-то в адресном пространстве, обычно чуть пониже BIOS:
Адресное пространство современного x86 компа, 0-4 ГБ
На чипсетах Intel (ну, в их большинстве) указатель на эту область адресного пространства можно взять из конфига PCI устройства 0:0:0 по смещению 0x60, подробнее описано в даташитах:
У AMD я такого не нашёл (наверняка есть, плохо искал), но сам факт неуниверсальности пнул меня в сторону поиска другого решения. Погуглив стандарты, я обнаружил, что указатель на эту область передаётся системе через ACPI таблицу MCFG
А сами ACPI таблицы можно найти через запись RSDP, поискав её сигнатуру по адресам 0xE0000-0xFFFFF, а затем распарсив табличку RSDT. Отлично, здесь нам и пригодится функционал поиска по памяти. Получаем нечто такое:
На всякий случай оставляем вариант для чипсетов Intel
Всё, теперь осталось при необходимости заменить чтение PCI Express Config Space через драйвер на чтение через память. Теперь-то разгуляемся!
Читаем BIOS
В качестве примера применения нашего "тулкита", попробуем набросать скрипт чтения BIOS. Он должен быть "замаплен" где-то в конце 32-битного адресного пространства, потому что компьютер начинает его исполнение с адреса 0xFFFFFFF0. Обычно в ПК стоит флеш-память объёмом 4-16 МБ, поэтому будем "сканировать" адресное пространство с адреса 0xFF000000, как только найдём что-нибудь непустое, будем считать, что тут начался BIOS:
В результате получаем:
Вот так в 10 строчек мы считали BIOS
Но подождите-ка, получилось всего 6 мегабайт, а должно быть 4 или 8 что-то не сходится. А вот так, у чипсетов Intel в адресное пространство мапится не вся флешка BIOS, а только один её регион. И чтобы считать всё остальное, нужно уже использовать SPI интерфейс.
Не беда, лезем в даташит, выясняем, что SPI интерфейс висит на PCI Express:
И для его использования, нужно взаимодействовать с регистрами в BAR0 MMIO по алгоритму:
Задать адрес для чтения в BIOS_FADDR
Задать параметры команды в BIOS_HSFTS_CTL
Прочитать данные из BIOS_FDATA
Пилим новый скрипт для чтения через чипсет:
Исполняем и вуаля - в 20 строчек кода считаны все 8 МБ флешки BIOS! (нюанс - в зависимости от настроек, регион ME может быть недоступен для чтения).
Точно так же можно делать всё, что заблагорассудится - делать снифер USB пакетов, посылать произвольные ATA команды диску, повышать частоту процессора и переключать видеокарты. И это всё - с обычными правами администратора:
Немного помучившись, получаем ответ от SSD на команду идентификации
А если написать свой драйвер?
Некоторые из вас наверняка уже подумали - зачем так изворачиваться, реверсить чужие драйвера, если можно написать свой? И я о таком думал. Более того, есть Open-Source проект chipsec, в котором подобный драйвер уже разработан.
Зайдя на страницу с кодом драйвера, вы сразу наткнетесь на предупреждение:
В этом предупреждении как раз и описываются все опасности, о которых я рассказывал в начале статьи - инструмент мощный и опасный, следует использовать только в Windows режиме Test Mode, и ни в коем случае не подписывать. Да, без специальной подписи на обычной системе просто так запустить драйвер не получится. Поэтому в примере выше мы и использовали заранее подписанный драйвер от ASRock.
Если кто сильно захочет подписать собственный драйвер - понадобится регистрировать собственную компанию и платить Microsoft. Насколько я нагуглил, физическим лицам такое развлечение недоступно.
Точнее я так думал, до вот этой статьи, глаз зацепился за крайне интересный абзац:
У меня под рукой нет Windows DDK, так что я взял 64-битный vfd.sys , скомпилированный неким critical0, и попросил dartraiden подписать его «древне-китайским способом». Такой драйвер успешно загружается и работает, если vfdwin запущена с правами администратора
Драйвер из статьи действительно подписан, и действительно неким китайским ключом:
Как оказалось, сведения о подписи можно просто посмотреть в свойствах.. А я в HEX изучал
Немного поиска этого имени в гугле, и я натыкаюсь на вот эту ссылку, откуда узнаю, что:
есть давно утёкшие и отозванные ключи для подписи драйверов
если ими подписать драйвер - он прекрасно принимается системой
малварщики по всему миру используют это для создания вирусни
Основная загвоздка - заставить майкрософтский SignTool подписать драйвер истёкшим ключом, но для этого даже нашёлся проект на GitHub. Более того, я нашёл даже проект на GitHub для другой утилиты подписи драйверов от TrustAsia, с помощью которого можно подставить для подписи вообще любую дату.
Несколько минут мучений с гугл-переводчиком на телефоне, и мне удалось разобраться в этой утилите и подписать драйвер одним из утекших ключей (который довольно легко отыскался в китайском поисковике):
И в самом деле, китайская азбука
И точно так же, как и AsrDrv101, драйвер удалось без проблем запустить!
А вот и наш драйвер запустился
Из чего делаю вывод, что старая идея с написанием своего драйвера вполне себе годная. Как раз не хватает функции маппинга памяти. Но да ладно, оставлю как TODO.
Выводы?
Как видите, имея права администратора, можно делать с компьютером практически что угодно. Будьте внимательны - установка утилит от производителя вашего железа может обернуться дырой в системе. Ну а желающие поэкспериментировать со своим ПК - добро пожаловать на низкий уровень! Наработки выложил на GitHub. Осторожно, бездумное использование чревато BSODами.
В Windows есть фича "Изоляция ядра", которая включает I/O MMU, защищает от DMA атак и так далее (кстати об этом - в следующих сериях)
Так вот, при включении этой опции, некоторые драйвера (в том числе RW Everything и китайско-подписанный chipsec_hlpr) перестают запускаться:
я, конечно, понимаю, вопрос ламерский и глупый. но честно, понятия не имею, что это за файлы, для чего нужны и как появились (предположительно появились после установки игры Сегун2 Тотальная Война, но не уверен)
это дата-диск (не системный), соответственно на нем таких файлов быть не должно. хочу удалить их, но не знаю не испорчу ли чего
А зачем было в корень диска что-либо вообще устанавливать? А то это не вопрос ламерский, а действия изначально. Почему бы не в папочку отдельную для каждой софтинки утанавливать, как все нормальные люди?
Добавлено через 53 секунды
FeyFre
Оно их в корень диска само НЕ распаковывает при установке, это можно только вручную сделать
ПУК - Последняя Удачная Конфигурация.
(с) veroni4ka Штандартенфюрер СС, это баг инсталлятора vcredist_x86_2008.exe! Инсталлятор самораспаковывается не во временную папку, а куда-нибудь а пальцем мимо. Там очередной какой-нибудь багнутый SFX-ZIP, который должен был распаковать во временную папку пакет Windows Installer, и пнуть его. Между прочим, этот пакет при установке какраз и не спрашивает куда устанавливаться, ибо выбора всё-равно нет - только в WinSxS да и всё тут. Мелкомягки позже исправили это, но было уже поздно.
Так что не нужно человека учить зря, он никакими своими действиями не смог повлиять на это. (Не каждый юзер является нахватавшимся знаний что-бы заставить компоненты винды плясать под свою дудку).
Вот список файлов которые оно могло оставить и которые можно спокойно тереть.
ПУК - Последняя Удачная Конфигурация.
(с) veroni4ka Штандартенфюрер СС, да, Мелкомягкие баги иногда исправляют(о чудо!). У меня тоже ЭТО уже ложится в подобные директории(и тоже не затираются иногда), ибо я всё-таки нашел нормальный установщик.
Штандартенфюрер СС
всегда указываю пути куда что распаковать или установить. оно само так сделалось
Читайте также: