TEB偏移0x30處,即FS:[0x30]地址處保存着一個指針,指向PEB,PEB結構的偏移0xC處保存着另外一個指針ldr,該指針執行PEB_LDR_DATA
該結構的後三個成員是指向LDR_MODULE鏈表結構中相應三條雙向鏈表頭的指針,分別是按照加載順序、在內存中地址順序和初始化順序排列的模塊信息結構的指針。
Peb->Ldr->InitializationOrderModuleList指向按照初始化順序排序的第一個LDR_MODULE節點的InInitializationOrderModuleList成員的指針,在WinNT平臺下,該鏈表頭節點的LDR_MODULE結構包含的是NTDLL.DLL,而鏈表的下一個節點所包含的就是Kernel32.dll相關的信息。
彙編核心代碼:
MOV EAX, DWORD PTR FS:[30] ;獲取PEB基址 MOV EAX, DWORD PTR DS:[EAX+C] ;獲取PEB_LDR_DATA結構指針 MOV ESI, DWORD PTR DS:[EAX+1C] ;獲取InInitializationOrderModuleList成員指針 LODS DWORD PTR DS:[ESI] ;獲取雙向鏈表當前節點的後繼指針 MOV EBX, DWORD PTR DS:[EAX+8] ;取其基地址,該結構當前包含的是kernel32.dll