首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>网络安全>文章内容
线程调度的监视
来源:www.blogcn.com/user17/pjf/blog 作者:pjf 发布时间:2004-10-19  

线程调度的监视

文摘出处:https://www.xfocus.net/bbs/index.php?act=ST&f=2&t=41969

pjf(jfpan20000@sina.com)

接着上次的小话题说。
上次提到因为想要无需硬编码的方案从而未选用SwapContex,后来又想了想用SwapContex也基本不用硬编码,但因为用了其它做法,没有再实现hook SwapContex了。前两天难得放假,写了一下看看效果。
首先进入2000的SwapContext中,看看它作了什么。

0008:8040422C OR CL,CL
0008:8040422E MOV BYTE PTR ES:[ESI+2D],02
0008:80404233 PUSHFD //ESP+4 -> EFLAGS
0008:80404234 MOV ECX,[EBX]
0008:80404236 CMP DWORD PTR [EBX+0000080C],00
0008:8040423D PUSH ECX //ESP -> exception list
0008:8040423E JNZ 80404338
0008:80404244 MOV EBP,CR0
0008:80404247 MOV EDX,EBP
0008:80404249 MOV CL,[ESI+2C]
0008:8040424C MOV [EBX+50],CL
0008:8040424F CLI
0008:80404250 MOV [EDI+28],ESP //将ESP存入了KTHREAD的KernelStack
0008:80404253 MOV EAX,[ESI+18]
0008:80404256 MOV ECX,[ESI+1C]
... ...
很明显,ESP+8的地方就是在KiSwapThread中的调用SwapContex的返回地址,可由它得到SwapContex函数地址,但没必要,直接hook这个在KiSwapThread中的地址更好些。
下面的问题就是找出一个KernelStack可访问的非当前线程,这个很容易。示例代码片断(在2000/XP测试):

PCHAR GetSwapAddr()
{
PCHAR res = 0;
NTSTATUS Status;
PETHREAD Thread;

if (*NtBuildNumber <= 2195)
Status = PsLookupThreadByThreadId((PVOID)4, &Thread);
else
Status = PsLookupThreadByThreadId((PVOID)8, &Thread);

if (NT_SUCCESS(Status))
{
if (MmIsAddressValid(Thread))
res = (PCHAR)*PULONG(PCHAR(Thread)+0x28);
if (MmIsAddressValid(res+8))
res = (PCHAR)*PULONG(res+8);
else
res = 0;
}

return res;
}

PBYTE GoBackAddr = 0;
__declspec(naked) VOID HookSwap()
{
DbgPrint("%08x\n", KeGetCurrentThread());
_asm mov eax, GoBackAddr
_asm jmp eax
}

HookSwapFunc()
{
... ...
PCHAR SwapAddr = GetSwapAddr();
if (SwapAddr)
GoBackAddr = HookFunction(SwapAddr, HookSwap);
... ...
}

HookFunction代码的具体实现自然是仁者见仁了。
下面是一些结果:

4.343 Default SwapAddr=80404141
4.343 Default 813b8c00
4.343 Default fe995480
4.359 Default 81429660
4.359 Default 81429260
4.359 Default 805e5520
4.359 Default 813e15c0
4.359 Default 8139f500
4.359 Default 8139f260
4.375 Default 805e5520
4.375 Default 812ea140
4.390 Default 805e5520
4.390 Default 8139f500
4.390 Default 8139f260
4.406 Default 805e5520
4.422 Default 805e5520
4.422 Default fe995480
4.422 Default fe995480
4.422 Default fe995480
4.422 Default 8139f500
4.422 Default 8139f260
4.422 Default 813a66e0

没仔细想,可能有错,欢迎指出。

http://www.blogcn.com/user17/pjf/blog/4331410.html


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·一句话木马
·samcrypt.lib简介
·教你轻松查看QQ空间加密后的好友
·web sniffer 在线嗅探/online ht
·SPIKE与Peach Fuzzer相关知识
·asp,php,aspx一句话集合
·Cisco PIX525 配置备忘
·用Iptables+Fedora做ADSL 路由器
·检查 Web 应用安全的几款开源免
·Md5(base64)加密与解密实战
·NT下动态切换进程分析笔记
·风险评估中的渗透测试
  相关文章
·避免竞争条件
·CLR 中代码访问安全检测实现原理
·小议脚本变形
·Transact_SQL小手册,适合初学者
·IE IFRAM 漏洞的简单分析和临时
·Loadable Kernel Modules 注射
·CCProxy Log Stack Overflow 漏
·浅谈MYSQL跨库查询
·Windows CE初探
·无线入侵检测系统
·Win32平台格式化串漏洞利用技术
·使用Honeypots 同Internet 蠕虫
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved