|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 17, 2004 06:20:55 заинтересовался хешированием hWnd , начал разбираться но возникли определенные трудности со страницой в которой находиться TEB , сам то TEB хорошо документирован :) - достать по нему инфу нет проблем, но я не могу найти где описано содержание остальной части страницы |
|
|
Дата: Июл 17, 2004 18:30:12TEB STRUCT
Tib NT_TIB <> ; 000h
EnvironmentPointer PVOID ? ; 01Ch
Cid CLIENT_ID <> ; 020h
ActiveRpcInfo PVOID ? ; 028h
ThreadLocalStoragePointer PVOID ? ; 02Ch
Peb PVOID ? ; 030h PTR PEB
LastErrorValue DWORD ? ; 034h
CountOfOwnedCriticalSections DWORD ? ; 038h
CsrClientThread PVOID ? ; 03Ch
Win32ThreadInfo PVOID ? ; 040h
Win32ClientInfo DWORD 1Fh dup(?) ; 044h
WOW32Reserved PVOID ? ; 0C0h
CurrentLocale DWORD ? ; 0C4
FpSoftwareStatusRegister DWORD ? ; 0C8
SystemReserved1 PVOID 36h dup(?) ; 0CC
Spare1 PVOID ? ; 1A4
ExceptionCode DWORD ? ; 1A8
SpareBytes1 DWORD 28h dup(?) ; 1AC
SystemReserved2 PVOID 0Ah dup(?) ; 24C
GdiRgn DWORD ? ; 274
GdiPen DWORD ? ; 278
GdiBrush DWORD ? ; 27C
RealClientId CLIENT_ID <> ; 6B4h
GdiCachedProcessHandle PVOID ? ;
GdiClientPID DWORD ? ;
GdiClientTID DWORD ? ;
GdiThreadLocaleInfo PVOID ? ;
UserReserved PVOID 5 dup(?) ;
GlDispatchTable PVOID 118h dup(?) ;
GlReserved1 DWORD 1Ah dup(?) ;
GlReserved2 PVOID ? ;
GlSectionInfo PVOID ? ;
GlSection PVOID ? ;
GlTable PVOID ? ;
GlCurrentRC PVOID ? ;
GlContext PVOID ? ;
LastStatusValue DWORD ? ; BF4h
StaticUnicodeString UNICODE_STRING <> ;
StaticUnicodeBuffer WORD 105h dup(?) ; WCHAR
DeallocationStack PVOID ? ;
TlsSlots PVOID 40h dup(?) ;
TlsLinks LIST_ENTRY <> ; 0
Vdm PVOID ? ;
ReservedForNtRpc PVOID ? ;
DbgSsReserved PVOID 2 dup(?) ;
HardErrorDisabled DWORD ? ; F28h
Instrumentation PVOID 10h dup(?) ;
WinSockData PVOID ? ;
GdiBatchCount DWORD ? ;
Spare2 DWORD ? ;
Spare3 DWORD ? ;
Spare4 DWORD ? ;
ReservedForOle PVOID ? ;
WaitingOnLoaderLock DWORD ? ;
StackCommit PVOID ? ;
StackCommitMax PVOID ? ;
StackReserved PVOID ? ;
TEB ENDS
PTEB typedef PTR TEB
Где нашел не помню, от какой версии не знаю, насколько это верно не знаю :) Но какие-то поля правильны. Можно ещё в исходниках nt4 порыться (в w2k не нашел). Там должна наверное быть. |
|
|
Дата: Июл 18, 2004 05:14:10 У меня эта структура только до 40h включительно описана, и похоже полностью совпадает с твоим вариантом, что до интересующей меня части: 6сс и 6fc, то похоже там что-то нето написано, во всяком случае я не это ожидал :( |
|
|
Дата: Июл 18, 2004 08:56:38 · Поправил: comrade |
|
|
Дата: Июл 20, 2004 05:18:17 comrade, ссылки немного не по теме... Four-F, нарыл на http://ntprog.by.ru/_def.htm#TEB еще одно такоеже описание структы, но оно слегка не совпадает с твоим :( Похоже придется мне осваивать методологию реверсинга. |
|
|
Дата: Июл 20, 2004 07:43:54 Mayor ну ты блин и задал вопросик |
|
|
Дата: Июл 21, 2004 06:29:59 CARDINAL просто я еще слаб в реверсинге, лет 5 со времен z80 нормально не практиковался, придет время сам разбираться начну, ну а пока юзаю готовое |
|
|
Дата: Июл 22, 2004 01:39:04 Mayor, у меня таких определений 5 или 6 и всё чуть-чуть отличаются. Скорее всего, они просто от разный версий оси. А в исходниках nt4 порыться лень было? Таки мне пришлось. В nt4_src\sdk\inc\ntpsapi.h написано вот что: typedef struct _TEB {
NT_TIB NtTib;
PVOID EnvironmentPointer;
CLIENT_ID ClientId;
PVOID ActiveRpcHandle;
PVOID ThreadLocalStoragePointer;
PPEB ProcessEnvironmentBlock;
ULONG LastErrorValue;
ULONG CountOfOwnedCriticalSections;
PVOID CsrClientThread;
PVOID Win32ThreadInfo; // PtiCurrent
ULONG Win32ClientInfo[WIN32_CLIENT_INFO_LENGTH]; // User32 Client Info
PVOID WOW32Reserved; // used by WOW
LCID CurrentLocale;
ULONG FpSoftwareStatusRegister;
PVOID SystemReserved1[54]; // Used by FP emulator
PVOID Spare1; // unused
NTSTATUS ExceptionCode; // for RaiseUserException
UCHAR SpareBytes1[40];
PVOID SystemReserved2[10]; // Used by user/console for temp obja
GDI_TEB_BATCH GdiTebBatch; // Gdi batching
ULONG gdiRgn;
ULONG gdiPen;
ULONG gdiBrush;
CLIENT_ID RealClientId;
HANDLE GdiCachedProcessHandle;
ULONG GdiClientPID;
ULONG GdiClientTID;
PVOID GdiThreadLocalInfo;
PVOID UserReserved[5]; // unused
PVOID glDispatchTable[280]; // OpenGL
ULONG glReserved1[26]; // OpenGL
PVOID glReserved2; // OpenGL
PVOID glSectionInfo; // OpenGL
PVOID glSection; // OpenGL
PVOID glTable; // OpenGL
PVOID glCurrentRC; // OpenGL
PVOID glContext; // OpenGL
ULONG LastStatusValue;
UNICODE_STRING StaticUnicodeString;
WCHAR StaticUnicodeBuffer[STATIC_UNICODE_BUFFER_LENGTH];
PVOID DeallocationStack;
PVOID TlsSlots[TLS_MINIMUM_AVAILABLE];
LIST_ENTRY TlsLinks;
PVOID Vdm;
PVOID ReservedForNtRpc;
PVOID DbgSsReserved[2];
ULONG HardErrorsAreDisabled;
PVOID Instrumentation[16];
PVOID WinSockData; // WinSock
ULONG GdiBatchCount;
ULONG Spare2;
ULONG Spare3;
ULONG Spare4;
PVOID ReservedForOle;
ULONG WaitingOnLoaderLock;
} TEB;
typedef TEB *PTEB;
Это, так сказать, официальная версия верная не 100% :) Но опять же только для NT4 какойто-то там sp. |
|
|
Дата: Июл 22, 2004 06:31:27 Скорее всего, они просто от разный версий оси. А в исходниках nt4 порыться лень было? Видишь ли я вообще не знал что они существуют, судя по пути я должен посмотреть в своем DDK\SDK ? может тебе проще было бы скинуть ссылку мне на все 5 версий teb ? За еще одну struc teb большое спасибо, мне нужно будет немного времени чтобы разобраться в смещениях :) |
|
|
Дата: Июл 22, 2004 16:12:52 [ Mayor: судя по пути я должен посмотреть в своем DDK\SDK ? ] Зря время потратишь.
#define TLS_MINIMUM_AVAILABLE 64
#define WIN32_CLIENT_INFO_LENGTH 31
#define GDI_BATCH_BUFFER_SIZE 310
typedef struct _GDI_TEB_BATCH {
ULONG Offset;
ULONG HDC;
ULONG Buffer[GDI_BATCH_BUFFER_SIZE];
} GDI_TEB_BATCH,*PGDI_TEB_BATCH;
Если этого недостаточно, могу скинуть на мыло весь ntpsapi.h. 5-6 тебов где-то по винту разбросаны. Да тебе это кроме путаницы ничего не даст. Глянь по этим ссылкам и нете пошукай. http://board.win32asmcommunity.net/showthread.php?s=63557c834a2ec969c7 32c81762f02f24&threadid=11081 http://board.win32asmcommunity.net/showthread.php?s=63557c834a2ec969c7 32c81762f02f24&threadid=14185 |
|
|
Дата: Июл 24, 2004 07:11:04 Единственное что удалось понять - то что младшие 6 битов HWND образуют индекс в одной из таблиц объектов окна, причем к объектам всех процессов можно получить доступ из пользовательского режима :-) как это не типично для Windows. По крайней мере для чтения, запись в них вроде идет через sysenter, а то был бы крутой exploit, но я не уверен, :( к сожалению не знаю как в SoftICE получить тип страницы через виртуальный адресс. К сожалению, просто мало опыта, не вижу с какого конца прицепиться - код постоянно сравнивает содержимое разных таблиц с глобальными переменными и полями TEB и делает условные переходы. Кажется еще немного и на пару месяцев отпадет охота реверсировать что-либо :( Насчет TEB только понял, что fs:6f4 содержит текущий hWnd ( передаваемый к примеру в WindowProc) а fs:6f8 ссылку на его объект, последнее можно проверить: pWO->0 == hWnd ; pWO->60h == offset WindowProc; но определений TEB, содержащих эти поля мне не встречалось :( |
|
|
Дата: Июл 24, 2004 12:14:21 [ Mayor: Единственное что удалось понять - то что младшие 6 битов HWND образуют индекс в одной из таблиц объектов окна ] Прочти "USER and GDI Objects" в доке "Using SoftICE". [ Mayor: причем к объектам всех процессов можно получить доступ из пользовательского режима ] http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=5326 [ Mayor: не знаю как в SoftICE получить тип страницы через виртуальный адресс. ] page <вирт.адр.>. Только она контекстно зависима. Обратная операция phys <физ.аддр.>. Она естественно контекстно независима. Для page переключись сначала на интересующий тебя процесс addr <имя процесса или указатель на EPROCESS> и читай "SoftICE Command Reference Help" |
|
|
Дата: Июл 27, 2004 06:33:10 page <вирт.адр.>. Оказалось что объекты доступны из user mode только для чтения . С остальным пока разбираюсь ... |
|
|
Дата: Июл 28, 2004 06:35:32 Вроде начал понимать: lowword hwnd это индекс в " Global Master User Table "; Понимание того как получить адрес начала этой таблицы находится далеко за пределами моих реверсинговых способностей, код его берет из глобальной переменной user32.dll, как эта переменая инициализируется просто невозможно понять :( В этой таблице храняться структуры MasterUserObject размером 12 байт, hiword hwnd должен совпадать с полем MUO->Instance иначе дескриптер уже не актуален, далее в MUO->type должно храниться 1 - это идентификатор объекта типа окна, далее MUO ->flags как-то проверяются, но что они означают я тоже не в силах понять :( В MUO->pUserObject хранит непосредственно адрес на сам объект в таблице UserObject с ее адресом все проще она храниться сразу в адресном пространстве Ядра и UserMode в последнем есстественно доступна только для чтения: в fs:6e4 храниться адрес структуры типа { dword pKernelStartUOT; dword pKernelEndOUT; } в fs:6e8 храница разница = pKernelStartUOT - pUserStartUOT . Таким образом можно получить ее адрес в пользовательском режиме, но без адреса MUOT все это бесполезно :( может кому-нить пригодиться: MasterUserObject { PVOID pUserObject; byte type; byte flags; word Instance; dword АХЗ ; } |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.058 |