Вопросы по PEB

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 13 дек 2010.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    По тому что нагуглил попробывал код написать,в котором ищется информация по PEB в вирт. АП(пока только в своем).
    В связи с этим возникли вопросы
    1.С каждым разом адрес этой стуктуры меняется(7FFDFxxx).Причем только последнии 3 символа в цифре.Почему?
    2.В RTL_USER_PROCESS_PARAMETERS.CommandLine и ImagePathName,одно и то же.Только в 1м оно с кавычками а во 2м без.Так и должно быть?
    3.Почему то работает не всегда и везде.Иногда в PEB.RTL_USER_PROCESS_PARAMETERS находится какая то левая пурга.
    Код (Text):
    1. typedef struct _LSA_UNICODE_STRING {
    2.   USHORT Length;
    3.   USHORT MaximumLength;
    4.   PWSTR  Buffer;
    5. } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING;
    6. typedef struct _PEB_LDR_DATA {
    7.   BYTE       Reserved1[8];
    8.   PVOID      Reserved2[3];
    9.   LIST_ENTRY InMemoryOrderModuleList;
    10. } PEB_LDR_DATA, *PPEB_LDR_DATA;
    11. typedef struct _RTL_USER_PROCESS_PARAMETERS {
    12.   BYTE           Reserved1[16];
    13.   PVOID          Reserved2[10];
    14.   UNICODE_STRING ImagePathName;
    15.   UNICODE_STRING CommandLine;
    16. } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
    17. typedef struct _PEB {
    18.   BYTE                          Reserved1[2];
    19.   BYTE                          BeingDebugged;
    20.   BYTE                          Reserved2[1];
    21.   PVOID                         Reserved3[2];
    22.   PPEB_LDR_DATA                 Ldr;
    23.   PRTL_USER_PROCESS_PARAMETERS  ProcessParameters;
    24.   BYTE                          Reserved4[104];
    25.   PVOID                         Reserved5[52];
    26.  /* PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;*/
    27.   BYTE                          Reserved6[128];
    28.   PVOID                         Reserved7[1];
    29.   ULONG                         SessionId;
    30. } PEB, *PPEB;
    31. struct PROCESS_BASIC_INFORMATION {
    32.     PVOID Reserved1;
    33.     PPEB PebBaseAddress;
    34.     PVOID Reserved2[2];
    35.     ULONG_PTR UniqueProcessId;
    36.     PVOID Reserved3;
    37. };
    38. typedef NTSTATUS (NTAPI *ZWQUERYINFORMATIONPROCESS)(HANDLE, ULONG, PVOID, ULONG, PULONG);
    39. int _tmain(int argc, _TCHAR* argv[])
    40. {
    41.     HMODULE nt=LoadLibraryA("Ntdll.dll");
    42.     PROCESS_BASIC_INFORMATION pbi={0};
    43.     ZWQUERYINFORMATIONPROCESS _ZwQueryInformationProcess;
    44.     _ZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)GetProcAddress(nt, "ZwQueryInformationProcess");
    45.     DWORD rlg=0;
    46.     _ZwQueryInformationProcess(GetCurrentProcess(),0,&pbi,sizeof(pbi),&rlg);
    47.     PEB *peb={0};
    48.     printf("PEB: %X\n",pbi.PebBaseAddress);
    49.     peb=((PEB*)pbi.PebBaseAddress);
    50.     RTL_USER_PROCESS_PARAMETERS *up;
    51.     up=( (RTL_USER_PROCESS_PARAMETERS *) peb->ProcessParameters);
    52.     char buf[1024];
    53.     CharToOem(up->CommandLine.Buffer,buf);
    54.     printf("CommandLine: %s\n",buf);
    55.     memset(buf,NULL,1024);
    56.     CharToOem(up->ImagePathName.Buffer,buf);
    57.     printf("ImagePathName: %s\n",buf);
    58.     FreeLibrary(nt);
    59.     getch();
    60.     return 0;
    61. }
     
  2. Mentor

    Mentor New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2010
    Сообщения:
    67
    1. ASLR in action
    2. Попробуйте запустить с параметрами командной строки, думаю разница будет очевидна
     
  3. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    А как можно узнать или где то посмотреть,работа каких ф-ций зависит от этих структур?
     
  4. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    >> А как можно узнать или где то посмотреть,работа каких ф-ций зависит от этих структур?

    От каких, от RTL_USER_PROCESS_PARAMETERS? Ну например GetStdHandle нужна отттуда инфа (StandardInput/StandardOutput), Environment тоже юзается функциями работы с переменными окружения и тд.

    Код (Text):
    1. ntdll!_RTL_USER_PROCESS_PARAMETERS
    2.    +0x000 MaximumLength    : Uint4B
    3.    +0x004 Length           : Uint4B
    4.    +0x008 Flags            : Uint4B
    5.    +0x00c DebugFlags       : Uint4B
    6.    +0x010 ConsoleHandle    : Ptr64 Void
    7.    +0x018 ConsoleFlags     : Uint4B
    8.    +0x020 StandardInput    : Ptr64 Void
    9.    +0x028 StandardOutput   : Ptr64 Void
    10.    +0x030 StandardError    : Ptr64 Void
    11.    +0x038 CurrentDirectory : _CURDIR
    12.    +0x050 DllPath          : _UNICODE_STRING
    13.    +0x060 ImagePathName    : _UNICODE_STRING
    14.    +0x070 CommandLine      : _UNICODE_STRING
    15.    +0x080 Environment      : Ptr64 Void
    16.    +0x088 StartingX        : Uint4B
    17. ...
    Это для примера. А вообще смотрите сорс винды, поиск по нужной структуре