小虫东拼西凑的代码,无驱进入ring0后修改内核对象来隐藏自身进程,为什么一运行就蓝。
另外小虫想学高手那样调试程序,不知从何下手,望高人指点一二。
以下是代码,完整代码见附件
NTSTATUS Ring0Code(ULONG size,PULONG buffer)
{
DWORD eproc=0x00000000;
ULONG BuildNumber;
DWORD PIDOffset,ListOffset;
int start_PID=0;
PLIST_ENTRY plist_active_procs;
PIDOffset=0x84;
ListOffset=0x88;
// LIST_ENTRY plist_active_procs;
// PLIST_ENTRY plist_active_procs;//=NULL;
eproc=(DWORD)pfnPsGetCurrentProcessId();
plist_active_procs=(LIST_ENTRY*)(eproc+ListOffset);
*((DWORD*)plist_active_procs->Blink)=(DWORD)plist_active_procs->Flink;
*((DWORD*)plist_active_procs->Flink+1)=(DWORD)plist_active_procs->Blink;
//start_PID=*((DWORD*)(eproc+PIDOffset));
//current_PID=start_PID;
// pfnPsGetVersion(NULL,NULL,&BuildNumber,NULL);
//PLIST_ENTRY ListHead,ListPtr;
/* switch (BuildNumber) // 各版本OS的KPEB结构不同
{
case 2195: // Win2000
// ListOffset = 0xa0;
PIDOffset = 0x9c;
// NameOffset = 0x1fc;
break;
case 2600: // WinXP
// ListOffset = 0x88;
PIDOffset = 0x84;
// NameOffset = 0x174;
break;
case 3790: // Win2003
// ListOffset = 0x88;
PIDOffset = 0x84;
// NameOffset = 0x154;
break;
default:
return STATUS_NOT_IMPLEMENTED;
}*/
//pfnDbgPrint("PIDOffset is %d\n",PIDOffset);
//pfnDbgPrint("Enter Ring0\nmyprocess is %d\n",eproc);
//pfnDbgPrint("Enter Ring0\BuildNumber is %d\n",BuildNumber);
// ListOffset=0x88;
return STATUS_SUCCESS;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课