Modem driver что это за драйвер

Обновлено: 07.07.2024

Что такое Софтмодем и чем нам это грозит? Комментарий

Начать следует, пожалуй, с мифов о невероятных требованиях к вычисительной мощности устройства (процессора), необходимых для реализации модемных протоколов связи, зародившихся еще во времена процессоров i8086. Как показывает реальная практика сегодняшнего дня — требования к ресурсам процессора составляют примерно 10% для процессора класса Pentium II 400 MHz и около 40% для процессора Pentium 200 MHz при полностью программном софтмодеме. HSP модемы с собственным DSP обеспечивают еще меньшую нагрузку. Таким образом, уже с появлением следующего поколения центральных процессоров эти цифры могут быть заметно снижены. Что касается утверждения о бОльших потенциальных возможностях аппаратных модемов в части реализации новых возможностей и протоколов — увы, практика показала иное — если владельцам модемов Courier удалось безболезненно проапгрейдить их для поддержки протокола V.90, (владельцам спортстеров пришлось доплатить некоторую сумму, в дополнение к уже уплаченной при покупке модема), то в большинстве случаев пользователь аппаратных модемов был вынужден покупать новое устройство, как это происходило, например, с достаточно дорогими модемами фирмы Zyxel при появлении протоколов V.32->V.34->V.34bis->V.90. При этом, у существующего модема могло не хватить всего лишь нескольких процентов вычислительной мощности, однако жесткая ограниченность аппаратного решения заставляла полностью отказываться от возможности апгрейда. Яркий пример — фирма Digicom Systems, выпустившая в свое время модем серии Connection 96. Перспективы обещали быть радужными — при первоначальной максимальной скорости в 9600bps через некоторое время вышла версия микропрограммы с поддержкой скорости 14400bps, обещалось светлое будущее в виде апгрейда до протокола V34. И вдруг все кончилось — вычислительной мощности ADSP2115 хватило лишь для реализации скорости 19200bps протокола V32Terbo. То есть сначала покупателя заманивают обещаниями апгрейдов и прочих приятных возможносей, затем все это оказывется блефом, приводящей к уплате очередной суммы денег за такой модем. Это наглядно показывает всю выгоду изготовления аппаратных модемов как для
производителей, так и для продавцов.

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

Примеры — модемы, собранные с использованием чипсетов STMicroelectronics 75xx, PCtel 1789N/W и Rockwell HCF/SoftK56, например, AZtech MSP3880.

Ко второй группе софтмодемов можно отнести DSP-based модели,имеющие полноценный DSP, но отсутствующий контроллер, занимающийся реализацией интерфейса AT-команд, и работой по управлению DSP и компрессии данных.

Требуемая производительность этого контроллера весьма незначительна, и может быть оценена примерно как 4-х кратная по отношению к процессору i8086, работающему на частоте 4.77 MHz.

Типичные примеры — модемы на чипсете Lucent 164x. Готовые модемы на их базе производят, например, фирмы Genius GM 56PCI-L, FIC GM56PCI, Paradise WaveCom 56K PCI.

Что касается вопроса об остающихся софтмодему недостаточных ресурсов при выполнении к примеру, приложений виртуальной Ява-машины — это не cовсем так, на самом деле, говорить здесь следует скорее об остающихся ресурсах процессора для выполнения приложений Win32 после того, как софтмодем уже отберет себе необходимую для работы часть процессорного времени, так как в отличие от этих приложений драйвер модема работает с приоритетом ядра системы и процессорного времени может не хватить, например самой программе, выполняющей прием данных от модема и сохраняющей их на диске в виде файла. Также разработчиками фирм Motorola и Smart Link предприняты и запатентованы некоторые методы для предотвращения возможных проблем с драйверами софтмодемов, более того - программисты Motorola утверждают, что им удалось добиться обработки критических событий модема в режиме реального времени. Так же считают и специалисты фирмы Rockwell, реализовавшие технологию Latency Guard. Правда, нельзя не отметить — такие способы требуют скорее подготовки хакера, чем системного программиста, однако это связано с недостатками самой системы Windows, и другого выхода здесь просто нет.

