(!!!НЕ ПОД ВИРТУАЛКОЙ!!!)), при этом верний левый кусок рабочего стола должен быть читым (без окон), поле запуска (прога будет ожидать события вывода на экран чего либо) щелкни правой кнопкой мыши на рабочем столе, чтобы Windа отобразила меню, или запусти калькулятор и т.п. (драйвер должен обучиться), затем если все пойдет нормально нажать F5 (прога в цикле ждет этой клавиши). Да основной размер в файле занимают ресурсы. Ссылка удалена
asd t00x rmn А забыл нужно еще DBGVIEW.EXE Марка Руссиновича запускать, чтобы было понятно почему ERROR, при запуске stealth.sys
PROFi картинка появилась и система (6600 GT, ForceWare 94.24, XP SP2) повисла, драйвер только чуть нагрузил процессор (еле слышно вентилятор). P.S. работает.
t00x А картинка то из ЯДРА... Собственно можно выводить все что угодно, только вот со шрифтами не разобрался до конца, прийдется их выводить как картинку. PS: my wife
Картинка есть. Ati Radeon x300, w2k sp4. Не повисла, но мышь не шуршит. Вообще ввод блокируеться. после нажатия на ф5, все возвращаеться на круги своя(ввод). Выделенного не понял. Она сразу отобразила пикчу. А по Ф5 разблокировала ввод. -- Или она просто не захотела у меня ничему обучаться??? Обидно...
"это не наш метод". Поиск, перехват и использование Drv* и Eng*-функций -- это конечно рабочий вариант для ring0-графики, но он слишком сильно зависит от ОС. Соответственно обломать отладчик, который будет их использовать, можно множеством способов. Посмотри на свой драйвер, чего там только нет -- чтение реестра, сигнатурный поиск (таблицы функций) в памяти display-драйвера, вызовы Eng* и Drv*-функций, и тд и тп. Всё это можно обломать почти на каждом этапе. И ладно бы если это всё требовалось только на стадии инициализации, но оно нужно и во время работы, от той же EngLockSurface ты точно никуда не денешься. Скорее всего что-то подобное как раз и используется в Syser'е, т.е. опредеденная работа с Drv* и Eng*. Потенциальное слабое место для антиотладки.
_BC_ Хм.. Интересно.. Про поиск и перехват - я пользую стек, и возможности стека только на 50%. Т.е. это только вершина айсберга. Дальше имя драйвера оно не нужно, это осталось из исследования, но шифрование никто не отменял. EngLockSurface ты точно никуда не денешься - да, не думаю, здесь она только пользуется для демонстрации вывода, а в дальнейшем пользовать ее можно только один раз (ну ест-но если на некоторых карточках в полноэкранный "DOS" не пререходить). DrvCopyBits - вот ключ, но попробуй ее найти ... Скорее всего что-то подобное как раз и используется в Syser'е, да только Syser в ауте при выводе на экран в XP + GeForce 8800. Все, большое спасибо всем, просьба не распространять, поскольку это только часть технологии. PS: Удалил ссылку, очень большая просьба закрыть топик.
да ладно тебе, там ничего секретного нет. Тебе по-хорошему нужен вариант, в котором ОС/драйвера нужны только в момент "взлета", т.е. чтобы после получения всей нужной инфы, адресов и тд на этапе загрузки, в рабочем режиме уже ничего осезависимого для вывода графики не требовалось.
_BC_ и тд на этапе загрузки. Никакого этапа загрузки, запустил драйвер в любой момент, и все ... Это только часть технологии... да ладно тебе, там ничего секретного нет. - хоть одну ссылочку. Тогда будем что-то обсуждать. История развития вопроса: 1) PCI конфигурационная область, там базовый адрес видеопамяти, мепируем-выводим Но, теперь то что выводится на экран начинается не посмещению 0, кроме того видепамять нелинейна. 2) IOCTL_VIDEO_MAP_VIDEOMEMORY или IOCTL_VIDEO_SHARE_... Тоже в ауте, поскольку хоть и память мепируется, но толку от этого мало. (там типа cancel.sys и др. попытки) 3) Siwvid.sys - перехват точек входа видеодрайвера в виде jmp xxx, где xxx адрес внутри Siwvid.sys, но учитывать, то что теперь текстового режима вывода инфы уже нет (он эмулируется) и видеодрайвер не отключается + память нелинейна => перехват бесполезен. 4) Syser.sys (не совсем он, а syserboot.sys помоему) но не суть важно, перехватывает саму таблицу вызовов и мняет адреса уже в ней, но технологи полностью содрана с Siwvid.sys (плагиат однако) => перехват тоже бесполезен. 5) А вот в Vista все подругому, и Syser по идее должен работать, хотя Aero вырубать будет это точно, но эти парни слабовато (халявно, без спин блокировок) реализовали перехваты на многопроцессорной машине (про программирование APIC я вообще умолчу), короче если дело обстоит так же как и в XP версии, то долго такой отладчик существовать не будет даже на двухядернике, не говоря уже о 4х ядернике.
кстати, тоже интерсуюсь вопросом сабжа (вывод на экран из режима ядра), тоже напоролся на это; не в курсе - это смещение (у меня оно 0x20000 кажется) одинаково для всех видеокарт или нет? хотя, по крайней мере, на моем компе реальном и на вмваре если считать что оно одинаково, то выводится и там и там нормально. одним PCI conf space не обойтись - нужно же знать разрешение экрана. кроме IOCTL_QUERY_CURRENT_MODE или как её там я хз какие еще варианты узнать разрешение. насчет нелинейности - как тупой вариант: можно из юзермода записать пиксели все, а из дрова смотреть в каких кусках видеобуффера какие пиксели оказались.. но это уж накрайняк=)
Great не в курсе - это смещение (у меня оно 0x20000 кажется) одинаково для всех видеокарт или нет? Нет. В Viste IOCTL_QUERY_CURRENT_MODE - нет Но разрешение узнать можно и без IOCTL вообще. PS: а кто мешает пользовать регистры CRT (Video), но есть способы проще. насчет нелинейности - как тупой вариант: можно из юзермода записать пиксели все, а из дрова смотреть в каких кусках видеобуффера какие пиксели оказались.. но это уж накрайняк=) Ответ отрицательный, причина в том что отобразится может около 256 Мб видеопамяти, а остальная зависит от окна (PCI-e) заданного в BIOS. Память распределяется не CPU а GPU. Над Vistoй сейчас работаю, но думаю это реально..
в висте много чего нет) я бы на нее даже рассчитывать не стал.. а от чего зависит не в курсе? или это такая индивидуальная особенность, которая не рассчитывается.. например, как физ адрес проекции видеобуффера в RAM
Great В курсе: 1) От оверлея (он с любого адреса видеопамяти). - главная проблема Syser - не выводит на оверлейную поверхность 2) В DirectDraw есть такой метод Flip, он меняет базовый адрес вывода на экран и при следующем выводе уже другая картинка. 3) Direct3D каждая поверхность созданная может быть выведена на экран сразу, а не копируя байты в первичную поверхность. 4) адрес проекции видеобуффера Такого не существует на современных видеокарточках. В них весь экран поделен на прямоугольники и вовод (причем pitch тоже может менятся) осуществляется в них. PS: Спасибо за DMP, столько времени сэкономил. PS1: Как предложение о создании своего отладчика ?
это я уже понял.. к сожалению. пожалста) давно интересовался этой темой.. дико интересовало как работает livekd как с тобой можно связаться кроме как на форуме?) в принципе это интересно, интересуют подробности)