ntoskrnl base

Тема в разделе "WASM.NT.KERNEL", создана пользователем Cr4sh, 18 янв 2007.

  1. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    как в kernel-mode узнать аддресс образа ядра, не используя никаких native-api ф-ций вроде ZwQuerySystemInformation итп...
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Элементарно

    @@:
    dec esi
    cmp word ptr [esi], "ZM"
    jnz @B


    В esi - адресс любой функции ядра
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну можно оптимизировать, идя только по границам страниц.
     
  4. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    не катит, мне для шеллкода нужно
    так что исходить приходится из того, что нам вообще не известны адресса каких-либо ф-ций
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    в стеке адрес ядерной функции, откуда был запущен дров
    т.е.
    pop esi

    если речь идет о шлюзе, то сперва отлавливаем функцию в приложении, а далее спускаемся по цепочке до ядра
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    при чём здесь это :\
    Шеллкод может запустится откуда угодна и стек может быть любым.
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. call @f
    2. @@:
    3. pop esi
    4. @@:
    5. dec esi
    6. cmp word ptr [esi], "ZM"
    7. jnz @B
    находим свой образ,ищем импорт, там ловим любую апишку ядра, и аналогично ищем базу..
     
  8. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    FreeManCPM
    этот метод более близкий к реальности
    вобщем, более универсального способа, насколько я понял, нет =(
     
  9. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. szOur db 'Our Base address is 0x%08X',0
    2. szProc db 'Proc in kernel address is 0x%08X',0
    3. szKer db 'Kernel base address is 0x%08X',0
    4. proc get_kernel
    5.         call    @f
    6.      @@:
    7.         pop     esi
    8.         and     esi,0fffff000h
    9.  
    10.      @@:
    11.         mov     ax,word[esi]
    12.         cmp     ax,'ZM'
    13.         jz      @f
    14.         cmp     ax,'MZ'
    15.         jz      @f
    16.         sub     esi,1000h
    17.         jmp     @b
    18.      @@:
    19.         pusha
    20.         cinvoke DbgPrint,szOur,esi
    21.         popa
    22.  
    23.         push    esi
    24.         add     esi,[esi+3ch]
    25.  
    26.         mov     eax,[esi+80h]
    27.         pop     esi
    28.         add     eax,esi
    29.         mov     eax,[eax]
    30.         add     eax,esi
    31.         mov     eax,[eax]
    32.  
    33.         pusha
    34.         cinvoke DbgPrint,szProc,eax
    35.         popa
    36.  
    37.         and     eax,0fffff000h
    38.         mov     esi,eax
    39.       @@:
    40.         mov     ax,word[esi]
    41.         cmp     ax,'ZM'
    42.         jz      @f
    43.         cmp     ax,'MZ'
    44.         jz      @f
    45.         sub     esi,1000h
    46.         jmp     @b
    47.       @@:
    48.  
    49.         pusha
    50.         cinvoke DbgPrint,szKer,esi
    51.         popa
    52. retn
    53. endp
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. cld
    2. mov esi, dword [0FFDFF038h]  ; вместо этого лучше юзать sidt
    3. lodsd ; можно add esi, 4, но это длинее
    4. lodsd ; в eax - адрес в ntoskrnl.exe
    5. @@:
    6. dec eax
    7. cmp dword [eax], 00905A4Dh ; ищем начало MZ-заголовка
    8. jnz @b
    dec/cmp/jnz занимают меньшее количество байт, но если тебе важнее скорость то лучше идти по границам страниц.
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    может не сработать, т.к. после 'MZ' может быть что угодно, вплоть до нулей!

    лучше
    and word[eax],0x5A4D
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. @@:
    2. dec eax
    3. cmp dword [eax], 00905A4Dh ; ищем начало MZ-заголовка
    4. jnz @b
    грузится то все равно с выравниванием
    Код (Text):
    1. and eax,0fffff000h
    2. @@:
    3. cmp word [eax], 'MZ' ; ищем начало MZ-заголовка
    4. jz @f
    5. sub eax,1000h
    6. jmp @b
    7. @@:
     
  13. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    хмм, а почитать статью не дано? Windows Kernel-mode Payload Fundamentals.

    http://www.uninformed.org/?v=3