采用FS去定位API地址:
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号
mov eax,fs:[0x18] ; 获得当前线程的TEB地址
mov eax,[eax+0x30] ; 在TEB偏移30h获得PEB地址
TIB+18h 是TIB的反身指针 指向PEB的首地址 因此可省略而直接使用fs:[30h] 得到自己进程的PEB
从XP SP2 引入 不同进程的PEB地址会不一样 所以不能用 本进程的FS:[28H] 的指针去读取其他进程的内容
如果是用这种方式去获得PEB的话 还要去循环验证是否为 kernel32.dll
mov eax,fs:[0x18] //获得FS段寄存器在内存中的镜像地址,即TEB的地址
mov pTeb,eax 所以不采用这种方式 在 计算机病毒揭秘 中 去寻找API地址 采用 先找 kernel32.dll 在去找API地址
FS:0指向线程环境块TEB;
FS:[0]指向当前线程的结构化异常处

本文探讨了如何利用FS段寄存器定位API地址,尤其是针对XP SP2以后的系统,由于不同进程的PEB地址不同,直接使用FS:[28H]无法获取其他进程的PEB。因此,需要通过循环验证来确定正确的kernel32.dll。
最低0.47元/天 解锁文章
1153

被折叠的 条评论
为什么被折叠?



