进程保护--CrossThreadFlags标志位

原理:

1. 将进程的所有线程的线程CrossThreadFlags标志位设置成Terminated或者System.

效果:任务管理器,WSYSCheck,ICESWORD无法结束进程。。

但PCHunter 可以结束受保护的进程。但PCHunter无法用普通方法结束受保护的线程,必须使用强制结束线程才可结束线程。。


代码:

VOID SetThreadFlagToTerminatedByThreadID(ULONG dwThreadID)
{
	ULONG ulFlagOffset;
	NTSTATUS status = STATUS_UNSUCCESSFUL;
	PULONG pFlag;
	PETHREAD eThead;
	HANDLE threadHandle;

	__try{
		threadHandle = (HANDLE)dwThreadID;
		ulFlagOffset = GetCrossThreadFlagOffset();
		//dprintf("[ProtectProcess]GetCrossThreadFlagOffset: 0X%08X\r\n", ulFlagOffset);

		status = PsLookupThreadByThreadId(threadHandle, &eThead);
		if(!NT_SUCCESS(status))
		{

			dprintf("PsLookupThreadByThreadId ERRORid:0X%08X, TID: 0X%08X\r\n", status, dwThreadID);
			return status;
		}
		//dprintf("ETHREAD:0X%08X\n", eThead);

		pFlag = (ULONG*)((PUCHAR)eThead + ulFlagOffset);
		//dprintf("ulFlag address:0X%08X value:0x%08X\n", pFlag, *pFlag);

		*pFlag |= PS_CROSS_THREAD_FLAGS_TERMINATED;
		dprintf("new ulFlag address:0X%08X value:0x%08X\n", pFlag, *pFlag);
	}__except(EXCEPTION_EXECUTE_HANDLER)
	{
		dprintf("EXCEPTION ON set thread cross flags!");
		return status;
	}
}

ring3程序与ring0程序下载地址:

http://download.csdn.net/detail/xiaocaiju/8192897


时间: 2024-10-08 00:16:25

进程保护--CrossThreadFlags标志位的相关文章

标志位介绍

一.运算结果标志位 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位.如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0. 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等. 2.奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性.如果“1”的个数为偶数,则PF的值为1,否则其值为0. 利用PF可进行奇偶校验检查,或产生奇

各种标志位的含义

一.运算结果标志位 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位.如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0. 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等. 2.奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中"1"的个数的奇偶性.如果"1"的个数为偶数,则PF的值为1,否则其值为0. 利用P

汇编标志位简介

标志(Flag)用于反映指令执行结果或控制指令执行形式,是汇编语言程序设计中必须特别注意的一个方面.许多指令执行之后将影响有关的标志位,同时不少指令的执行要利用某些标志.因此我们在学习使用汇编语言的过程中必须了解标志位. 一.状态标志 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位.如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0. 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位

Android service进程保护

应用进程保活基本就是围绕两个方面来展开: 1 尽量保证进程不被杀死. 2 进程被杀死后复活.细分如下: 1)Service重启 2)进程守护 3)Receiver触发 4) AlarmManager or JobScheduler循环触发 5)与系统Service捆绑-–可以不考虑,了解即可 下面将围绕这几点展开讨论. 一,基本概念 1.什么才叫应用进程保活 应用进程保活可以理解为应用位于后台永远不能被杀死.这里的可以简略地分为两种情况,第一种是当系统资源紧俏的时候或者基于某种系统自身的后台运行

HOOK - 进程隐藏与进程保护(SSDT Hook 实现)(三)

进程隐藏与进程保护(SSDT Hook 实现)(三) 文章目录:                   1. 引子: 2. 获取当前系统下所有进程: 3. 服务管理(安装,启动,停止,卸载): 4. 应用程序和内核程序通信: 5. 小结: 1. 引子: 关于这个 SSDT Hook 实现进程隐藏和进程保护呢,这是最后一篇博文了, 在文章的结尾处呢你可以下载到整个项目的实例程序以及代码, 程序可以在 XP.Server.Win7 上运行的,当然我是说的 32 位操作系统.        <进程隐藏与

HOOK - 进程隐藏与进程保护(SSDT Hook 实现)(二)

进程隐藏与进程保护(SSDT Hook 实现)(二) 文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ring0 实现进程保护: 6. 隐藏进程列表和保护进程列表的维护: 7. 小结: 1. 引子 – Demo 实现效果: 上一篇<进程隐藏与进程保护(SSDT Hook 实现)(一)>呢把 SSDT 说得差不多了, 博文地址: http://www

进程隐藏与进程保护(SSDT Hook 实现)(二)

文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ring0 实现进程保护: 6. 隐藏进程列表和保护进程列表的维护: 7. 小结: 1. 引子 – Demo 实现效果: 上一篇<进程隐藏与进程保护(SSDT Hook 实现)(一)>呢把 SSDT 说得差不多了, 博文地址: http://www.cnblogs.com/BoyXiao/archiv

汇编语言从入门到精通-标志位的说明

16位标志寄存器--共用了9个标志位,它们主要用来反映CPU的状态和运算结果的特征.标志位的分布如下表所示.   15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0         OF DF IF TF SF ZF   AF   PF   CF 32位标志寄存器--32位CPU也把标志寄存器扩展到32位,记为EFLAGS.它新增加了四个控制标志位,它们是:IOPL.NT.RF和VM,这些标志位在实方式下不起作用.其它标志位的位置和作用与先前的完全相同.其主要标志位的分布

Linux-close_on_exec标志位

close_on_exec是一个进程所有文件描述符的标记位图,每个比特位代表一个打开的文件描述符,用于确定在调用系统调用execve()时需要关闭的文件句柄 (参见include/fcntl.h). 当一个程序使用fork()函数创建了一个子进程时,往往会在该子进程中调用execve()函数加载执行另一个新程序,此时子进程将完全被新程序替换掉,并在子进程中开始执行新程序.同时子进程会拷贝父进程的文件描述符表,这样父子进程就有可能同时操作同一打开文件,如果不想子进程操作该文件描述符,则可将clos