Сейчас на форуме: asfa, Rio, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Как получить ImageBase процесса из драйвера
Посл.ответ Сообщение

Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 04 февраля 2013 11:08
· Личное сообщение · #1

Нужно прочесть память конкретного процесса, делаю по примеру так:
-ZwQuerySystemInformation(SystemProcessesAndThreadsInformation...)
-далее из PSYSTEM_PROCESS_INFORMATION получаем PID, имя процесса...
-открываем процесс ZwOpenProcess
-и собсно можем читать.

А где получить ImageBase процесса, чтоб правильно прочесть если адреса загрузки разные, в какой структуре искать?



Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

Создано: 04 февраля 2013 11:14
· Личное сообщение · #2

1. PsLookupProcessByProcessId()
2. KeStackAttachProcess()
3. PsGetProcessPeb()
4. Читаем, что нужно из Peb.
5. KeUnstackDetachProcess()
6. ObDereferenceObject()



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 04 февраля 2013 11:38
· Личное сообщение · #3

мож я что-то не так понимаю, но в PEB и в RTL_USER_PROCESS_PARAMETERS не вижу ImageBase
Code:
  1. typedef struct _PEB {
  2.   BYTE                          Reserved1[2];
  3.   BYTE                          BeingDebugged;
  4.   BYTE                          Reserved2[1];
  5.   PVOID                         Reserved3[2];
  6.   PPEB_LDR_DATA                 Ldr;
  7.   PRTL_USER_PROCESS_PARAMETERS  ProcessParameters;
  8.   BYTE                          Reserved4[104];
  9.   PVOID                         Reserved5[52];
  10.   PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
  11.   BYTE                          Reserved6[128];
  12.   PVOID                         Reserved7[1];
  13.   ULONG                         SessionId;
  14. } PEB, *PPEB;


Code:
  1. typedef struct _RTL_USER_PROCESS_PARAMETERS {
  2.   BYTE           Reserved1[16];
  3.   PVOID          Reserved2[10];
  4.   UNICODE_STRING ImagePathName;
  5.   UNICODE_STRING CommandLine;
  6. } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;




Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

Создано: 04 февраля 2013 11:43
· Личное сообщение · #4

Естественно не видишь. Откуда оно там будет в документации мс? Оно тут как второй PVOID из Reserved3.

Code:
  1. typedef struct _PEB
  2. {
  3.     BOOLEAN InheritedAddressSpace;
  4.     BOOLEAN ReadImageFileExecOptions;
  5.     BOOLEAN BeingDebugged;
  6.     union
  7.     {
  8.         BOOLEAN BitField;
  9.         struct
  10.         {
  11.             BOOLEAN ImageUsesLargePages : 1;
  12.             BOOLEAN IsProtectedProcess : 1;
  13.             BOOLEAN IsLegacyProcess : 1;
  14.             BOOLEAN IsImageDynamicallyRelocated : 1;
  15.             BOOLEAN SkipPatchingUser32Forwarders : 1;
  16.             BOOLEAN SpareBits : 3;
  17.         };
  18.     };
  19.     HANDLE Mutant;
  20.  
  21.     PVOID ImageBaseAddress;
  22.     PPEB_LDR_DATA Ldr;
  23.     PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
  24.  
  25. .....................
  26.  


| Сообщение посчитали полезным: Tolkin

Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 04 февраля 2013 12:09
· Личное сообщение · #5

Alchemistry
Спасибо за подсказки, буду пробовать. Еще вопросик, в PEB структуре для х64 смещения те же?



Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

Создано: 04 февраля 2013 12:12
· Личное сообщение · #6

Учесть размер указателя.

Windows 7 x64 SP1

lkd> dt nt!_PEB
+0x000 InheritedAddressSpace : UChar
+0x001 ReadImageFileExecOptions : UChar
+0x002 BeingDebugged : UChar
+0x003 BitField : UChar
+0x003 ImageUsesLargePages : Pos 0, 1 Bit
+0x003 IsProtectedProcess : Pos 1, 1 Bit
+0x003 IsLegacyProcess : Pos 2, 1 Bit
+0x003 IsImageDynamicallyRelocated : Pos 3, 1 Bit
+0x003 SkipPatchingUser32Forwarders : Pos 4, 1 Bit
+0x003 SpareBits : Pos 5, 3 Bits
+0x008 Mutant : Ptr64 Void
+0x010 ImageBaseAddress : Ptr64 Void
+0x018 Ldr : Ptr64 _PEB_LDR_DATA
+0x020 ProcessParameters : Ptr64 _RTL_USER_PROCESS_PARAMETERS



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 04 февраля 2013 14:05 · Поправил: Tolkin
· Личное сообщение · #7

а PsGetProcessPeb() - это недокументированная функа(ее параметры?)? она на всех осях будет работать?
и пойдет ли взамен ее использование
ZwQueryInformationProcess(phandle,ProcessBasicInformation...),
Code:
  1. typedef struct _PROCESS_BASIC_INFORMATION {
  2.     PVOID Reserved1;
  3.     PPEB PebBaseAddress;
  4.     PVOID Reserved2[2];
  5.     ULONG_PTR UniqueProcessId;
  6.     PVOID Reserved3;
  7. } PROCESS_BASIC_INFORMATION;





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 04 февраля 2013 14:42 · Поправил: hors
· Личное сообщение · #8

Tolkin пишет:
мож я что-то не так понимаю, но в PEB и в RTL_USER_PROCESS_PARAMETERS не вижу ImageBase


Tolkin пишет:
Alchemistry
Спасибо за подсказки, буду пробовать. Еще вопросик, в PEB структуре для х64 смещения те же?


Чтобы разобраться со всеми этими структурами, можно воспользоваться вот этой программой --> Link <--

Tolkin пишет:
и пойдет ли взамен ее использование
ZwQueryInformationProcess(phandle,ProcessBasicInformation...),


Пойдет.

-----
http://ntinfo.biz


| Сообщение посчитали полезным: Tolkin
 eXeL@B —› Вопросы новичков —› Как получить ImageBase процесса из драйвера
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати