Выполнение проги в Ring0

Тема в разделе "WASM.NT.KERNEL", создана пользователем Necromancer13, 13 янв 2008.

  1. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    Здравствуйте!
    Например, я написал код, который должен выполниться в нулевом кольце... как мне его проверить?
    обязательно писать драйвер?
     
  2. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Если Вам известен другой способ попасть в ring0 - наверное не обязательно :)
    Но самое простой способ это сделать - написать драйвер.
     
  3. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    ага, только мне немного лень постоянно писать еще и отдельно прогу для его регистрации, запуска и т.п. =(
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    документированно это единственный способ.
     
  5. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Как вариант - пропатчить Ntoskrnl.exe... Заюзав какое нить DPL3 (то есть пригодное для вызова из R3) прерыванее к примеру, нафик не нужное int 2A... Для этого кернел дебугером нада найти место обработчека этого прерывания, и запомнить этот участок по характерному HEX коду...

    В виндопсе2000 предстанет следущаяя картина маслом:
    Код (Text):
    1. 00464DBC: 837C24041B         cmp         d,[esp][04],00000001B
    2. 00464DC1: 7512               jne        .000464DD5  --- (1)
    3. 00464DC3: 2EA13CDC4600       mov         eax,cs:[0046DC3C]
    4. 00464DC9: 2EF7258C594700     mul         d,cs:[0047598C]
    5. 00464DD0: 0FACD018           shrd        eax,edx,018
    6. 00464DD4: CF                 iretd
    Смысл патча будет состоять в том, чтобы находясь в r0 передать проге управление обратно, на ее код, поскоку известно у NT процесс с драйверами находяться в едином адресном пространстве:
    Код (Text):
    1. 00464DBC: 870C24             xchg        ecx,[esp]
    2. 00464DBF: FFE1               jmp         ecx
    Патч простой, но не лишен некоторых недостатков из за того что придеться жертвовать регистром (особености переключения стека при R3-R0 переходе), и того что код нужно выполнять очень быстро (во избежания BSOD'а типа "IRQL_NOT_LESS_OR_EQUAL").

    Как это юзать?
    Код (Text):
    1. program test;
    2. function  Reg_CR0 (port:integer) : byte;
    3. asm
    4.   pop ecx //забрать адрес возврата
    5.   int $2a //переключиться в R0
    6.   nop     // <- c этого места идет обработка прерывания
    7.   nop
    8.   mov eax, cr0 //прочитать регистр управления
    9.   nop
    10.   nop
    11.   iretd
    12. end;
    13.  
    14. begin
    15.   writehex (Reg_CR0); //вывести значение содержимого в HEX
    16. end.
    Возможно лутшим решением будет служить простой драйвер, который тупо переназначает в IDT прерывание на свой участок кода...

    Вобщем приятных BSOD'ов, убития венды, от Ring0 экстрима! :)
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    bugaga
    а зачем тебе понадобилось таймер гробить ?
     
  7. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    k3internal, писал:
    Ну так, поглядел int 2Ah нигде не используеться, по крайней мере в w2k... . Отчего-ж не приспособить его под более благородное дело?
    p.s
    ведь риск как известно... :)
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    лучше имхо так сделать. ну или call-gate.
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    а лучше пропатчить IA32_SYSENTER_EIP
    и использовать sysenter
    где-то тут тема похожая была
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    не нужно никуда торопиться +) Нужно лишь заблокировать заранее нужные страницы в рабочем наборе через VirtualLock и то если ты опционально сделаеть так, чтобы int 2a возвращала управление на повышенном IRQL. если на passive_Level - тогда вообще ничего не должно случиться плохого. а затея неплохая для быстрой проверки ринг0 кода.

    но у меня уже написание и запуск дрова доведены до автоматизма. + винда предоставляет удобные механизм IOCTL для вызова различных функций дрова.
    поэтому не вижу необходимости так извращаться
     
  11. Necromancer13

    Necromancer13 Виталий

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    202
    Адрес:
    Украина, Берегово
    О Ужас =-O
    Я, пожалуй, лучше драйвер напишу...
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Хыхы этого я и ожидал. Вообщем-то, незачем извращаться там, где все решается элементарно.
    Разве что ради интереса.. а так, лучше, конечно, драйвер.
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    sc.exe
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Менеджеров дров вообще полным полно:)
     
  15. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Бряку поставь, и посмотри как он нигде не используется.
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    смотря с какой стороны лучше. sysenter юзается в винде неслабо.
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    это да, но я реально проверял что если поставит приоритет хай и быстро сделать свои черные дела то в большинстве случаев все происходит отлично.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Great
    ну хз. зачем гланды через ж.. резать :\
    если можно сделать проще, а главное более надежно.
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Можно, конечно:) Это я так, к слову.
     
  20. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну и пусть юзается ;)
    кто мешает например сделать так
    Код (Text):
    1. enter:
    2.     cmp eax, 0
    3.     jb @F
    4.     jmp dword [original]
    5. @@:
    сильного снижения производительности не будет