У кого-нибудь есть список в удобочитаемом виде функций ядра NT 5(речь о mov eax, something; int 2e, естественно описание что они делают и список аргументов. В природе существует?
Ну дык у Z0MBiE уже сто лет лежит и гуглица сразу по "int 2e" . Только это всё дело меняеться с каждым сервис паком , лучше в отладчике (или дизассемблере) самому искать если надо конкретно .
2bogrus Я смотрел лист от ZOMBiE, но там только до 199, а у меня 120F. Такое возможно? Привести кусок кода?
Такое возможно? Такое не только возможно, такое неизбежно. Номера в eax меняются с каждым билдом/сервиспаком. У MS есть специальный скрипт для перебивки этих индексов при каждом билде, если не ошибаюсь. Так что оставь ты эту затею и шурши что-нибудь сам.
2volodya В каком файле распологается обработчик 2e? Если можно, пример как получить этот адрес в SoftIce.
А что, по сайту искать уже не модно? Возьми, например, мою: http://wasm.ru/article.php?article=packers2 Мне лень объяснять одни и те же вещи по нескольку раз.
Вот ещё ссылка http://gl00my.chat.ru/nt/int2e.txt Вот MessageBeep двух видов (для w2ksp4) Код (Text): 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
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 не похож. Где ошибка?
techgl > Системные вызовы с номерами >= 1000h идут в win2k.sys - это GDI и т.п. Это 2я таблица - W32pServiceTable.
На KiSystemService не похож. KiSystemSerive - это немного не из той оперы. S_T_A_S_ все и сказал. Дополнительно рекомендую глянуть на: http://www.volynkin.ru/sdts.htm Сама теневая SST заполняется так: Код (Text): UserVerify(KeAddSystemServiceTable(W32pServiceTable, countTable, W32pServiceLimit, W32pArgumentTable, W32_SERVICE_NUMBER)); И теневая, и обычная SST имеют такую структуру: Код (Text): 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): Код (Text): 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 Напоминаю прототип: Код (Text): 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. На моем компе он выглядит так: Код (Text): .data:A018BBA0 W32pServiceLimit dd 280h Полагаю, теперь вопросы должны уйти.