HOOK SSDT NtOpenProcess 保护进程

感谢众大神分享的技术,因为几乎没直接用别人的源码,所以就标题原创

但是因为这个技术肯定是前辈们搞出来的,所以就特意说明下,此乃转载耶

模板用的张帆大牛的

记录一下,以后备用

有些许疑惑,不过都解决了:http://blog.csdn.net/u012410612/article/details/17096597

//本来只是测试MmGetSystemRoutineAddresss函数的,然后发现直接用函数名就可以得到这个地址
//然后就像SSDT HOOK简单测试一下函数地址,
//然后HOOK之后就想简单的实现进程保护
//就这样越多了

#ifdef _cplusplus
extern "C"
{
#endif
#include <ntddk.h>
#ifdef _cplusplus
}
#endif

//定义代码段分页标志
#define PAGEDCODE	code_seg("PAGE")
#define LOCKEDCODE	code_seg()
#define INITCODE	code_seg("INIT")

//定义数据段分页标志
#define PAGEDDATA	code_seg("PAGE")
#define LOCKEDDATA	code_seg()
#define INITDATA	code_seg("INIT")

//定义求数组个数的宏定义
#define arraysize(p)	(sizeof(p) / sizeof((p)[0]))

//定义设备扩展
typedef struct _DEVICE_EXTENSION{
	PDEVICE_OBJECT pDevice;
	UNICODE_STRING ustrDeviceName;		//设备名称
	UNICODE_STRING ustrSymLinkName;		//符号链接名
}DEVICE_EXTENSION, *PDEVICE_EXTENSION;

//函数声明//
//初始化时创建设备和符号
NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject);
//驱动卸载例程
VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);
//驱动默认分派例程
NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);

typedef NTSTATUS ( *pfnNtOpenProcess)(
			PHANDLE,
			ACCESS_MASK,
			POBJECT_ATTRIBUTES,
			PCLIENT_ID);
pfnNtOpenProcess OldNtOpenProcess;

NTSTATUS MyNtOpenProcess(
			OUT PHANDLE ProcessHandle,
			IN ACCESS_MASK DesireAccess,
			IN POBJECT_ATTRIBUTES ObjectAttributes,
			PCLIENT_ID ClientID);
			
typedef struct _SERVICE_DESCRIPTOR_TABLE {
	PVOID 	ServiceTableBase;//System Service Dispatch Table 的基地址
	PVOID 	ServiceCounterTableBase;//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新
	ULONG	NumberOfServices;//由 ServiceTableB
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值