как без апи найти базу ntoskrnl?

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

  1. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    САБЖ
    есть шеллкодес, который внедряется в драйвер
    На данный момент решение поиска базы у меня кривое
    Берется функция из импорта и листается вверх страницами до MZ-сигнатуры
    Но если IAT похучен, или драйвер не импортирует ничего из нтоскрнл, то просходит бсод
    Помгите, как избавиться от этих зависимостей
    Хочется универсальный способ, не зависящий от импорта основного драйвера
     
  2. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    апд
    на руткитсах была статья "все способы поиска ntoskrnl"
    но сейчас ресурс недоступен
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. get_ntoskrnl_base:      pushad
    2.                         push        eax
    3.                         sidt        fword ptr [esp-2]
    4.                         pop         esi
    5.                         mov         ebx, [esi+4]    ; high WORD of EBX = high WORD of interrupt gate offset
    6.                         mov         bx,  [esi+0]    ; low WORD of EBX = low WORD of offset
    7.                         mov         ecx, 0FFFh
    8.                         or          ebx, ecx
    9.                         inc         ecx             ; ecx = PAGE_SIZE
    10.                         inc         ebx
    11.  
    12. .find_base:             sub         ebx, ecx
    13.                         mov         dx, [ebx]
    14.                         not         dx
    15.                         cmp         dx, not 'MZ'
    16.                         jne         .find_base
    17.                         mov         edx, [ebx+3Ch]  ; .mz_neptr
    18.                         cmp         edx, ecx
    19.                         jae         .find_base
    20.                         cmp         edx, 40h
    21.                         jb          .find_base
    22.                         mov         eax, [ebx+edx]
    23.                         neg         eax
    24.                         cmp         eax, -'PE'
    25.                         jne         .find_base
    26.  
    27.                         mov         [esp+10h], ebx
    28.                         popad
    29.                         retn
     
  4. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Код (Text):
    1. ULONG GetKernelBase()
    2. {
    3.     SIDT_Content SidtCurr;
    4.     ULONG Addr;
    5.  
    6.     _asm { sidt SidtCurr }
    7.  
    8.     Addr = SidtCurr.HighAddress;
    9.     Addr <<= 16;
    10.     Addr += SidtCurr.LowAddress;
    11.  
    12.     _asm
    13.     {
    14.         pushfd
    15.         pushad
    16.         mov esi, Addr
    17.         lodsd
    18.         cdq
    19.         lodsd
    20.  
    21. base_loop:
    22.         dec eax
    23.         cmp dword ptr [eax], 0x905A4D
    24.         jnz base_loop
    25.        
    26.         mov Addr, eax
    27.         popad
    28.         popfd
    29.     }
    30.  
    31.     DbgPrint( "KernelBase = %x", Addr );
    32.  
    33.     return Addr;
    34. }
     
  5. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    упс, не прочитал пост censored
     
  6. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    Kernel-mode Payloads on Windows
    http://www.uninformed.org/?v=3&a=4&t=sumry
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Была идея использовать поиск тага для пула, в котором находится PsLoadedModuleList. Выделяется при старте ядра, таг "MmLd". Необходимый функционал не экспортируется, единственное это использование NtQuerySystemInformation для инфоклассов SystemPoolTagInformation/SystemBigPoolInformation, но на ядре XPSP3 данные инфоклассы не обрабатываются, получает управление ExGetPoolTagInfo(), в нём сразу какаято проверка переменной ядра, изза которой возвращается STATUS_NOT_IMPLEMENTED.
    Great
    Ты что думаешь насчёт этого ?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Если не сложно, приведите начало ExGetPoolTagInfo(), с символами, нужно знать имя переменной, которая в начале её юзается.
     
  9. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    Clerk
    _PoolTrackTable