Перехват NtWriteVirtualMemory

Discussion in 'WASM.NT.KERNEL' started by krabz, May 29, 2010.

  1. krabz

    krabz New Member

    Blog Posts:
    0
    Joined:
    May 26, 2010
    Messages:
    135
    Короче, я уже голову сломал. Или лыжи не едут...

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

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

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

    Code (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

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    квери может и не сработать - права на запись АП не обязательно будут соседствовать с правами на получение инфы.
    хендл может быть открыт только с правами на запись ап. в любом случае, это логически не правильно.

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

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

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Great
    Он результат исполнения ObReferenceObjectByHandle() не проверяет, левые числа это произвольные значения из стека, где локальные переменные не зануляются.
    krabz
    Желательно тип обьекта указать и тип доступа к нему.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    krabz
    Смотрите, что возвращает ObReferenceObjectByHandle. Может она ошибкой завершается?
    У меня такое подозрение, что вы передаете неверный хендл.
     
  5. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Clerk
    я думал это псевдокод. если и правда не проверяет, тогда говорить не о чем)
     
  6. krabz

    krabz New Member

    Blog Posts:
    0
    Joined:
    May 26, 2010
    Messages:
    135
    Да что вы, проверяю конечно - STATUS_SUCCESS там, и указатель как бэ адекватный...

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

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

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    krabz
    Если всё исполняется какбэ успешно, тоесть по внешнему виду скрипта определить ошибку нельзя, то выкиньте нафиг свой компилятор. Ну или не приводите более этих скриптов.
     
  8. krabz

    krabz New Member

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

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    krabz
    Я был прав, сказав что хендл неверный (как бы само значение не подходит под хендл).
     
  10. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Ну сообщала ведь винда, что тип не соответствует. Стоит больше доверять статусу результата:)

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