#2
吹水佬2023-06-06 21:23
|
这寻找程序在巜 Windows PE权威指南》(戚利 著 )第11章 - Pebkernelbase:
--------------------------------------------------------------------------------
; 获取kernel32.dll的基址
; 从PEB结构中搜索kernel32.dll的基地址
; 戚利
; 2010.6.27
;------------------------
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;数据段
.data
szText db 'kernel32.dll的基地址为%08x',0
szOut db '%08x',0dh,0ah,0
szBuffer db 256 dup(0)
;代码段
.code
start:
assume fs:nothing
mov eax,fs:[30h] ;获取PEB所在地址
mov eax,[eax+0ch] ;获取PEB_LDR_DATA 结构指针
mov esi,[eax+1ch] ;获取InInitializationOrderModuleList 链表头
;第一个LDR_MODULE节点InInitializationOrderModuleList成员的指针
lodsd ;获取双向链表当前节点后继的指针
mov eax,[eax+8] ;获取kernel32.dll的基地址
;输出模块基地址
invoke wsprintf,addr szBuffer,addr szText,eax
invoke MessageBox,NULL,addr szBuffer,NULL,MB_OK
ret
end start
----------------------------------------------------------------------------------------------
先在win xp 里运行,并用 od 核对其结果正确无误,然后在 Win8. 1里运行,用 od和 x32dbg进行核对,发现得到的基址是 kernelbase. Dll而不是 kernel32. Dll, kernel32.dll基址在76D90000.
见如下:
只有本站会员才能查看附件,请 登录
查看了一下Teb和 peb结构,见如下:
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
但问题出在那儿?!
我把焦点放在了程序中的mov edx,[eax + 8h] 指令,并对其进行了分析和研究。