· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› KeServiceDescriptorTable

. 1 . 2 . >>

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


Дата: Окт 28, 2003 22:17:08 · Поправил: dragon

Эта штука экспортируется из ntoskrnl. Подскажите, что она содержит, а то в DDK нет, да и вообще нигде нет. Это встречается в драйвере, код примерно такой:

mov esi, offset KeServiceDescriptorTable
add esi, 1000h
;т.е. типа в esi теперь и есть адрес этой самой KeServiceDescriptorTable
mov ecx, <какое то число>
mov eax, 0FFDFF120h ;константа

далее так:
_text:000172D9 cmp [esi], eax
_text:000172DB jz loc_0_174F1
_text:000172E1 dec esi
_text:000172E2 dec ecx
_text:000172E3 jnz short loc_0_172D9

понятно, что ищется вхожление константы 0FFDFF120, только не понятно, что в это таблице находится и в каком формате.


Дата: Окт 28, 2003 22:46:33 · Поправил: Four-F

Ох... В ддк её действительно нет, а насчет нигде ты зря. В книге Шрайбера достаточно подробно описана. Если пороешься хорошенько в сети, найдешь как минимум 2-3 статьи где она упоминается. В общем KeServiceDescriptorTable это указатель на SERVICE_DESCRIPTOR_TABLE.
SERVICE_DESCRIPTOR_TABLE STRUCT               ; sizeof = 40h
    ntoskrnl    SYSTEM_SERVICE_TABLE    <>  ; ntoskrnl.exe (native api)
    win32k      SYSTEM_SERVICE_TABLE    <>  ; win32k.sys   (gdi/user)
    iis         SYSTEM_SERVICE_TABLE    <>  ; Internet Information Services
    Table4      SYSTEM_SERVICE_TABLE    <>  ; reserved
SERVICE_DESCRIPTOR_TABLE ENDS

SYSTEM_SERVICE_TABLE STRUCT         ; sizeof = 10h
    pServiceTable   PVOID       ?   ; array of entry points
    pCounterTable   PDWORD      ?   ; array of usage counters
    dwServiceLimit  DWORD       ?   ; number of table entries
    pArgumentTable  PBYTE       ?   ; array of byte counts
SYSTEM_SERVICE_TABLE ENDS


pServiceTable - указатель на массив с точками входа сервисов ядра.
dwServiceLimit - кол-во этих сервисов.
pArgumentTable - указатель на массив с кол-вом параметров каждого сервиса.

По адресу 0FFDFF120h мапится структура KPRCB. Она охриненного размера, вот начало:
KPRCB STRUCT

    ; Major and minor version numbers of the PCR.

    MinorVersion    WORD    ?
    MajorVersion    WORD    ?

    ; Start of the architecturally defined section of the PRCB. This section
    ; may be directly addressed by vendor/platform specific HAL code and will
    ; not change from version to version of NT.

    CurrentThread   PVOID       ? ; 04h PTR KTHREAD
    NextThread      PVOID       ? ; 08h PTR KTHREAD
    IdleThread      PVOID       ? ; 0Ch PTR KTHREAD
    Number          CHAR        ? ; 10h
    Reserved        CHAR        ? ; 11h
    BuildType       WORD        ? ; 12h
    SetMember       KAFFINITY   ? ; 14h

    ; End of the architecturally defined section of the PRCB. This section
    ; may be directly addressed by vendor/platform specific HAL code and will
    ; not change from version to version of NT.

    ; To be continued...

KPRCB ENDS
PKPRCB typedef PTR KPRCB


Насчет кода, который ты привел. Ты, похоже, что-то важное опустил, т.к. код очень странный. Откуда это? Дай полный кусок.


Дата: Окт 28, 2003 22:52:28

Four-F
Если пороешься хорошенько в сети, найдешь как минимум 2-3 статьи где она упоминается

