| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 网络安全首页 | 信道安全 | 设备安全 | 协议安全 | Web安全 |
一段杀线程的代码
一段杀线程的代码
作者:未知 文章来源:互联网 点击数: 更新时间:2008-4-21 8:50:50

  大家仔细看看吧!

  /*

  TerminateThread.c

  */

  #include "ntddk.h"

  #include "LDasm.h" //网上很多的,自己找一个好了。

  typedef enum _KAPC_ENVIRONMENT {

  originalApcEnvironment,

  AttachedApcEnvironment,

  CurrentApcEnvironment,

  InsertApcEnvironment

  } KAPC_ENVIRONMENT;

  NTKERNELAPI

  VOID

  KeInitializeApc (

  PKAPC Apc,

  PETHREAD Thread,

  KAPC_ENVIRONMENT Environment,

  PKKERNEL_ROUTINE KernelRoutine,

  PKRUNDOWN_ROUTINE RundownRoutine,

  PKNORMAL_ROUTINE NormalRoutine,

  KPROCESSOR_MODE ProcessorMode,

  PVOID NormalContext

  );

  NTKERNELAPI

  BOOLEAN

  KeInsertQueueApc (

  PKAPC Apc,

  PVOID SystemArgument1,

  PVOID SystemArgument2,

  KPRIORITY Increment

  );

  #define PS_CROSS_THREAD_FLAGS_SYSTEM 0x00000010UL

  ULONG GetThreadFlagsOffset()

  {

  UCHAR *cPtr, *pOpcode;

  ULONG Length;

  USHORT Offset;

  for (cPtr = (PUCHAR)PsTerminateSystemThread;

  cPtr < (PUCHAR)PsTerminateSystemThread + 0x100;

  cPtr += Length)

  {

  Length = SizeOfCode(cPtr, &pOpcode);

  if (!Length) break;

  if (*(USHORT *)pOpcode == 0x80F6) //f6804802000010 test byte ptr [eax+248h],10h

  {

  Offset=*(USHORT *)((ULONG)pOpcode+2);

  return Offset;

  //break;

  }

  }

  return 0;

  }

  VOID KernelTerminateThreadRoutine(

  IN PKAPC Apc,

  IN OUT PKNORMAL_ROUTINE *NormalRoutine,

  IN OUT PVOID *NormalContext,

  IN OUT PVOID *SystemArgument1,

  IN OUT PVOID *SystemArgument2

  )

  {

  ULONG ThreadFlagsOffset=GetThreadFlagsOffset();

  PULONG ThreadFlags;

  DbgPrint("[TerminateThread] KernelTerminateThreadRoutine.\n");

  ExFreePool(Apc);

  if (ThreadFlagsOffset)

  {

  ThreadFlags=(ULONG *)((ULONG)(PsGetCurrentThread())+ThreadFlagsOffset);

  *ThreadFlags=(*ThreadFlags)|PS_CROSS_THREAD_FLAGS_SYSTEM;

  PsTerminateSystemThread(STATUS_SUCCESS); //o(∩_∩)o

  }

  else

  {

  //failed

  }

  return; //never be here

  }

  BOOLEAN TerminateThread(PETHREAD Thread)

  {

  PKAPC Apc=NULL;

  BOOLEAN blnSucceed=FALSE;

  if (!MmIsAddressValid(Thread)) return FALSE; //error.

  Apc=ExAllocatePool(NonPagedPool,sizeof(KAPC));

  KeInitializeApc(Apc,

  Thread,

  originalApcEnvironment,

  KernelTerminateThreadRoutine,

  NULL,

  NULL,

  KernelMode,

  NULL); //special apc - whether alertable or not makes no difference..

  blnSucceed=KeInsertQueueApc(Apc,

  NULL,

  NULL,

  0);

  //add some code works like KeForceResumeThread here.

  return blnSucceed;

  }

  VOID DriverUnload(PDRIVER_OBJECT pDriverObj)

  {

  DbgPrint("[TerminateThread] Unloaded\n");

  }

  NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)

  {

  DbgPrint("[TerminateThread] DriverEntry.\n");

  TerminateThread((PETHREAD)0xff6f3c70); // for test

  pDriverObj->DriverUnload = DriverUnload;

  return STATUS_SUCCESS; //do NOT return an unsuccessful value here, or you need to wait for apc routine return.

  }

文章录入:小张    责任编辑:小张 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    一段看似安全的ASP代码
    IPC空连接测试代码
    所有"暴力删除工具"无语
    修改代码防止被杀件误删
    DNS批量溢出批处理代码
    DNS批量溢出批处理代码
    万能asp防注代码
    字节码防止内存错误提高
    万能asp防注代码
    万能asp防注代码
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有