利用HOOK保护记事本进程
2015-10-19 18:16
302 查看
#include <ntifs.h> #include <ntddk.h> #include <ntstrsafe.h> #include "NtCommon.h" typedef NTSTATUS (*MyNtOpenProcess)( PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId ); MyNtOpenProcess g_OldNtOpenProcess = NULL; //根据名字保护进程,只是做个测试 BOOLEAN ProtectProcess(PCLIENT_ID ClientId, PUCHAR pName) { NTSTATUS status = STATUS_SUCCESS; BOOLEAN bRet = FALSE; PEPROCESS pEprocess = NULL; __try { if (ClientId == NULL) __leave; if (pName == NULL) __leave; status = PsLookupProcessByProcessId((HANDLE)ClientId->UniqueProcess, &pEprocess); if (!NT_SUCCESS(status)) __leave; if (strcmp((PUCHAR)pEprocess + 0x16c, pName, TRUE) == 0) bRet = TRUE; } __finally { if (pEprocess) ObDereferenceObject(pEprocess); } return bRet; } NTSTATUS HookNtOpenProcess( PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId ) { if (ProtectProcess(ClientId, "notepad.exe")) { return STATUS_UNSUCCESSFUL; } return g_OldNtOpenProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId); } void StartHook() { PageProtectOff(); g_OldNtOpenProcess = (MyNtOpenProcess)InterlockedExchange((PULONG)&NTFUN(ZwOpenProcess), (LONG)HookNtOpenProcess); PageProtectOn(); } void StopHook() { PageProtectOff(); InterlockedExchange((PULONG)&NTFUN(ZwOpenProcess), (LONG)g_OldNtOpenProcess); PageProtectOn(); } VOID DriverUnload( IN PDRIVER_OBJECT pDriverObject) { StopHook(); KdPrint(("Drive Unload\n")); } NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { NTSTATUS status = STATUS_SUCCESS; pDriverObject->DriverUnload = DriverUnload; StartHook(); KdPrint(("Drive load\n")); return status; }
相关文章推荐
- MFC对话框Dialog控件处理程序handler因为public修饰符导致无法访问
- Navicat_Premium连接Oracle_10g
- RocketMQ在windows上安装和开发使用
- 记录一次低级错误――secureCRT无法连接虚拟机
- qt connect 有先后顺序
- appstore防代充的一些想法
- ASP.NET MVC4 WEB API简单应用
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
- Oracle 数据泵导数据(expdp,impdp)
- blueZ应用编程
- 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。
- 实用负载均衡技术网站性能优化攻略
- git升级
- C语言中没有string类
- CSDN 博客栏目添加微博一键关注
- CSDN 博客栏目添加微博一键关注
- Gson解析之自定义序列化和反序列化
- RAID技术
- 增强现实技术
- MyReport报表系统(二)