antivirus protect SSDT hook

本文探讨了通过修改内核服务表(SSDT)实现驱动程序的安全加载机制。该方法涉及内存分配、服务表复制及挂钩操作,确保系统服务的安全调用。
 //By killvxk

void KAVSafe()
{
LimitNumber = KeServiceDescriptorTable->ntoskrnl.ServiceLimit;
mySST = (PULONG)ExAllocatePoolWithTag(NonPagedPool,LimitNumber * 4+20,'vxk');
mySSTParamTable = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool,LimitNumber+20,'vxk');
memcpy(mySST,KeServiceDescriptorTable->ntoskrnl.ServiceTable,LimitNumber *4);
memcpy(mySSTParamTable,KeServiceDescriptorTable->ntoskrnl.ArgumentTable,LimitNumber);
if (!KeAddSystemServiceTable(mySST,NULL,LimitNumber,mySSTParamTable,3))
{
goto f**kother
}
else
{
oldret = HookCode(hkKiXXXX);
}
return;
f**kother:
//有些系统上SSDT没有4个位置或者第四个被占用,此时我们复制第一个表,然后把自己加载后面
//代码因为xxxx原因,暂略~

}

__declspec (naked)
void hkKiXXXX
{
__asm
{
pushad
pushfd
push fs
push es
push ds
push eax
mov ax,0x30
mov fs,ax
pop eax
cmp eax,0x1000
jb fixit;
nofix:
pop ds
pop es
pop fs
popfd
popad
jmp oldret
fixit:
pop ds
pop es
pop fs
popfd
popad
add eax,0x3000
jmp oldret
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值