搜索PEB结构获取Kernel32.dll基址

TEB偏移0x30处,即FS:[0x30]地址处保存着一个指针,指向PEB,PEB结构的偏移0xC处保存着另外一个指针ldr,该指针执行PEB_LDR_DATA

image

    该结构的后三个成员是指向LDR_MODULE链表结构中相应三条双向链表头的指针,分别是按照加载顺序、在内存中地址顺序和初始化顺序排列的模块信息结构的指针。

image 

    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
作者:Y4ng
出处:http://y4ng.cnblogs.com/
文章版权属于Y4ng受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者信息及本声明!
原文地址:https://www.cnblogs.com/Y4ng/p/2315883.html