Сплайсинг в нулевом кольце на новых версиях ядра (Виста, Вин7)

Discussion in 'WASM.NT.KERNEL' started by d2k9, Jan 31, 2010.

  1. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    Clerk
    Ну приведённый код это оффтопик, не по теме он сплайсинг в режиме ядра.
     
  2. J0E

    J0E New Member

    Blog Posts:
    0
    Ты подразумеваешь под ядром ntoskrnl? Иначе ndis это тоже ядро. Да в каких-то местах это будет работать, но не везде, CreateProcessNotifyRoutine тоже в произвольном контексте зовется.
    Это по теме "невидимого" сплайсинга в режиме ядра и содержательнее чем флуд "офигеть" ;)
     
  3. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    А вы что-нибудь по теме умеете? Например PG кроссвиндозно отключать? Нет? Так может вам с Клерком отдельную темку создать и в ней изучать "невидимый" сплайс? Или тогда это не круто будет? Не хочу обидеть, но вами по теме топика не было сказано ничего полезного. Единственный кто хотел помочь это Great, х64, Sol_Ksacap. Вы только не обижайтесь, ну бывает такое, не ваш уровень ;)
     
  4. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    d2k9
    путаетесь в показаниях))
    а вообще ладно, закругляюсь - раз речь про х64, то это не для меня.
     
  5. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    Да там был баг в коде вот и бсодило - пофиксил и теперь полёт нормальный :)
     
  6. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    Great
    P.S. Не думал проапгрейдить проц до поддержки 64 бит? Сейчас они везде, стоимость близка к нулевой... Я даже уже не помню когда у меня был проц без поддержки х64. Стопорится на 32 битах есть архаичность, уже 128 и даже 256 бит разрабатывают в винду 8 и т.д.
     
  7. Velheart

    Velheart New Member

    Blog Posts:
    0
    Я, кстати, по этому поводу тут когда-то создавал тему, но ничего так и не выяснилось, было бы интересно узнать в чем все-таки дело.
     
  8. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    d2k9
    Финансовый вопрос встает остро) Сейчас постепенно решаю.
    Вот на новой работе - даже тут x86, правда двухъядерный (а дома у меня обычный селерон на ноуте и амд семпрон на сервере). Буду тут свой отладчик тестить, а то раньше даже негде было многопроцессорность/многоядерность потестить.
     
  9. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    Great
    http://www.fcenter.ru/products.shtml?eshop/act=h:a:0:3:a:a:a:1:a:1:30:y:1:1&oper=46959::::
    ~30$ за Intel EMT64 2.8GHz
    Если не курить и не пить месяц из расчёта 2уе в день на 31 в месяце можно купить
    http://www.fcenter.ru/products.shtml?eshop/act=h:a:0:3:a:a:a:1:a:2:30:y:1:1&oper=75199::::
    Intel "Pentium Dual-Core E5200" (2.50ГГц, 2МБ, 800МГц, EM64T) Socket775 ~64$
    Так что если кто-то курит или пьёт вывод - бросьте хоть на месяц :)
     
  10. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Velheart
    Очень глупая ошибка в приведённом коде, я забыл про необходимость выравнивания страницы на границу 4M, ведь в этом случае 22 бита линейного адреса составляют смещение в странице. Выделялась память с выравниванием на 4K, соответственно адреса формировались не валидные. Необходимо выделить 4M памяти выравненных на 4M, затем загрузить физический адрес в PD с соответствующей маской.
    d2k9
    Согласен что техника оффтоп, также как и мехонизмы которые Shadow Walker использовал.)
    По теме - разберитесь вначале в юзермоде, как дизасм юзать и пр., тогда и в ядре всё получится.
     
  11. J0E

    J0E New Member

    Blog Posts:
    0
    Ты пришел сюда за помощью и для этого берешь людей людей на понт?

    Как отключать PG написано в MSDN, для этого ОС загружается в режиме отладки, про это и пишет x64 столь загадочно. Но тебя такое наверное не устраивает, а если разобраться, нужен обход PG?

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

    Если разобраться, окажется что тебя с 32х битными системами и PG не интересует, проблема с модификацией SSDT наверняка была из-за кода, которым это пытался сделать, что он из себя представляет, cli + сброс WP бита? Такой код ошибочен, почитай WDK как следует работать с _физической_ памятью.
     
  12. x64

    x64 New Member

    Blog Posts:
    0
    Нет.
     
  13. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Здесь немного говорили за пг. Удивлен, вроде грамотные люди, а всякую чушь пишут.
    Пг обходится на раз, загрузчик можно не трогать
     
  14. x64

    x64 New Member

    Blog Posts:
    0
    Хорошо, в таком случае приведи код, который обходит PG раз и навсегда, который можно использовать в легальных приложениях, и при этом этот код:

    1. Работает только для одного конкретного драйвера.
    2. Не уронит систему в очередной версии PG или с выходом PG-related хотфикса.
     
  15. Medstrax

    Medstrax Забанен

    Blog Posts:
    0
    Трейс решает
     
  16. Clerk

    Clerk Забанен

    Blog Posts:
    0
    medstrax1
    А как по вашему трассировать, если KiDebugRoutine и IDT защищены ?
     
  17. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    J0E
    Ну вообще-то мы тоже не лыком шиты и патчинг производим даже с учётом SMP - KeRaiseIrql(), может слыхал о таком? А тему-то читать внимательно нельзя было? Здесть про патчинг SSDT ни слова нету, здесь обсуждается сплайсинг - это техника такая, когда в начало функции нужный джамп внедряется. А если посмотреть внимательно тему, потом было написано, что всё уже работает. И ты может очень умный если пишешь про включение режима дебага ядра для оффициального отключения PG - это _ОЧЕНЬ_ крутой способ, его никто не знает, использует только элитО, советую юзать всё время. Далее, касаемо юзабельного отключения PG есть только 2 варианта:
    1) патчинг лоадера полуофф и отключает PG для всей системы - уже юзается некоторыми АВ по сведениям х64
    2) куча кода для поиска в режиме ядра всех потоков c DPC, ExpWorkerThread & KeBugCheckEx
    Уверен, если бы ты читал внимательно uninformed.org, то тоже ?смог? бы реализовать 2 вариант как сделал я. Но в итоге получилась куча кода не стабильного к разным версиям ОС и разным патчам/обновлениям установленным на ОС. По 1 варианту я не уверен, что ты его сможешь найти либо самостоятельно изобрести, но он на самом деле весьма лёгок и заключается в умении патчинга образов на диске и работой с консолью bcdedit. Ах, да, чуть не забыл будут вопросы, обращайся, я тебе помогу - посоветую включить режим дебага ядра.
    Вывод: отключение PG не есть выход, необходимо искать иные варианты реализации конкретной задачи.

    Clerk
    Эх, развела меня IDA64 - загрузил из C:\Windows\System32\ntoskrnl.exe и думал что дизасемблю ре64, тока я в шоке был что там нету регистров х64. Глянул в диспетчере задач оказывается у меня ида64 32х битный процесс и для него применяется WOW64 редирект. Решение было простым - скопировать из System32 в любую другую папку и там дизасемблить :)
     
  18. x64

    x64 New Member

    Blog Posts:
    0
    Не отключает и не для всей.

    Да.

    Желательно.
     
  19. d2k9

    d2k9 Алексей

    Blog Posts:
    0
    x64
    Мой вариант для всей, а что там ты видел не знаю. Конечно было бы хорошо выборочно.
     
  20. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Пропатчить начало верификатора, либо вобще код связанный с PG - чем не способ ?