获取kernel32基地址的方法

xmyth 贡献于2015-09-20

作者   创建于2015-06-15 12:43:45   修改者ycg  修改于2015-09-07 14:21:14字数609

文档摘要: 通过PEB枚举当前进程空间中用户模块列表获取kernel32模块的基地址fs:[0]指向TEB,fs:[30h]指向PEB,PEB偏移0Ch处是LDR指针,LDR指针指向一个PEB_LDR_DATA结构,这个结构体中包含三个双链表,分别是加载顺序链表、内存顺序链表、初始化顺序链表,这三个链表都是指向一个LDR_DATA_TABLE_ENTRY结构体,通过遍历这三个链表都可以获取到kernel32模块的基地址。
关键词:

获取kernel32模块基地址的方法 1、 通过PEB枚举当前进程空间中用户模块列表获取kernel32模块的基地址 fs:[0] 指向TEB,fs:[30h]指向PEB,PEB偏移0Ch处是LDR指针,LDR指针指向一个PEB_LDR_DATA结构,这个结构体中包含三个双链表,分别是加载顺序链表、内存顺序链表、初始化顺序链表,这三个链表都是指向一个LDR_DATA_TABLE_ENTRY结构体,通过遍历这三个链表都可以获取到kernel32模块的基地址。 示意图如下: 1) 根据加载顺序的方式获取 当前模块 -> NTDLL.DLL -> KERNEL32.DLL -> KERNELBASE.DLL -> NULL 2) 根据内存顺序的方式获取 当前模块 -> NTDLL.DLL -> KERNEL32.DLL -> KERNELBASE.DLL -> NULL 3) 根据初始化顺序的方式获取 NTDLL.DLL -> KERNELBASE.DLL -> KERNEL32.DLL -> NULL 2、 从SEH框架开始查找 操作系统默认分配的结构化异常处理程序指向kernel32._except_handler3函数,通过确定该函数的地址,就可以将地址向前对齐,从而找到kernel32.dll基地址。 当找到函数地址以后,通过对该地址进行舍入余数的办法取10000h的整数位,然后搜索PE特征。 现在没法通过SEH查找了,因为操作系统默认的结构化异常处理程序是放在 ntdll 模块中

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档