Таким образом — сложности с падением скорости передачи данных при обычной работе с компьютером являются скорее надуманными, чем имеют под собой реальную основу. Что касается экстремального случая с возможным монопольным захватом ресурсов центрального процессора некорректно написанной программой — это, конечно же, приведет к разрыву связи софтмодемом, а аппаратный модем приостановит процесс приема-передачи данных. Кстати, при длительных задержках в этом процессе аппаратный модем связь конечно не разорвет, но вот сбои в протоколах верхнего уровня (например TCP/IP) не исключены — что также вполне может привести к необходимости повторного установления соединения. В связи с этим хочется обратить внимание вот на что: аппаратные модемы обеспечивают более высокую скорость передачи данных, чем софтмодемы, в том числе и из-за сравнительно неотработанных драйверов для последних, и разрыв может достигать в отдельных случаях сотен CPS. И здесь возникает еще одна проблема, близкая Российскому пользователю, работающему с повременной оплатой услуг Internet — при достаточно длительной работе с софтмодемом (месяцы, годы) экономия на его покупке может оказаться мнимой — если пользователь в основном занимается приемом/передачей файлов значительных обьемов, разница в оплате услуг интернет-провайдера при работе с аппаратным и софтмодемом может составить значительную сумму денег — и не в пользу последнего.

Касательно не всегда корректной рекламы — хотелось бы привести еще и такой пример — в качестве одного из преимуществ софтмодемов для переносных ПК, выполненных в виде PC CARD или MDC (Mobile Daughter Card) преподносится и существенная экономия энергоресурсов, связанная с тем, что у таких модемов ток потребления действительно чрезвычайно мал — это связано прежде всего с минимальной степенью интеграции применяемых в этом случае чипов. Однако скромно умалчивается о том, что для выполнения загрузки файлов аппаратному модему могут потребоваться лишь минимальные ресурсы процессора — к примеру, работающий в режиме энергосбережения на частоте 8MHz процессор ноутбука вполне справится с этой задачей, в то время как для нормальной работы софтмодема потребуется примерно пятикратное ее увеличение — в результате вместо экономии энергии получим ее повышенный расход.

Относительно сложностей защиты программного обеспечения при разработке собственных или доработке уже имеющихся драйверов для софтмодемов: действительно, вариант с драйверами для Российских телефонных линий не лишен привлекательности хотя бы потому, что при наличии исходных текстов драйверов от производителя их доработка сильно упрощается применением популярного и давно изученного кода x86 — нет необходимости изучать систему команд и сталкиваться с различными ограничениями специализированных контроллеров — как в случае с аппаратными модемами.

В связи с упоминанием автором статьи необходимости наличия в ПК звуковой карты для реализации голосовых возожностей софтмодема: в данном случае аппаратные модемы не имеют никаких преимуществ перед софтмодемами — разьемы для подключения телефонной гарнитуры имеются как на большинстве внутренних аппаратных модемов с поддержкой голосовых функций, так и на многих софтмодемах — таким образом никакой необходимости в наличии звуковой карты не возникает, если же имеются в виду внешние аппаратные модемы со встроенным качественным динамиком и микрофоном — то таких моделей — единицы. В случае с модемами AMR это также неверно — несмотря на отсутствие как гнезд для телефонной гарнитуры, так и в большинстве случаях встроенного динамика, эти модемы устанавливаются в слот материнских плат, уже имеющих AC-кодек, и, соответственно, разьемы на материнской плате для подключения внешних источников сигнала.

Что касается перспектив шины ISA — здесь явно ощущается прессинг, причем с двух сторон — как производителей чипсетов (Intel) так и операционных систем. Насколько мне известно — в версии OC Microsoft Millennium2000 поддержка шины ISA просто не предусмотрена — да и будут ли производители материнских плат в течении длительного времени идти на дополнительные затраты для установки недешевого моста PCI/ISA — сказать однозначно нельзя. Сегодня при принятии решения о покупке внутреннего модема на шине ISA покупателю следует весьма серьезно задуматься об оправданности такого шага, и в первую очередь рассмотреть возможные альтернативы.

О необходимости драйверов для софтмодемов — на мой взгляд,не стоит заострять на этом внимания, и не следует рассматривать как что-то экстраординарное — софтмодем такое же устройство, как например звуковая или видеокарта, и, по многочисленным откликам людей, использующих софтмодемы — те же звуковые карты, выпущенные сравнительно недавно, создают не меньше проблем, связанных с совместимостью и устойчивостью работы системы в целом. Возвращаясь же к надежности аппаратных модемов — из-за ошибок firmware они могут иногда просто зависать, и если для внешних модемов проблема решалась повторным включением питания — для возобновления работы внутренних моделей приходилось уже выключать весь ПК, что нередко случалось, например, с ранними версиями модемов USR Sportster на базе TMS.

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

