线程断链

一、废话不多说,直接上代码

#include<ntddk.h> /************************************************************************/ /* */ /*1、在KTHREAD结构体偏移0x1B0的位置存在双向链表ThreadListEntry */ /*2、在ETHREAD结构体偏移0x22C的位置同样存在这一组双向链表ThreadListEntry*/ /*3、在进程结构体偏移0x50与0x190的位置也存放了双向链表的地址 */ /*4、线程断链,断掉这两条链 */ /*5、在此次实验中,我拿记事本做实验,断掉他所有线程 */ /************************************************************************/ /*函数声明*/ VOID DriverUnload(PDRIVER_OBJECT driver); VOID BreakAllLink(); NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path) { BreakAllLink(); driver->DriverUnload = DriverUnload; return STATUS_SUCCESS; } /*卸载驱动*/ VOID DriverUnload(PDRIVER_OBJECT driver) { DbgPrint("驱动程序已被停止运行\n"); } /*断链函数*/ VOID BreakAllLink() { PETHREAD pEthread = NULL; PEPROCESS pEprocess = NULL; PLIST_ENTRY KproThreadListHead; PLIST_ENTRY EproThreadListHead; PUCHAR ImageFileName; PLIST_ENTRY ActProLink; PLIST_ENTRY ActProLinkAns; __asm { mov eax,fs:[0x124] mov pEthread,eax mov eax,[eax + 0x220] mov pEprocess,eax add eax,0x88 mov ActProLink,eax } //首先遍历找到记事本进程// ActProLinkAns = ActProLink; do { ImageFileName = (PUCHAR)((ULONG)pEprocess + 0x174); //DbgPrint("%s\n",ImageFileName); if(strcmp(ImageFileName,"notepad.exe") == 0) { goto StartBreakLink; } ActProLink = ActProLink->Flink; pEprocess = (PEPROCESS)((ULONG)ActProLink - 0x88); }while(ActProLink !=ActProLinkAns); StartBreakLink: *(PULONG)((ULONG)pEprocess+0x50) = ((ULONG)pEprocess + 0x50); *(PULONG)((ULONG)pEprocess+0x54) = ((ULONG)pEprocess + 0x54); *(PULONG)((ULONG)pEprocess+0x190) = ((ULONG)pEprocess + 0x190); *(PULONG)((ULONG)pEprocess+0x194) = ((ULONG)pEprocess + 0x194); }

二、运行代码前记事本进程中线程为1

  运行代码后:

记事本线程变为0且能正常运行,由此可以说明出线程调度用的不是这种方式...

二、在DTDebug上做实验,我用DTDebug加载记事本程序后再用上面代码把线程调为0,点击重新加载后,DTDebug会卡住,且弹出下面弹框...

这时候问题来了,我点击'是'之后,DTDebug退出,记事本程序再也关不掉了,无论我直接关闭还是用任务管理器关闭都不行,甚至直接关机都关不掉了...我不明白这是什么原因,希望自己以后能解决...

 


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/15647580.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示