-
-
[求助]由FS寄存器如何得到kernel32.dll地址
-
发表于:
2009-7-28 15:19
4888
-
[求助]由FS寄存器如何得到kernel32.dll地址
本地线程的栈里偏移18H的指针指向kernel32.dll内部,而fs :[ 0x18 ] 指向当前线程而且往里四个字节指向线程栈,结合栈顶指针进行对齐遍历,找到PE文件头(DLL的文件格式)的“MZ”MSDOS标志,就拿到了kernel32.dll基址。
xor esi , esi
mov esi , fs :[ esi + 0x18 ] // TEB
mov eax , [ esi + 4 ] // 这个是需要的栈顶
mov eax , [ eax - 0x1c ] // 这句是什么意思?
find_kernel32_base :
dec eax // 开始地毯式搜索Kernel32空间,dll文件64K对其加载到内存中,每次加1不是很没效率?
xor ax , ax
cmp word ptr [ eax ], 0x5a4d // "MZ"
jne find_kernel32_base // 循 环遍 历 ,找到 则 返回 eax
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课