2. Необходим осторожный подход при выборе полных софтмодемов, например, на чипах SiLabs, STMicroelectronics (драйверы фирмы Smart Link) — эти модемы могут создать неоправданные трудности как при установлении связи, так и при работе на линиях невысокого качества, а также отсутствием реализованной в настоящее время в драйверах упомянутой фирмы эмуляции COM-порта для работы в окне DOS операционной системы Windows.

3. Пользователь должен быть готов к возможным конфликтам оборудования при установке таких модемов и знать пути их решения — как показывают отклики читателей — наиболее частые проблемы - конфликты со звуковой картой при неверном распределении IRQ в системе, проблемы при конфигурации как адреса, так и прерывания модема для работы на необходимом COM-порту, установка модема в соседний с AGP слот PCI, отсутствие установленной поддержки PCI IRQ для не-Intel чипсетов (VIA, SiS, и т.п.) либо устаревшая версия драйверов для самого модема.

4. В некоторых случаях, в поставку с модемами в OEM-исполнении могут не входить, например, драйверы для OC Windows NT, как это бывает в случае с модемами Zoltrix Phantom. Это также требует от пользователя некоторых знаний для самостоятельного получения свежих версий ПО с сайта производителя.

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

Собственно, как и обещал, начинаю цикл статей о подсистеме NDIS и о том, что с ней связано. Решил связать его с процессом собственного обучения на своей первой работе. Если цикла не получится, значит меня загрузили по самые уши, или вообще уволился.

Вступление

Для чего, вообще этот NDIS? Зачем его придумали, если и всё и так хорошо?

NDIS — это одна из подсистем ядра Windows, которая имеет прямое отношение к спектру начиная от драйверов сетевых карт и заканчивая интерфейсами для протоколов сетевого уровня. NDIS состоит из т.н. стека драйверов (хотя, как по мне, так это никакой не стек, а очередь), но для общего понимания лучше представлять себе это так:

image

Хорошо, но мне этого мало!

  • Драйвер должен себя зарегистрировать. Это означает то, что драйвер при загрузке указывает ядру, чтО он есть на самом деле и какого он типа;
  • Драйвер должен предоставлять минимальный набор интерфейсных функций, которые он предоставляет NDIS'у. Собственно, за эти функции NDIS и будет тягать этот самый драйвер;
  • Так же драйвер дожен, в зависимости от своего типа, реализовать функции управления собой, которые так же тягаются во время выполнения. Отличие от предыдущего пункта в том, что эти функции для каждого типа драйвера уникальные.
  • Драйверы минипорта;
  • Драйверы протокола;
  • Промежуточные драйверы;
  • Драйверы-фильтры.

Зачастую на практике пишутся драйверы-фильтры и промежуточные драйверы, т.к. в остальных потребность есть у небольшого круга компаний выпускающих собственные сетевые решения. Во времена XP разработчики часто использовали промежуточные драйверы (потому, что фильтров не было), начиная с Windows Vista лучше использовать фильтры, т.к. они проще в своём устройстве и основную функцию (а для нас это практически во всех случаях — модификация трафика) выполняют «на ура». Итак, как мы помним, «сверху» NDIS'a у нас протоколы (IP, IPX, ARP, RARP, etc.), а снизу сетевые карты. На этом промежутке мы будем выполнять свои магические заклинания над трафиком.