а ты редиска :(


Дата: Окт 28, 2003 23:16:59

Four-F
Это кусок кода из последней версии XtremeProtector, из его драйвера. Может чтобы распаковать всё это и не надо, но мне интересно не просто распаковать, а понять, как он устроен. Полный код привести не могу, там полно Scrambled-кода, я эти инструкции из мусора вытащил. И ещё не понятно - поиск начинается в обратном направлении со смещения 1000h от KeServiceDescriptorTable в обратном направлении, и ищется число 0FFDFF120h, просто непонятно, зачем вхождение адреса искать. В общем спасибо, буду дальше копаться...

volodya
Вроде где-то слышал, что у тебя книг много. Может быть скинешь на мыло, или хотя бы ссылку дашь, а то полезная книжка.


Дата: Окт 29, 2003 00:33:29

dragon

Ссылок на книги в этом форуме не будет принципиально. Шрайбера в электронном варианте у меня нет. Если тебе нужна литература от меня, то какая в том выгода мне? Я не дом благотворительности. Хочешь написать статью для сайта - тогда помогу. Нет - не обессудь.


Дата: Окт 29, 2003 09:21:36

Могу написать статью про то, как плагины для IDA писать на Intel C++ или VC++ на примере простого. Просто об этом нигде не написано, по крайней мре на русском. Так как думаешь, нужна такая статья?


Дата: Окт 29, 2003 10:43:56

[ dragon: ...просто непонятно, зачем вхождение адреса искать. ]

А... понятно. Это он ищет _KiProcessorBlock.
У тя символы в айс влиты? Если нет, то это большая ошибка.
Тяни PDB для ntoskrnl с помощью SymbolRetriever.
Вливай его в айс и в иду. Если стандартный плагин иды откажется принимать PDB, юзай PDBPlus. volodya его выкладывал на сайт.


[ volodya: а ты редиска :( ]

Это почему?


[ dragon: Так как думаешь, нужна такая статья? ]

Конечно нужна.


Дата: Окт 29, 2003 18:06:52

dragon

Да. Оставляй свое мыло. Будем говорить.


Дата: Окт 29, 2003 20:01:33

Four-F
Символы то я возьму, но надо ещё и описание всех этих структур, так что без какой-нибудь книги про NT ядро мне не обойтись.

volodya
Я могу в эти выходные статью написать. Единственное что на ачме не получиться, слишком много include файлов переделывать придёться. Поэтому я и хочу для Intel C++ без Runtime library. В общем, мыло - d t d c s @ m a i l . r u


Дата: Окт 29, 2003 20:26:25

Конечно, без инфы тут делать неча, но в данном случае тебе должно быть интересно не строение структуры SERVICE_DESCRIPTOR_TABLE и т.п., а зачем драйвер ищет KiProcessorBlock. Ведь в переменной KiProcessorBlock хранится адрес структуры KPRCB, но он и так известен и всегда равен 0FFDFF120h или fs:120h, что в режиме ядра то же самое. Так вот, зачем драйвер ищет заранее известный адрес? Что происходит потом?

Тут один чел, недели три назад, грозился отсканить Шрайбера и выложить у себя на сайте. Намек понял? Да простит меня достопочтенный volodya :-) Ну или в магазин беги, если она еще продается.


Дата: Окт 29, 2003 22:07:59

dragon

Я положил на сайт поправленный w2k_def.h. Глянь туда. Кроме того, есть вторая часть упаковщиков. Скоро Edmond ее сверстает. Редиска Four-F мог бы и упомянуть ;(


Дата: Окт 29, 2003 22:53:42

Дык чего упоминать то? И так уже столько анонсов было, что практически все ждут не дождутся ;-p К тому же твоя статья этого вопроса только вскользь касается, если мне память не изменяет, а у того же Шрайбера очень конкретно расписано.

А насчет w2k_def.h я забыл, как и о том, что обещал w2k.idc сделать :-) Вот щас тока вспомнил.


Дата: Окт 29, 2003 23:02:59

Four-F

Тю, так понятно, что мне до Шрайбера не добросить. То ж, все таки, Шрайбер (с придыханием).

А насчет w2k_def.h я забыл, как и о том, что обещал w2k.idc сделать :-)

Во-во. idc я тоже жду.


Дата: Окт 29, 2003 23:09:43

Тут ещё проблема, если пытаться отлаживать этот код, то комп перезагружается, так что придёться только IDA обойтись. А вот w2k_def.h - хороший файл, хоть теперь не вслепую копаться буду. А что это за w2k.idc?


Дата: Окт 29, 2003 23:30:42

Если внимательно читал мою статью - уже должен знать. Если не читал - то Four-F слабал классный скрипт для IDA. Надо полагать, со структурами в IDA разбираться умеешь. Вот, когда, скажем, видишь код типа:
mov eax, 0FFDFF120h 
mov al, [eax+134h]


то ручками заморишься, а если со скриптиком, то преобразуется в:
mov eax, 0FFDFF120h 
mov al, [eax+KTHREAD.PreviousMode]

. 1 . 2 . >>


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