Номер системного вызова по имени в ядре

Тема в разделе "WASM.NT.KERNEL", создана пользователем Crash, 3 окт 2007.

  1. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Как можно определить номер системного вызова по имени функции в ядре?

    Например, у нас есть имя:

    LPWSTR lpFuncName = L"ZwOpenProcess";

    Нужно нечто вроде:

    DWORD dwZwOpenProcessSysCall = GetSysCallByName(lpFuncName);
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    #define INDEXEG(functionk) *(PULONG)((PUCHAR)functionk+1)
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Что есть номер? Ординал в экспорте? Номер в SST? Первое для этой ф-ии есть, второго нет (только для Nt*).
    Первое - разбором директории экспорта. Второе - пробовать читать dword по адресу ZwOpenProcess+1, сравнивать адрес ZwOpenProcess с адресом в таблице SST, при условии незахучености ф-ии.
     
  4. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Второй способ знаю. Но мне нужно именно для имени, т.е. есть строка с именем функции, а не адрес этой функции.

    Например, для функции ZwOpenProcess
    таким номером будет являться 0x7A в Windows XP или 0x80 в Windows 2003
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Заменяешь Nt* на Zw* префикс, делаешь MmGetSystemRoutineAddress, читаешь дворд по адресу, возвращенному ей, +1
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Crash
    ntdll разбери, там в самом начале ф-ии есть номер.
     
  7. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Спасибо! Думаю, это как раз то, что нужно.
     
  8. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    ничего разбирать не нужно грейт правильно всё сказал
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    не для всех функций из SDT есть экспортируемый аналог. Наиболее правильным способом будет как раз разбор ntdll.
     
  10. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Crash
    Не так давно я дизасмил драйвер ms-rem'a от HideToolz 1.6
    Там есть как раз то, что тебе нужно -т.е. способ №2 + разбор ntdll. Ну еще можно воспользоваться предложением Great.
    Вообщем, если нужно, то завтра могу принести idb-файл.
     
  11. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Частное решение. Все то хорошо, но если функцию кто-то вздумает сплайсом похукать? :) да и

    n0name
    правду говорит, разбор при том нужно делать файла на диске :)
     
  12. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Если я правильно понял, нужно разбирать таблицу экспорта ntdll.dll с тем, чтобы определить реальный адрес требуемой функции?
     
  13. Guest

    Guest Guest

    Публикаций:
    0
    Дизасм начала функции в ntdll на поиск момента передачи номера сервиса.
     
  14. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Crash

    Также как и с Zw** функциями в ядре
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Нафига мапить себе ntdll, если в Zw* функциях ядра номер тоже есть
     
  16. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Great
    Берем пример - ZwWriteVirtualMemory - гды ты в ядре номер найдешь?
    Второй пример - ZwWriteFileGather. Таких функций хватает.
     
  17. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    читать ntdll с диска
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Deyton
    Номерто есть..
    Правда они неэкспортируемые.
    Это уже другой вопрос)
     
  19. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    На страничке http://twister.orgfree.com/other возьми файл hidetoolz1.6_driver_dis0.1.rar

    Тебе понадобятся функции Get_EntryNumber_By_FuncName и GetProcAddress. В принципе, я могу дать и исходный код этих функций...
     
  20. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Давай