Перехват NtWriteVirtualMemory

Тема в разделе "WASM.NT.KERNEL", создана пользователем krabz, 29 май 2010.

  1. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    Короче, я уже голову сломал. Или лыжи не едут...

    Собственно перехватываем NtWriteVirtualMemory с целью защиты от инжекта таким спосообом. И нужно определить не является ли процесс, в АП которого происходит вторжение одним из тех, которые мы хотим прикрыть. Соответственно, необходимо найти PID, чтобы плясать дальше... , для этого используется ProcessHandle, который приходит в первом параметре.

    Пробовал найти PID таким образом:
    Код (Text):
    1. ObReferenceObjectByHandle (ProcessHandle, 0, NULL, KernelMode, &eprocess, NULL);
    2. pid = PsGetProcessId (eprocess);
    вроде бы нормальный способ, но PID возвращаются какие-то странные. Смотрю в ProcessExplorer и там замечаю, что 100 < PID < 9999. однако мне приходит то 0, то какие-то большие числа, явно больше 9999.

    Решил попробовать иначе:

    Код (Text):
    1. ZwQueryInformationProcess (ProcessHandle, ProcessBasicInformation, &pbi, sizeof (pbi), &suc);
    возвращает STATUS_OBJECT_TYPE_MISMATCH. Я так понимаю, что хэндлы которые я туда сую - не хэндлы процессов, а какие-то левые хэндлы. Я в шоке.

    Просмотрел значения приходящих хэндлов: есть такие типа 0x8000345 - это я так понял KernelHandle , а есть юзермодные типа 0x0000124...

    Просто как бэ NtWriteVirtualMemory хавает и те и другие нормально...

    Как же мне получить PID из этих хэндлов?
     
  2. wasm_test

    wasm_test wasm test user

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

    референс + PsGetProcessId нормальный способ. а у тебя где-то что-т не так, если получаешь кривые числа. давай полный исходник.

    без разницы какие хендлы.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Он результат исполнения ObReferenceObjectByHandle() не проверяет, левые числа это произвольные значения из стека, где локальные переменные не зануляются.
    krabz
    Желательно тип обьекта указать и тип доступа к нему.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    krabz
    Смотрите, что возвращает ObReferenceObjectByHandle. Может она ошибкой завершается?
    У меня такое подозрение, что вы передаете неверный хендл.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Clerk
    я думал это псевдокод. если и правда не проверяет, тогда говорить не о чем)
     
  6. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    Да что вы, проверяю конечно - STATUS_SUCCESS там, и указатель как бэ адекватный...

    А ZwQueryInformationProcess рекомендуете фтопку?

    Ну тогда щас попробую снова тот способ реализовать - если что выложу код
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    krabz
    Если всё исполняется какбэ успешно, тоесть по внешнему виду скрипта определить ошибку нельзя, то выкиньте нафиг свой компилятор. Ну или не приводите более этих скриптов.
     
  8. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    Дико извиняюсь, но баг был совершенно в другом месте. Оказывается была перехвачена другая функция :) поскольку там было такое же количество параметров, то ничего не рушилось.
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    krabz
    Я был прав, сказав что хендл неверный (как бы само значение не подходит под хендл).
     
  10. wasm_test

    wasm_test wasm test user

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

    // написано с мобилы