Разберемся с тем, чем именно отличаются драйверы-фильтры и промежуточные драйверы. Итак, когда трафик движется в сеть, т.е. от протокола к сетевой карте, он проходит через очередь пользовательских драйверов, которую сформировал NDIS. В самой середине этой очередь (честно, не знаю как найти середину, если в очереди 3 драйвера, однако с MSDN'ом не поспоришь) NDIS располагает промежуточные драйвера. Эти драйверы выстраиваются в свою очередь по неизвестному алгоритму, однако NDIS гарантирует, что трафик пройдёт через каждый драйвер в «стеке». Промежуточный драйвер представляет собой обманку, «сверху», т.е. для драйверов, которые располагаются над ним, он выглядит как минипорт (хотя настоящие минипорты еще далеко внизу), а «снизу» выглядит как протокол (протоколы далеко вверху). Т.о. промежуточный драйвер является прозрачным, и зачастую его используют не для фильтрации или модификации трафика, а для «рассылки» трафика одного протокола нескольким минипортам (они же интерфейсы сетевых карт). Ну, или, наоборот: рассылки трафика сетевой карты по нескольким протоколам.

  • Драйвер-монитор, не подвергает трафик изменению, но может его «воровать»;
  • Драйвер-модификатор, полный контроль над трафиком, меняй, удаляй, добавляй своё — что угодно.

Из названия понятно какая между ними разница, однако стоит отметить, что при установке оба драйвера устанавливаются и «работают» нормально. Т.е. если вы написали функции слежения, то трафик вы увидите. Однако, драйвер-модификатор в некоторых случаях потребует перезагрузки. Если перезагрузки не будет, то мониторить трафик вы сможете, а, допустим, ронять пакеты — нет. Функциональная особенность.

Теперь разберемся с местом драйверов-фильтров в очереди. Положение в очереди определяется назначением драйвера. Назначение драйвера (обычное назначение, т.е. для чего этот драйвер используется) устанавливается на этапе установки в его .INF файле. Полный список назначений я не приведу, но примерно картину обрисую. Допустим драйвер предназначается для сжатия трафика, для этого мы в .INF файле укажем «compression», так же есть назначение «encryption», ну или «Custom».

Тут можно ознакомиться со всем списком. Скажу так же, что custom — самые нижележащие драйверы, а, например, scheduler — самые «верхние».


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

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

В архитектуре x86 есть понятие «колец защиты» («Ring») – режимов работы процессора. Чем ниже номер текущего режима, тем больше возможностей доступно исполняемому коду. Самым ограниченным «кольцом» является «Ring 3», самым привилегированным – «Ring -2» (режим SMM). Исторически сложилось, что все пользовательские программы работают в режиме «Ring 3», а ядро ОС – в «Ring 0»:

Режимы работы x86 процессора

Режимы работы x86 процессора

В «Ring 3» программам запрещены потенциально опасные действия, такие как доступ к I/O портам и физической памяти. По логике разработчиков, настолько низкоуровневый доступ обычным программам не нужен. Доступ к этим возможностям имеют только операционная система и её компоненты (службы и драйверы). И всё бы ничего, но однажды я наткнулся на программу RW Everything:

RW Everything действительно читает и пишет практически всё

RW Everything действительно читает и пишет практически всё

Эта программа была буквально напичкана именно теми функциями, которые обычно запрещаются программам «Ring 3» - полный доступ к физической памяти, I/O портам, конфигурационному пространству PCI (и многое другое). Естественно, мне стало интересно, как это работает. И выяснилось, что RW Everything устанавливает в систему прокси-драйвер:

Смотрим последний установленный драйвер через OSR Driver Loader

Смотрим последний установленный драйвер через 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

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

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

Вот здесь чутка подробнее. Я долго думал, как же обеспечить адекватную обработку ситуации, когда таких "скриптов" запущено несколько. Не останавливать драйвер при выходе нехорошо, в идеале нужно смотреть, не использует ли драйвер кто-то ещё и останавливать его только если наш скрипт "последний". Долгие упорные попытки получить количество открытых ссылок на виртуальный файл драйвера ни к чему не привели (я получал только количество ссылок в рамках своего процесса). Причём сама система точно умеет это делать - при остановке драйвера с открытым файлом, он остаётся висеть в "Pending Stop". Если у кого есть идеи - буду благодарен.

В конечном итоге я "подсмотрел", как это делают другие программы. Выяснилось, что большинство либо не заморачиваются, либо просто ищут запущенные процессы с тем же именем. Но одна из исследованных программ имела кардинально другой подход, который я себе и перенял. Вместо того, чтобы переживать по количеству ссылок на файл, просто на каждый запрос открываем и закрываем файл! А если файла нет, значит кто-то остановил драйвер и пытаемся его перезапустить:

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

Легко и непринуждённо в пару команд читаем физическую память

Легко и непринуждённо в пару команд читаем физическую память

PCI Express Config Space

Немного отвлечёмся на один нюанс про PCIE Config Space. С этим адресным пространством не всё так просто - со времён шины PCI для доступа к её конфигурационному пространству используется метод с использованием I/O портов 0xCF8 / 0xCFC. Он применён и в нашем драйвере AsrDrv101:

Чтение и запись PCI Config Space

Чтение и запись PCI Config Space

Но через этот метод доступны только 0x100 байт конфигурационного пространства, в то время как в стандарте PCI Express размер Config Space у устройств может быть достигать 0x1000 байт! И полноценно вычитать их можно только обращением к PCI Extended Config Space, которая замаплена где-то в адресном пространстве, обычно чуть пониже BIOS:

Адресное пространство современного x86 компа, 0-4 ГБ

Адресное пространство современного 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

Вот так в 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 на команду идентификации

Немного помучившись, получаем ответ от SSD на команду идентификации

А если написать свой драйвер?

Некоторые из вас наверняка уже подумали - зачем так изворачиваться, реверсить чужие драйвера, если можно написать свой? И я о таком думал. Более того, есть Open-Source проект chipsec, в котором подобный драйвер уже разработан.

Зайдя на страницу с кодом драйвера, вы сразу наткнетесь на предупреждение:

В этом предупреждении как раз и описываются все опасности, о которых я рассказывал в начале статьи - инструмент мощный и опасный, следует использовать только в Windows режиме Test Mode, и ни в коем случае не подписывать. Да, без специальной подписи на обычной системе просто так запустить драйвер не получится. Поэтому в примере выше мы и использовали заранее подписанный драйвер от ASRock.

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

Точнее я так думал, до вот этой статьи, глаз зацепился за крайне интересный абзац:

У меня под рукой нет Windows DDK, так что я взял 64-битный vfd.sys , скомпилированный неким critical0, и попросил dartraiden подписать его «древне-китайским способом». Такой драйвер успешно загружается и работает, если vfdwin запущена с правами администратора

Драйвер из статьи действительно подписан, и действительно неким китайским ключом:

Как оказалось, сведения о подписи можно просто посмотреть в свойствах.. А я в HEX изучал

Как оказалось, сведения о подписи можно просто посмотреть в свойствах.. А я в HEX изучал

Немного поиска этого имени в гугле, и я натыкаюсь на вот эту ссылку, откуда узнаю, что:

есть давно утёкшие и отозванные ключи для подписи драйверов

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

малварщики по всему миру используют это для создания вирусни

Основная загвоздка - заставить майкрософтский SignTool подписать драйвер истёкшим ключом, но для этого даже нашёлся проект на GitHub. Более того, я нашёл даже проект на GitHub для другой утилиты подписи драйверов от TrustAsia, с помощью которого можно подставить для подписи вообще любую дату.

Несколько минут мучений с гугл-переводчиком на телефоне, и мне удалось разобраться в этой утилите и подписать драйвер одним из утекших ключей (который довольно легко отыскался в китайском поисковике):

И в самом деле, китайская азбука

И в самом деле, китайская азбука

И точно так же, как и AsrDrv101, драйвер удалось без проблем запустить!

А вот и наш драйвер запустился

А вот и наш драйвер запустился

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

Выводы?

Как видите, имея права администратора, можно делать с компьютером практически что угодно. Будьте внимательны - установка утилит от производителя вашего железа может обернуться дырой в системе. Ну а желающие поэкспериментировать со своим ПК - добро пожаловать на низкий уровень! Наработки выложил на GitHub. Осторожно, бездумное использование чревато BSODами.

В Windows есть фича "Изоляция ядра", которая включает I/O MMU, защищает от DMA атак и так далее (кстати об этом - в следующих сериях)


Так вот, при включении этой опции, некоторые драйвера (в том числе RW Everything и китайско-подписанный chipsec_hlpr) перестают запускаться:

Агрегация - дорого? Собираем бюджетно или Набор юного агрегатора OpenWrt/Rooter – обсуждение

Прикрепленное изображение
Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

  1. "Нужно ли обновлять прошивку?" - если вас устраивает работа модема на текущей прошивке, то смысла обновлять НЕТ
  2. Чтобы ощутить все "прелести" агрегации, необходима нормальная широкополосная антенна. За подробностями идем в тему Антенна для LTE






    | Два | Три
    | Два
    | для модуля и USB
    ,
    Для лентяев: пытаться заводить в таком порядке - QMI, MBIM, NCM, ECM, RNDIS, PPP
    | Два ,
    По мнению ребят из микродрайв СимКом внимания не заслуживает, они за ep06.

  • Q: Нет коннекта
    A1: Проверить APN! Если неверный или пусто, может не работать.
    A2: Проверить симку (баланс, ограничение на раздачу и тип устройства)
    A3: Проверить разрешенные бэнды

  • Q: Какой нужен переходник М.2
    A: Нужен M.2 key B WWAN. В поиске лучше писать "M.2 B usb sim" или "M.2 mini pci WWAN", т.к с ключом В так же идут переходники для ssd, которые нам не подходят!
    M.2 с ключами А, Е, А+Е НЕ ПОДХОДЯТ!

  • Q: Что со сменой IMEI
    А: У Quectel'ов легко, АТ-командой. В теме есть - ищите поиском.
    У Sierra в 90% случаев это не требуется, т.к. опознается в сети как мобильник. 35 не значит, что это мобильник!
    HP lt4220 / Telit ln940 / Foxconn T77W676
    Остальные - поиск по форуму, ключевое слово "IMEI"
    Если руки чешутся убить модем , это реально, но ищите сами. На свой страх и риск! Здесь это оффтоп !

  • Основная ветка по Keenetic , где в первую очередь необходимо задавать вопросы




На последней прошивке EP06 EP06ELAR04A04M4G QAM256 включается командой AT+QCFG="dl_256qam",1

Внимание! Участились случаи мошенничества с предложением продажи модемов в QMS, Telegram. Не "ведитесь".
НИКТО из участников форума не пользовался услугами этих мошенников, в том числе и ТС kurianov. Продажей тоже никто не занимается.

Прикрепленное изображение

Bester2,
ну не то что сдают трафик. палят нас своими подключениями на свои сервера )
Да, есть такое дело. Частично это отключается. Кто-то пересобирает прошивку либо брали свою же прошивку от китайских клонов. Но эта тема не про то ))

