温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

实现简单的ring3进程保护、hook OpenProcess函数、简单分析

发布时间:2020-08-06 22:41:22 来源:网络 阅读:3530 作者:天晴V587 栏目:安全技术

简单的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里边实现、、


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI