XP 下驱动保护程序

这个也是我看教学视频有感而发 其实也没有做什么东西 就是做了一个exe 然后有四个功能

1. 保护进程

2.去掉保护

3.杀死进程

4.获取运行进程的信息

 

其实这四个 里面 第一个 第二个都是和驱动配合得出来的 然后 我先说第三个 第三个杀死进程其实 很简单

bool killprocess(int pid)
{
    HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,pid);
	if(hProcess==NULL)
	{
	  return false;
	}
      if(!TerminateProcess(hProcess,0))
        return false;
   return true;
}

杀死进程也就先打开进程 然后 获得进程的句柄 然后再用TerminateProcess 然后杀死进程  我们 可以从两点入手 

第一点 直接hook OpenProcess  第二点  hook TerminateProcess 然后我们是 hook OpenProcess  直接句柄返回为空  具体的驱动 hook 是这样的

if (PID == MyPID)
		{
			KdPrint(("被保护进程 MyPID=%d \n", (int)MyPID));
			//调试输出 类似C语言的 Printf
			ProcessHandle = NULL; //这个是关键
			rc = STATUS_ACCESS_DENIED; //这个返回值 
			//PsLookupProcessByProcessId((ULONG)PID,&EP);
			EP = PsGetCurrentProcess();
			KdPrint((" ACESS Process Name  --:%s--   \n", (PTSTR)((ULONG)EP + 0x174)));

他是缓冲区 传递我们想保护的pid    然后得出 NtOpenProcess函数的地址 那么 我们可以把地址换成我们的地址 也可以为了保险 直接跳转到 KeServiceDescriptorTable 的地址  然后我们就可以 看出被hook  然后 这就可以了  至于枚举进程   其实r3 和r0 好像没有什么区别。。

	BOOL bOk = Process32First(ToolHelpHandle, &ProcessEntry32);
	while (bOk)
	{
		process_num[sum].pid=ProcessEntry32.th32ProcessID;
        strcpy(process_num[sum].name,ProcessEntry32.szExeFile);
		process_num[sum].flag=true;
		sum++;
		printf("PID:\t0x%X,", ProcessEntry32.th32ProcessID);
		printf("\tName:\t%s\r\n", ProcessEntry32.szExeFile);
		bOk = Process32Next(ToolHelpHandle, &ProcessEntry32);
	}
 
	CloseHandle(ToolHelpHandle);
	ToolHelpHandle = INVALID_HANDLE_VALUE;

哦 对了 不要忘了 hook的时候去掉页面保护

	__asm //去掉页面保护
	{
		cli
			mov eax, cr0
			and eax, not 10000h //and eax,0FFFEFFFFh
			mov cr0, eax

	}




	__asm
	{
		mov     eax, cr0
			or     eax, 10000h
			mov     cr0, eax
			sti
	}

代码 写的太乱了 也就不放代码了 就放一下 程序截图吧   控制台程序 哈哈哈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值