Смена контекста и получения списка

Тема в разделе "WASM.WIN32", создана пользователем DeHunter, 26 ноя 2005.

  1. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Здраствуйте. Я уверен что многие раьотали с SICE.

    Вобшем мне необходимо написать драйвер для моего антивируса который бы сканировал память на наличие вирусов. Для этого мне необходимо получить список контекстов. Ну как в сайсе. Там ешё была команда переключения процесса. Так вот проблема в том что я не знаю как получить список контекстов и как сменить контекст. Не подскажете как ?
     
  2. ravenEx

    ravenEx New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    18
    А кто дает драйверу право переключать процессы?

    По-моему сия процедура закончится в лучшем случае синим экраном или вообще черным:)

    А читать/писать в адресное пространство процесса можно и из режима пользователя(намного проще).

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

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Тоесть только через ReadProcessMemory и WriteProcessMemory. Помойму похукать эти функции и не дать себя читать очень просто. Вроде бы перехват подобных действий организуется в протекторах чтоб не сдампили. А мне надо читать вобше всё. Тоесть перекелючить контекст процесса вобше нереально из под драйвера. Хотя поиде можно хукать определённую функцию и чекать память процесса на вирусы. Т.К во время хука я буду в контексте процесса вызвавшего функцию. Далее я буду создавать ешё один тред в этом процессе который собсна и будет читать память и чекать её на сигнатуры с интервалом в 20 секунд допустим. Как вам план ? Реально ли такое ? И будет ли это тормозить оч сильно если пустить этот тред с низким приоритетом ? Ну и всётаки реально ли организовать переключение или попадание в чужой контекст не по изврашенскому ?
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Контекст переключается функциями

    KeAttachProcess/KeDetachProcess

    KeStackAttachProcess/KeUnstackDetachProcess



    На вход нужен будет указатель на EPROCESS. Получить их для всех процессов можно несколькими способами. Например, получить список всех процессов вызовом ZwQuerySystemInformation с классом SystemProcessesAndThreadsInformation. Оттуда взять ProcessId и подпихивать их PsLookupProcessByProcessId. Она вернет нужный указатель. Или можно пройтись по списку EPROCESS.ActiveProcessLinks. Его голова в переменной PsActiveProcessHead. К сожалению, она не экспортируется. Зато экспортируется PsInitialSystemProcess. Можно за него зацепиться. Единственная проблема - во время обхода нужно блокировать доступ к этому списку. Система делает это вызовом PsLockProcess/PsUnlockProcess.



    Поройся на rootkit.com - там полно такого кода.
     
  5. DeHunter

    DeHunter New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    80
    Адрес:
    Ukraine/Kiev
    Спасибо. Вроде всё понятно.
     
  6. ravenEx

    ravenEx New Member

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    18
    А софтайс у меня вообще их не импортирует(кроме PsInitialSystemProcess). Видимо он предпочитает использовать грязные хаки вместо фирменных API:)

    Или они не были документированы на момент написания сайса?