Ща набегут качки-халявщики. мой им совет - берите тарифы для модемов!

А как хорошо начиналось. :D
Понятно же что торенты на радиоканале зло несомненное, но топик же не об этом?

Что не только оффтоп, за разумный ценник есть cat.6 в mPCI-e, Quectel EP06.

ПолВторого, ну потому что у нас народ не знает меры ))
Я тоже любитель нагнуть систему и поиметь тех, кто обычно имеет нас, но не в ущерб окружающим, а эти заядлые качки имеют нас всех, таких же пользователей, как они. А потом ноют, что опсосы выдумывают все новые и новые методы борьбы с ними. Они себе киношки BDRip'ы качают на смарт тарифах, а у тех, кому связь для дела нужна - полная ж наступает. Причем мне нужна не космическая скорость, хватит и 10-20 мбит, но нужна стабильность, иначе обрываются конференции, удаленный рабочий стол, удаленка с виртуалками.

Поэтому халявщикам качкам говорю, идите обратно на хуавей отсюда!
Тут номера меняются очень не просто, а иногда и достаточно сложно, с большой вероятностью завалить железо!
Тут нужны познания OpenWRT - из коробки все само просто так не заработает!
Так что - Бегите отсюда!

ПолВторого, EP06 хорош, но em7455 еще дешевле ) А так да, всяко приятнее цен на хуавеи. Вон кат 12 em12 стоит 6500. Сколько хуавей кат 12 стоит?))
Но тут еще дело в том, что многие роутеры ограничены юсб 2.0 и 100 мбит портами и с них больше не вытянуть. Хотя нормальным людям больше и не надо. Чтоб выжать больше, нужен более дорогой роутер с юсб 3.0 и 1гбит портами.

Добавил в шапку картинки с вариантом от антэкса и другого нашего производителя.

Почему вдруг решил отметить антэкс? Потому что они родили минироутер под mini pci-e без излишеств за

ps: но я по-прежнему больше люблю варинт с юсб удлинителем из витой пары (до тех пор, пока это еще возможно)

Прикрепленное изображение

Какой еще потенциал я вижу у этой платы?

1. Конечно же воткнуть туда переходник на m.2 для экономии на модемах

2. Есть другой вариант этой же платы, но с юсб - мне, почему-то так и хочется взять ее, и вместо юсб впаять туда на шлейф (или гребенку) переходник m.2-usb. Этот вариант может быть интересен для очень многих роутеров, если стоит задача спрятать такой модем внутрь корпусного роутера. А это уже простор и для мобильных роутеров, и для стационарных "все в одном". (Хуавей, давай подвинься!)

Прикрепленное изображение

Прикрепленное изображение

САТ12 нет возможности выложить.
Что и как получится.

Если задача выжать максимум, то нужен роутер с юсб 3.0 и ЦП пошустрее + 1 Гб свитч, например Xiaomi 3G - это 2500-3500 р (внимательнее с выбором ревизии)
+ переходник m.2 usb 3.0 w sim - 1000 р
+ Quectel em12 - 6500+ р (лично не тестировал, за минимальный ценник, есть вероятность, что это вендорский, может потребоваться прошивка или смена pid vid)

Как далеко от роутера заведется модуль на юсб удлинителе, не знаю, у этих xiaomi 3g ограничен ток на юсб порте (отчего не заводились внешние харды и народ стал выпаивать лишние резисторы)

Я максималкой не озадачивался. У меня задача была скромнее - 50 мбит за счастье, и чтоб в час пик (массовая удаленка + видео уроки у школьников) ниже 10ти не падала. И чтоб не приходилось вручную постоянно прыгать с лте 2600 на 1800 и далее по кругу в поисках более свободной полосы. (именно это меня достало)

Если задача выжать максимум, то нужен роутер с юсб 3.0 и ЦП пошустрее + 1 Гб свитч, например Xiaomi 3G - это 2500-3500 р (внимательнее с выбором ревизии)
+ переходник m.2 usb 3.0 w sim - 1000 р
+ Quectel em12 - 6500+ р (лично не тестировал, за минимальный ценник, есть вероятность, что это вендорский, может потребоваться прошивка или смена pid vid)

Хорошо, но экономика должна быть экономной - на данный момент B528 Cat6 стоит 6к - на нем увидеть 50Мбит думаю не проблема.
Подозреваю что нужно искать более бюджетный вариант, с учетом того что роутеров у народа много( его цену можно не учитывать ). ren69,
1. Открываю авито - 528 неизвестного происхождения начинается от 9 тыщ. B525 - 12-14 тыщ! и это за всего лишь 6ю категорию с агрегацией всего двух частот на прием.
2. Сравнивать надо девайсы одной категории - модуль ем7455 кат6 стоит 1800 р + переходник

500 р и я могу это воткнуть как в роутер, так и прямо в комп (а можно прямо в материнку без всяких переходников) С этой ценой не может даже е3372 4й категории тягаться.
3. За ошибочно названные 6 тыщ я могу взять модуль уже аж 12й категории! Лишь бы смысл был. Хуавей этой категории сколько стоит?))

4. 50 мбит b528 даст только там, где они есть, т.е если БС не перегружена. У меня именно в этом беда.

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

1. Открываю авито - 528 неизвестного происхождения начинается от 9 тыщ. B525 - 12-14 тыщ! и это за всего лишь 6ю категорию с агрегацией всего двух частот на прием.
2. Сравнивать надо девайсы одной категории - модуль ем7455 кат6 стоит 1800 р + переходник

500 р и я могу это воткнуть как в роутер, так и прямо в комп (а можно прямо в материнку без всяких переходников) С этой ценой не может даже е3372 4й категории тягаться.
3. За ошибочно названные 6 тыщ я могу взять модуль уже аж 12й категории! Лишь бы смысл был. Хуавей этой категории сколько стоит?))
4. 50 мбит b528 даст только там, где они есть, т.е если БС не перегружена. У меня именно в этом беда.
Агрегация не для высоких максималок была придумана, а для того, чтобы связь оставалась приемлемой в условиях больших нагрузок на сеть. Распределение нагрузки и балансирование.


1. Согласен, на Авито как бы дорого, а на Али? 6-6,2к , агрегация в вашем регионе нормально работает? у меня пчелиный оператор до сих пор не поддерживает больше 3 частот на прием.
2. Прошу дать ссылку на приобретение Cat6 за 1800р, и еще инструкцию, как такое подружить с роутером ( просто я не в теме, сорри )
3. На Али, 818й категории Cat 19 нашел за 14к, если сравнивать представленные выше цены - роутер 3к, переходник 1к, Е12 - 6.5к = 10,5к - Cat12.
4. В вашем регионе какой оператор поддерживает агрегацию больше 3 частот?

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

По теме внимательнее пройдитесь, начиная с шапки, тут ссылки полезные есть.
Подскажите пож. по модели роутера, на каком остановиться или мож еще какой посоветуете.
Ссылка на пост с соседней темы
EM7455 по ссылкам под ноуты Делл заточены. Для OpenWRT это значения не имеет? И как легко убедить поддержку Кинетика запилить прошивку и под 7455?
EP06E с переходником - пигтейлы идут в комплекте и какие?
И по сим-картам - только модемные тарифы?

В копилку: АТ-команды для Quectel ЕР06, EG12 и Sierra EM7455

Ну что Вы как маленький?! Нашли где смотреть)) - Микротик с неродным более дешевым модулем за конский ценник. Как говорят те ребята "мы за сборку и настройку комплекта берем. "
Микротик рбм11 стоит от 2500 р, Рбм33 стоит от 3300 р. Но это Микротик с РоутерОС! Где хуавей с ксиаоми, а где микротик?!
НО! Микротик хорошо работает пока только с родным дорогим модулем. С другими он работает не по нужному протоколу, а через костыль и поэтому режет скорость. Для сторонних дешевых модулей на него тоже придется ставить ОпенВРТ, благо под ник есть готовый Рутер, где все уже вшито и работает! Когда РоутерОС допилят (а может и уже - обещали в новых версиях), тогда можно вернуться обратно - для фанатов микротиков это просто идеальный вариант!

