一、进程自我保护:
HOOK windows 用户层api (用户层保护)
内核层api(驱动层保护)
1:用户层hook(简单例子)
Hook
OpenProcess(....,....,DWORD dwProcessId)
拦截函数
DWORD MyOpenProcess(...,....,DWORD dwProcessId)
{
// MydwProcessId 被保护进程id
If(dwProcessId == MydwProcessId)
{
return ERROR_ACCESS_DENIED; //过滤拦截
}
else
{
return OpenProcess(....,....,dwProcessId); //正常操作
}
}
![f95203b6b2c5e0f497173dbc16f8b119.png](https://img-blog.csdnimg.cn/img_convert/f95203b6b2c5e0f497173dbc16f8b119.png)
2:驱动层hook
首先看一下OpenProcess 整个操作流程:
![234ea5f8d6f2864dcf24e7c66772038c.png](https://img-blog.csdnimg.cn/img_convert/234ea5f8d6f2864dcf24e7c66772038c.png)
用户层可以
HOOK:OpenProcess NtOpenProcess
驱动层可以
替换SSTD表对应服务的函数地址,
HOOK: NtOpenProcess,PspOpenProcess,ObOpenObjectByPointer
HOOK SSTD表对应服务的函数地址(简单例子):
![fe01c7791d21ac3f0a0ed4089650dfe2.png](https://img-blog.csdnimg.cn/img_convert/fe01c7791d21ac3f0a0ed4089650dfe2.png)
![183d3b7e19981fc4d059650d50b259a4.png](https://img-blog.csdnimg.cn/img_convert/183d3b7e19981fc4d059650d50b259a4.png)
某某SSDT 自我保护进程:
正常OpenProcess 会出现访问拒绝。
但通过驱动去获取,便原型必现
![46071e1738063af297a617b2dd0711da.png](https://img-blog.csdnimg.cn/img_convert/46071e1738063af297a617b2dd0711da.png)
二.畅想:
这只是基本的开发模型。主要方向反病毒软件。
近期搜集了一些资料,喜欢钻研的可以聊聊。
![af3bf9f4d62cf7f95aa604cc415950a8.png](https://img-blog.csdnimg.cn/img_convert/af3bf9f4d62cf7f95aa604cc415950a8.png)