首页
论坛
课程
招聘
[原创]一段蛮古老的杀线程代码
2008-1-29 21:11 14968

[原创]一段蛮古老的杀线程代码

2008-1-29 21:11
14968
科普,呵呵。


/*
TerminateThread.c
By 炉子[0GiNr]
http://hi.baidu.com/breakinglove_
http://0ginr.com
*/

#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
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.
}

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
vbcs 活跃值 2 2008-1-29 21:59
2
0
谢谢
学习了。
雪    币: 482
活跃值: 活跃值 (938)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2008-1-29 22:02
3
0
哈哈,炉子牛一加热就是牛啊

学习
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wping 活跃值 2008-1-30 07:18
4
0
能给一个应用层使用它的例子吗,谢谢
雪    币: 367
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2008-1-30 07:48
5
0
收藏起来学习.
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-1-30 09:36
6
0
好,利用软中断杀线程,安全又可靠。代码随是古老,确很实用。
雪    币: 347
活跃值: 活跃值 (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 活跃值 3 2008-1-30 12:35
7
0
不错
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xleox 活跃值 2008-4-4 06:34
8
0
晕了 在哪有 LDasm.h
雪    币: 89
活跃值: 活跃值 (27)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
kenmark 活跃值 2 2008-4-4 16:17
9
0
呵呵,我在邪八上刚看过
雪    币: 253
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
ReturnsMe 活跃值 2 2008-5-25 17:51
10
0
LDasm我知道... LDasm.h在哪》。。。。。。。。。。
雪    币: 253
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
ReturnsMe 活跃值 2 2008-5-25 18:06
11
0
我找到LDasm.h了..不知道是不是这个...

#ifndef _LDASM_
#define _LDASM_

#ifdef __cplusplus
extern "C" {
#endif

unsigned long __fastcall SizeOfCode(void *Code, unsigned char **pOpcode);

unsigned long __fastcall SizeOfProc(void *Proc);

char __fastcall IsRelativeCmd(unsigned char *pOpcode);

#ifdef __cplusplus
}
#endif

#endif
游客
登录 | 注册 方可回帖
返回