Вариантов просто целая куча! А если приспособить завалявшийся в шкафу роутер, так это вообще. - это Вы и сами отметили )

Я никого не уговариваю, убеждать и силком тащить не буду )

EM7455 по ссылкам под ноуты Делл заточены. Для OpenWRT это значения не имеет? И как легко убедить поддержку Кинетика запилить прошивку и под 7455?
EP06E с переходником - пигтейлы идут в комплекте и какие?
И по сим-картам - только модемные тарифы?

Первая ссылка (дешевле всего) - это ОЕМ версия с родными идентификаторами vid pid. Те, что дороже и с припиской Dell / Thinkpad / HP - это тоже самое, но с уже измененными pid vid на те, что хотят видеть эти ноутбуки (чтоб то же железо покупали у них, но дороже). Если ОпенВРТ не увидит какой-то из них - они меняются несложно.
Кинетик - они уже работают в этом направлении. Пишите им заявки на нужные модули - они ускорятся и сосредоточатся на нужных модулях. В ОпенВРТ все уже давно работает, а значит и этим ребятам не составит труда добавить все это.
Пигтейлов нет. Ищите, стоят копейки. Иногда в комплект прикладывают встраиваемые антеннки на самоклейке.

Про тарифы:
Господа, поймите меня правильно и не обижайтесь! (Не к Вам лично, ко всем обращаюсь!)
Я не хочу сильно популяризировать эту тему и выдавать полный разжеванный рецепт, чтобы не было резкого перевеса и миграции с хуавеев на модули. Я хотел лишь немного уравновесить положение дел, приоткрыть людям глаза, но не выдавать им розовые очки, что мол все просто. Кому надо, тот уже все узнал и заказал. Я не хочу, чтобы сюда на все готовое приперлись ленивые барыги и халявщики, вечно пытающиеся "выкачать весь интернет" на смарт тарифе за 200 р, и открыли сезон охоты на железо (посмотрите, что с ценами на хуавеи стало), которое мне самому нужно, чтоб у меня была хоть какая-то связь, а не 200+ и торренты. Торренты могли бы и ночью качать, а лучше еще и по проводам. Пусть они остаются на своих хуавеях и переплачивают дяде васе с авито за непонятные хуавеи. В мире должно быть равновесие. Пожмотился тут, переплати там! Т.к из-за этих качков страдают люди, которым нужен скромный, но стабильный канал для дела и работы.

Все настраивается, все меняется - на одних модулях легче (подороже), на других сложнее (подешевле).

ТТЛ меняется вообще где угодно, тем более если в основе всего лежит iptables. Я этим занимался еще лет 15 назад на древних проводных роутерах, чтобы делить инет с соседом, когда проводной инет делить не давали и роутеры были чем-то невиданным. И с йотой я развлекался еще до того, как это стало мейнстримом.

Но посмотрите, к чему привело такое открытое обсуждение с подробными инструкциями, готовыми скриптами и утилитами?! Народ стал борзеть. Люди разные - не все знают меру. В итоге опсосы стали выдумывать новые и новые методы выявления и пресечения раздачи. Но страдают не только эти качки, но и обычные скромные пользователи.

Не всем понятно, о чем я. Поясню - Ладно в городе вышек дофига и операторов. Есть выбор, пути отхода.
А представьте, в деревне полтора оператора и одна вышка. И тут такой красавец с микротиком и модулем кат12 (или хуавеем 525-715) кладет вышку на лопатки своими торрентами / киношками и вся деревня или СНТ остаются без связи. (А неправильно настроенный микротик даже проводного оператора кладет на лопатки во всем многоэтажном доме.) А у людей удаленка, конференции, у детей видео уроки по скайпу.

Интересная вещь: EM7455 позволяет задать имей, если он не предустановлен с завода:
!NVENCRYPTIMEI Write unencrypted IMEI to modem
Write an unencrypted IMEI to a modem if the modem does not already have an IMEI—
the command can only be used once per modem.
Это открывает простор для творчества - достать бы только пустые модемы без имей. И отсюда вопрос: с алика идут болванки или уже с imei?

Это открывает простор для творчества - достать бы только пустые модемы без имей. И отсюда вопрос: с алика идут болванки или уже с imei?

Подсказываю: Режим Advanced (Engineering mode) - Factory reset. (должно помочь, сам не пробовал, мне не нужно)

Читайте также: