· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› NT Kernel

Посл.отвђт Сообщенiе


Дата: Авг 26, 2004 14:45:08

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


Дата: Авг 27, 2004 00:31:59

Ну дык у Z0MBiE уже сто лет лежит и гуглица сразу по "int 2e" .
Только это всё дело меняеться с каждым сервис паком , лучше в отладчике (или дизассемблере) самому искать если надо конкретно .


Дата: Авг 27, 2004 18:34:11

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


Дата: Авг 27, 2004 18:38:12

Такое возможно?

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


Дата: Авг 27, 2004 21:21:33

2volodya
В каком файле распологается обработчик 2e?
Если можно, пример как получить этот адрес в SoftIce.


Дата: Авг 27, 2004 21:33:06

А что, по сайту искать уже не модно? Возьми, например, мою:
http://wasm.ru/article.php?article=packers2
Мне лень объяснять одни и те же вещи по нескольку раз.


Дата: Авг 27, 2004 21:51:11

Вот ещё ссылка http://gl00my.chat.ru/nt/int2e.txt
Вот MessageBeep двух видов (для w2ksp4)
push    0
call    MessageBeep
push    500
call    Sleep
push    24h
push    0
mov     eax,1139h ; beep
mov     edx,esp
int     2Eh
push    0
call    ExitProcess


Дата: Авг 28, 2004 18:14:51

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 не похож.
Где ошибка?


Дата: Авг 29, 2004 07:22:39

techgl > „там только до 199, а у меня 120F. Такое возможно?“

Системные вызовы с номерами >= 1000h идут в win2k.sys - это GDI и т.п.
Это 2я таблица - W32pServiceTable.


Дата: Авг 30, 2004 19:09:46

На KiSystemService не похож.

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

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

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

Сама теневая SST заполняется так:
    UserVerify(KeAddSystemServiceTable(W32pServiceTable,
                                       countTable,
                                       W32pServiceLimit,
                                       W32pArgumentTable,
                                       W32_SERVICE_NUMBER));


И теневая, и обычная SST имеют такую структуру:
typedef struct _KSERVICE_TABLE_DESCRIPTOR {
    PULONG_PTR Base;
    PULONG Count;
    ULONG Limit;
#if defined(_IA64_)
    LONG TableBaseGpOffset;
#endif
    PUCHAR Number;
} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;


Заполняются в KeAddSystemServiceTable. К сожалению, я не нашел определений аргументов и т.п., но есть IDA :) Дизасмим win32k.sys и имеем (у мя W2k SP4):
INIT:A01925FD                 push    ebx
INIT:A01925FE                 push    offset W32pArgumentTable
INIT:A0192603                 push    W32pServiceLimit
INIT:A0192609                 push    esi
INIT:A019260A                 push    offset W32pServiceTable
INIT:A019260F                 call    ds:KeAddSystemServiceTable


Напоминаю прототип:
BOOLEAN
KeAddSystemServiceTable(
    IN PULONG_PTR Base,
    IN PULONG Count OPTIONAL,
    IN ULONG Limit,
    IN PUCHAR Number,
    IN ULONG Index
    )

/*++

Routine Description:

    This function allows the caller to add a system service table
    to the system

Arguments:

    Base - Supplies the address of the system service table dispatch
        table.

    Count - Supplies an optional pointer to a table of per system service
        counters.

    Limit - Supplies the limit of the service table. Services greater
        than or equal to this limit will fail.

    Arguments - Supplies the address of the argument count table.

    Index - Supplies index of the service table.

Return Value:

    TRUE - The operation was successful.

    FALSE - the operation failed. A service table is already bound to
        the specified location, or the specified index is larger than
        the maximum allowed index.

--*/



Нас интересует Limit. На моем компе он выглядит так:
.data:A018BBA0 W32pServiceLimit dd 280h


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


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039