十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
简单的HOOK OpenProcess函数、达到不让任务管理器使用OpenProcess来获取我们要保护的进程的句柄、
公司主营业务:成都网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出平坝免费做网站回馈大家。
从而达到使任务管理器使用TerminateProcess无法结束该进程的目的、、、
当我们HOOK到OpenProcess的时候、我们要在自己的MyOpenProcess中、判断一下、所打开的进程是否为我们要保护的进程、如果是简单的返回错误码0、如果不是就在我们的MyOpenProcess中调用真正的OpenProcess、
判断的时候是这样的、、
先通过我们进程窗口的名字得到窗口的句柄 涉及API FindWindow
再通过我们窗口的句柄得到创建窗口的进程ID、涉及API GetWindowThreadProcessId
这里获得的ID是我们要保护进程的真实ID而任务管理器获得ID即是第三个参数、
所以有下边的代码、、、
//获取 要保护进程的标题 的窗口句柄系统API函数前使用::为了和类扩展函数区别
//为了代码的健壮性使用TEXT宏、 HWND窗口句柄、
HANDLE WINAPI MyOpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
{
HWND HProtect = ::FindWindow(NULL,TEXT("Windows当前所有进程"));
if(!HProtect)
{
return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
} //若不存在则调用返回
//获取创建此窗口的进程的ID、保存在 &ProtectId 地址中、
DWORD ProtectId; //下边找出某个窗口的创建者(线程或进程)
GetWindowThreadProcessId(HProtect,&ProtectId);
if(ProtectId == dwProcessId)//dwProcessId是任务管理器要结束的进程ID
{
return 0;//如果结束的是我们的进程则返回错误码0、
}
return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
}
这样就可以了
其中HOOK技术使用的是IAT HOOK 前边已经写过这样的代码了、
DLL注入也是用的之前写过的一个简单的远程线程注入技术、
演示、
打开任务管理器、使用DLL注入工具向其注入这个有着简单保护进程功能的DLL、
然后再用任务管理器结束我们在DLL里边保护的进程、此时没有反映、进程没有被结束、、
为什么不弹个框呢、、
因为任务管理器好像在会一直调用OpenProcess、如果使用MessageBox函数的话、会一直弹、效果当然很不好了、、
如果想要弹框可以去HOOK一下TerminateProcess函数、在TerminateProcess里边实现、、