基本信息
源码名称:隐藏进程和保护进程防止被结束
源码大小:0.98M
文件格式:.zip
开发语言:C/C++
更新时间:2017-07-26
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 5 元 
   源码介绍

原理就是HOOK SSDT
只是为了复习下驱动的一些基本知识,工具基本用处不是很大
但是代码有很多值得初学者学习的地方
很多可以拿来重用的
win7 xp测试通过

//用来去掉内存的可写属性,从而实现内存只读
VOID DisableWriteProtect(ULONG oldAttr)
{
_asm
{
mov eax, oldAttr
mov cr0, eax
sti;
}
}



//用来去掉内存的只读保护,从而实现可以写内存
VOID EnableWriteProtect(PULONG pOldAttr)
{
ULONG uAttr; 

_asm 

cli;
mov  eax, cr0; 
mov  uAttr, eax; 
and  eax, 0FFFEFFFFh; // CR0 16 BIT = 0 
mov  cr0, eax; 
}; 

//保存原有的 CRO 属性 
*pOldAttr = uAttr; 
}


//备份 SSDT 中原有服务的地址,因为我们在解除 Hook 时需要还原 SSDT 中原有地址
VOID BackupSysServicesTable()
{
ULONG i;

for(i = 0; (i < KeServiceDescriptorTable->ntoskrnl.NumberOfService) && (i < MAX_SYSTEM_SERVICE_NUMBER); i )
{
oldSysServiceAddr[i] = KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[i];
//oldSysServiceAddr[i] = *(PULONG)((ULONG)KeServiceDescriptorTable->ntoskrnl.ServiceTableBase 4 * i);

KdPrint(("\nBackupSysServicesTable - Function Information { Number: 0x%04X , Address: %08X}", i, oldSysServiceAddr[i]));
}
}


//开启HOOK
NTSTATUS InstallSSDTHook(ULONG oldService, ULONG newService)
{
ULONG uOldAttr = 0;
EnableWriteProtect(&uOldAttr);
SYSCALL_FUNCTION(oldService) = newService;
//KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[SYSCALL_INDEX(oldService)] = newService;
DisableWriteProtect(uOldAttr);
return STATUS_SUCCESS;
}


//关闭HOOK
NTSTATUS UnInstallSSDTHook(ULONG oldService)
{
ULONG uOldAttr = 0;
EnableWriteProtect(&uOldAttr);
SYSCALL_FUNCTION(oldService) = oldSysServiceAddr[SYSCALL_INDEX(oldService)];
//KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[SYSCALL_INDEX(oldService)] = oldSysServiceAddr[SYSCALL_INDEX(oldService)];
DisableWriteProtect(uOldAttr);
return STATUS_SUCCESS;
}