| Посл.ответ | 
Сообщение | 
  Ранг: 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  | Сообщение посчитали полезным:  |