Посл.ответ |
Сообщение |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 12:41 · Поправил: =TS= · Личное сообщение · #1
Есть такой код:
mov eax,fs:[eax].TEB.Peb
mov eax,[eax].PEB.Ldr
mov eax,[eax].PEB_LDR_DATA.InInitializationOrderModuleList.Flink // что в eax!???!
mov eax,[eax+8] // откуда в eax база ntdll.dll ? Какая структура используется?
Если считать что в 3 строке в eax адрес _LDR_DATA_TABLE_ENTRY, то откуда база по смещению 8 ? А по [eax+0x18] также отнюдь не лежит дворд базы библиотеки.
еще один вариант примера выше:
mov eax,fs:[eax].TEB.Peb
mov eax, [eax+PEB.Ldr]
mov esi, [eax+PEB_LDR_DATA.InInitializationOrderModuleList.Flink]
lodsd
mov ebx, [eax+8]
тут вообще не понятно, почему оно работает...
----- DREAMS CALL US | Сообщение посчитали полезным: |
|
Ранг: 117.1 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 17 октября 2007 14:28 · Личное сообщение · #2
=TS= пишет:
mov eax,[eax+8] // откуда в eax база ntdll.dll ? Какая структура используется?
LDR_DATA_TABLE_ENTRY
а из нее DllBase поле
----- Security through obscurity is just an illusion | Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 14:41 · Личное сообщение · #3
typedef struct _LDR_DATA_TABLE_ENTRY
{
LIST_ENTRY InLoadOrderModuleList; /* 00h */
LIST_ENTRY InMemoryOrderModuleList; /* 08h */
LIST_ENTRY InInitializationOrderModuleList; /* 10h */
PVOID DllBase; /* 18h */
PVOID EntryPoint; /* 1Ch */
ULONG SizeOfImage; /* 20h */
UNICODE_STRING FullDllName; /* 24h */
UNICODE_STRING BaseDllName; /* 2Ch */
ULONG Flags; /* 34h */
USHORT LoadCount; /* 38h */
USHORT TlsIndex; /* 3Ah */
union
{
LIST_ENTRY HashLinks; /* 3Ch */
PVOID SectionPointer; /* 3Ch */
};
ULONG CheckSum; /* 44h */
union
{
ULONG TimeDateStamp; /* 48h */
PVOID LoadedImports; /* 48h */
};
PVOID EntryPointActivationContext; /* 4Ch */
PVOID PatchInformation; /* 50h */
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
----- DREAMS CALL US | Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 14:53 · Поправил: =TS= · Личное сообщение · #4
Походу каждый из элемента списка указывает на другой аналогичный элемент списка из аналогичной структуры (т.е. структура "нанизана" на элементы списка).
поэтому так как у третьего элемента структуры смещение от начала структуры LDR_DATA_TABLE_ENTRY 10h (2*(4+4)), то смещение поля DllBase от адреса элемента списка в структуре 18h-10h=8h
и пример выглядит так:
mov eax,fs:[eax].TEB.Peb
mov eax,[eax].PEB.Ldr
mov eax,[eax].PEB_LDR_DATA.InInitializationOrderModuleList.Flink // eax== LDR_DATA_TABLE_ENTRY.InInitializationOrderModuleList.Flink
mov eax,[eax-LDR_DATA_TABLE_ENTRY.InInitializationOrderModuleList.Flink]-LDR_DATA_TABLE_ENTRY.DllBase
----- DREAMS CALL US | Сообщение посчитали полезным: |
Ранг: 66.8 (постоянный) Активность: 0.03↘0 Статус: Участник
|
Создано: 17 октября 2007 14:55 · Поправил: UsAr · Личное сообщение · #5
после
mov eax,[eax].PEB_LDR_DATA.InInitializationOrderModuleList.Flink
eax указывает на InInitializationOrderModuleList в LDR_MODULE
смещение InInitializationOrderModuleList = 10h, а смещение LDR_MODULE.BaseAddress = 18h
стало быть относительно InInitializationOrderModuleList = 8h, отсюда и
mov eax,[eax+8]
=TS= пишет:
еще один вариант примера выше:
а этот вариант получает базу kernel32, а не ntdll как 2ой модуль по LDR_MODULE
1ый это ntdll, а 0ой сам exe
| Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 15:01 · Поправил: =TS= · Личное сообщение · #6
UsAr
 разобрался почти одновременно с твоим обьяснением, спасибо
UsAr пишет:
а этот вариант получает базу kernel32, а не ntdll как 2ой модуль по LDR_MODULE
1ый это ntdll, а 0ой сам exe
проверил по третьему варианту -- ntdll.dll (смотрел в ольке)
MOV EAX, DWORD PTR FS:[30]
MOV EAX, DWORD PTR DS:[EAX+C]
MOV ESI, DWORD PTR DS:[EAX+14]
LODS DWORD PTR DS:[ESI]
MOV EBP, DWORD PTR DS:[EAX+10] ; ntdll.7C900000
----- DREAMS CALL US | Сообщение посчитали полезным: |
Ранг: 66.8 (постоянный) Активность: 0.03↘0 Статус: Участник
|
Создано: 17 октября 2007 15:07 · Поправил: UsAr · Личное сообщение · #7
скопировал код и скомпилил
все-таки kernel32 =)
update:
чето уже другой код?)
| Сообщение посчитали полезным: |
Ранг: 115.1 (ветеран), 3thx Активность: 0.07↘0 Статус: Участник
|
Создано: 17 октября 2007 15:15 · Личное сообщение · #8
=TS= пишет:
# Malware KilleR #
этот код юзается в большинстве эксплоитов, как можно при такой-то подписи задавать детские вопросы =)
| Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 15:19 · Поправил: =TS= · Личное сообщение · #9
__
Тема создавалась, потому что понятно ЧТО там лежит, но не понятно было В ТОЧНОСТИ - ПОЧЕМУ...
UsAr
да, все правильно, первый и третий вариант дает ntdll.dll, второй - kernel32.dll
----- DREAMS CALL US | Сообщение посчитали полезным: |
Ранг: 66.8 (постоянный) Активность: 0.03↘0 Статус: Участник
|
Создано: 17 октября 2007 15:36 · Поправил: UsAr · Личное сообщение · #10
...
| Сообщение посчитали полезным: |
 Ранг: 251.8 (наставник), 17thx Активность: 0.12↘0 Статус: Участник Seeker
|
Создано: 17 октября 2007 15:43 · Личное сообщение · #11
Все, всем спасибо  , тема закрыта. При желании админы могут ее немного "причесать".
----- DREAMS CALL US | Сообщение посчитали полезным: |