NT Kernel

Тема в разделе "WASM.RESEARCH", создана пользователем techgl, 26 авг 2004.

  1. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    У кого-нибудь есть список в удобочитаемом виде функций ядра NT 5(речь о mov eax, something; int 2e;), естественно описание что они делают и список аргументов.

    В природе существует?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ну дык у Z0MBiE уже сто лет лежит и гуглица сразу по "int 2e" .

    Только это всё дело меняеться с каждым сервис паком , лучше в отладчике (или дизассемблере) самому искать если надо конкретно .
     
  3. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    2bogrus

    Я смотрел лист от ZOMBiE, но там только до 199, а у меня 120F. Такое возможно? Привести кусок кода?
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Такое возможно?



    Такое не только возможно, такое неизбежно. Номера в eax меняются с каждым билдом/сервиспаком. У MS есть специальный скрипт для перебивки этих индексов при каждом билде, если не ошибаюсь. Так что оставь ты эту затею и шурши что-нибудь сам.
     
  5. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    2volodya

    В каком файле распологается обработчик 2e?

    Если можно, пример как получить этот адрес в SoftIce.
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    А что, по сайту искать уже не модно? Возьми, например, мою:

    http://wasm.ru/article.php?article=packers2

    Мне лень объяснять одни и те же вещи по нескольку раз.
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Вот ещё ссылка http://gl00my.chat.ru/nt/int2e.txt

    Вот MessageBeep двух видов (для w2ksp4)
    Код (Text):
    1. push    0
    2. call    MessageBeep
    3. push    500
    4. call    Sleep
    5. push    24h
    6. push    0
    7. mov     eax,1139h ; beep
    8. mov     edx,esp
    9. int     2Eh
    10. push    0
    11. call    ExitProcess
     
  8. techgl

    techgl New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    42
    2 volodya

    Почитал я твою статью. Вот исследуем программу. Сбросили дамп, но все вызовы Windows API остались в виде прямых адресов, тоесть таблицу импорта востановить не удалось.

    В программе call xxxxxxxx. Идем туда:

    mov eax, 120F

    lea edx, [esp+04]

    int 2e

    ret 1c

    типичный системный вызов.

    Руководствуясь твоей статьей:

    exp KeSirvice

    dd KeServiceDescriptorTable

    ...

    ...

    f8

    ...

    Опа, а у нас 120F.

    Ладно, сморим кто у нас обработчик:

    idt 2e

    ntoskrn!ExReleaseResourceForThread+0b

    На KiSystemService не похож.

    Где ошибка?
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    techgl >




    Системные вызовы с номерами >= 1000h идут в win2k.sys - это GDI и т.п.

    Это 2я таблица - W32pServiceTable.
     
  10. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    На KiSystemService не похож.



    KiSystemSerive - это немного не из той оперы.



    S_T_A_S_ все и сказал. Дополнительно рекомендую глянуть на:



    http://www.volynkin.ru/sdts.htm



    Сама теневая SST заполняется так:


    Код (Text):
    1.     UserVerify(KeAddSystemServiceTable(W32pServiceTable,
    2.                                        countTable,
    3.                                        W32pServiceLimit,
    4.                                        W32pArgumentTable,
    5.                                        W32_SERVICE_NUMBER));
    6.  




    И теневая, и обычная SST имеют такую структуру:


    Код (Text):
    1. typedef struct _KSERVICE_TABLE_DESCRIPTOR {
    2.     PULONG_PTR Base;
    3.     PULONG Count;
    4.     ULONG Limit;
    5. #if defined(_IA64_)
    6.     LONG TableBaseGpOffset;
    7. #endif
    8.     PUCHAR Number;
    9. } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;




    Заполняются в KeAddSystemServiceTable. К сожалению, я не нашел определений аргументов и т.п., но есть IDA :) Дизасмим win32k.sys и имеем (у мя W2k SP4):


    Код (Text):
    1.  
    2. INIT:A01925FD                 push    ebx
    3. INIT:A01925FE                 push    offset W32pArgumentTable
    4. INIT:A0192603                 push    W32pServiceLimit
    5. INIT:A0192609                 push    esi
    6. INIT:A019260A                 push    offset W32pServiceTable
    7. INIT:A019260F                 call    ds:KeAddSystemServiceTable
    8.  




    Напоминаю прототип:


    Код (Text):
    1.  
    2. BOOLEAN
    3. KeAddSystemServiceTable(
    4.     IN PULONG_PTR Base,
    5.     IN PULONG Count OPTIONAL,
    6.     IN ULONG Limit,
    7.     IN PUCHAR Number,
    8.     IN ULONG Index
    9.     )
    10.  
    11. /*++
    12.  
    13. Routine Description:
    14.  
    15.     This function allows the caller to add a system service table
    16.     to the system
    17.  
    18. Arguments:
    19.  
    20.     Base - Supplies the address of the system service table dispatch
    21.         table.
    22.  
    23.     Count - Supplies an optional pointer to a table of per system service
    24.         counters.
    25.  
    26.     Limit - Supplies the limit of the service table. Services greater
    27.         than or equal to this limit will fail.
    28.  
    29.     Arguments - Supplies the address of the argument count table.
    30.  
    31.     Index - Supplies index of the service table.
    32.  
    33. Return Value:
    34.  
    35.     TRUE - The operation was successful.
    36.  
    37.     FALSE - the operation failed. A service table is already bound to
    38.         the specified location, or the specified index is larger than
    39.         the maximum allowed index.
    40.  
    41. --*/
    42.  






    Нас интересует Limit. На моем компе он выглядит так:


    Код (Text):
    1. .data:A018BBA0 W32pServiceLimit dd 280h




    Полагаю, теперь вопросы должны уйти.