windows下面hook系统api实现禁止任务管理器关闭程序

        为了保护我们的进程不被人随便强制关闭,我们需要一种机制来实现,网上大概有几种方式:1.写一个驱动程序,在驱动程序里面hook系统的api来实现,例如ssdt方式,等等。2.就是在应用层挂钩系统api,这种方式也就远程注入,全局钩子啊等等,只是网上也有很多,不过很多在xp上是正常的到了win7 64就失效了。还有最简单的就是启动两个进程相互监视对方,(这个可能看起来不专业)。 网上方法很多,我写这个主要是学习归类整理。

       我实现的方式整一个全局的钩子  主要参考http://www.360doc.com/content/13/0911/10/13336430_313670033.shtml ,钩子部分基本是借用这里的代码,我只是在上面扩展了一下,同时可以保护多个进程,被保护的进程不需要加装hook api的dll文件。 因为在win7 64下面挂钩任务管理器需要64位的dll和64位的安装钩子程序,这样32位的进程就很难被保护了。 编译64位程序需要vs2008有64的环境还需要设置一些64的宏,代码有注释,所以直接上代码。

       1.hook api 的主要dll文件

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include <Windows.h>
#include "Export.h"

#ifdef _WIN64
#undef _M_IX86
#endif

#include "mhook-lib\mhook.h"

//参考代码 url
//http://www.360doc.com/content/13/0911/10/13336430_313670033.shtml
//=========================================================
// struct CLIENT_ID
typedef struct _CLIENT_ID {
	DWORD_PTR UniqueProcess;
	DWORD_PTR UniqueThread;
} CLIENT_ID, *PCLIENT_ID;

//===========================================================
// NtOpenProcess
typedef ULONG (WINAPI *pfnNtOpenProcess)(
	__out PHANDLE ProcessHandle,
	__in ACCESS_MASK AccessMask ,
	__in PVOID ObjectAttributes,
	__in PCLIENT_ID ClientId);

pfnNtOpenProcess _NtOpenProcess = (pfnNtOpenProcess)GetProcAddress( GetModuleHandle(L"ntdll"),"NtOpenProcess");
//共享内存结构体,用于存储保护的PID
typedef struct SHWP_STRUCT_
{
	BOOL isWrite;
	TCHAR cProcessid[512];
} SHWP_STRUCT, *LPSHWP_STRUCT;

//==============================================================
// 变量
HINSTANCE glhInstance = NULL; 
DWORD     gProtectProcessID = 0;
HANDLE ghMapFile = NULL;
//共享内存结构体
LPSHWP_STRUCT		lpData = NULL;

//dll共享全局变量
#pragma data_seg("ShareSecNJ")  
HHOOK     glhHook = NULL; //把glhHook放入ShareSec段  
#pragma data_seg()  
#pragma comment(linker,"/SECTION:ShareSecNJ,RWS")//告诉编译器为ShareSec段添加共享段读写属性
void splitString(wstring& s, wstring delim,vector<wstring >& ret)
{
	size_t last = 0;
	size_t index=s.find(delim,last); //delim 为字符串的时候find_first_of可能会出错
	ret.clear();
	wstring strTmp;
	while (index!=std::wstring::npos
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值