您现在的位置: 骇客基地 >> 黑客文章 >> 黑客攻防 >> 黑客编程 >> 正文

一段杀线程的代码
骇客基地 阅读: 时间:2008-4-17 9:36:25 来源:www.hookbase.com
   大家仔细看看吧!

/*
        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.
}
今天广告
参与评论:
注意事项:
【一段杀线程的代码】文章由骇客基地网上搜集,其立场行为并不代表本站。
如果您发现该文章若无意中侵犯到您的权利,请联系我们!
未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自本站,谢谢您的支持!
最近更新
最新推荐
     
 
黑客首页 | 服务指南 | 软件发布  | 关于我们 | 本站声明  | 隐私声明 | 诚征英才 | 网站地图 | 友情链接 |
 
 
中国·黑客·骇客·基地 请使用IE6.0版本, 分辩率1024×768进行浏览 www.hookbase.com 站长:利客 Email:hookbase@163.com
Copyright © 2004-2009 All Rights Reserved. 粤ICP备05000985号