首页
社区
课程
招聘
[未解决,已结帖] 内核线程 100.00雪花
发表于: 2022-5-21 20:49 5035

[未解决,已结帖] 内核线程 100.00雪花

2022-5-21 20:49
5035

怎么暂停或结束内核线程 PsTerminateSystemThread 无法结束内核线程
有大佬来个win7 和win10 x64写法学习学习的嘛?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-5-22 09:26 被虚心求教者编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 2571
活跃值: (4869)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
挂起线程。类似于“挂起进程”,唯一的差别是没有导出函数可用了。可以自行定位 PsSuspendThread,它的原型如下NTSTATUS PsSuspendThread
(IN PETHREAD Thread, //线程 ETHREAD
OUT PULONG PreviousSuspendCount OPTIONAL) //挂起的次数,每挂起一次此值增 1


结束线程。结束线程的标准方法是 ZwOpenThread+ZwTerminateThread+ZwClose,暴力方法 是直接调用 PspTerminateThreadByPointer。暴力方法在后面的课程里讲,这里先讲标准方法。 由于 ZwTerminateThread 没有导出,所以只能先硬编码了(在 WINDBG 里使用 x 命令获得地 址:x nt!ZwTerminateThread):
typedef NTSTATUS (__fastcall *ZWTERMINATETHREAD)(HANDLE hThread, ULONG uExitCode); ZWTERMINATETHREAD ZwTerminateThread=0Xfffff80012345678; //要修改这个值 //正规方法结束线程
 void ZwKillThread() {
HANDLE hThread = NULL;
CLIENT_ID ClientId;
OBJECT_ATTRIBUTES oa;
//填充 CID
ClientId.UniqueProcess =0;
ClientId.UniqueThread = (HANDLE)1234; //这里修改为你要的 TID //填充 OA
oa.Length = sizeof(oa);
oa.RootDirectory = 0;
oa.ObjectName = 0;
oa.Attributes = 0;
oa.SecurityDescriptor = 0; oa.SecurityQualityOfService = 0; //打开进程,如果句柄有效,则结束进程 ZwOpenProcess(&hThread,1,&oa,&ClientId); if(hThread)
{
ZwTerminateThread(hThread,0); ZwClose(hThread);
}; }





//根据线程 ID 返回线程 ETHREAD,失败返回 NULL PETHREAD LookupThread(HANDLE Tid)
{
PETHREAD ethread;
if( NT_SUCCESS(PsLookupThreadByThreadId(Tid, &ethread)) )
return ethread; else
}
2022-5-22 15:52
0
雪    币: 147
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
_DriverEntry 挂起线程。类似于“挂起进程”,唯一的差别是没有导出函数可用了。可以自行定位 PsSuspendThread,它的原型如下NTSTATUS PsSuspendThread (IN PETHREAD T ...
测试过了 蓝屏
2022-5-22 17:32
0
雪    币: 147
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
搞定了 IDA 载入NTOSKRNL.EXE 查找PsSuspendProcess找到PsSuspendThread地址即可暂停.
2022-5-22 18:37
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
是哪个驱动又惨遭暂停线程的祸害了
2022-5-22 18:40
0
游客
登录 | 注册 方可回帖
返回
//