📄 788.html
字号:
RtlCopyMemory((PCHAR)Value, (PCHAR)valueInfoP->Data, valueInfoP->DataLength);<br />
ReturnValue = 1;<br />
}<br />
<br />
if(!valueInfoP);<br />
ExFreePool(valueInfoP);<br />
ZwClose(KeyHandle);<br />
return ReturnValue;<br />
}<br />
<br />
VOID MyRemoveCraeteThreadNotifyRoutine(<br />
IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine<br />
)<br />
{<br />
//PsRemoveCreateThreadNotifyRoutine(ThreadCreateMon);<br />
PVOID ptr=NULL;<br />
if(BuildNumber==2195) //Windows 2000 Sp4,2195<br />
//低于sp4的我没有调试<br />
{<br />
ptr=0x80484520;<br />
}<br />
else if(BuildNumber==2600) <br />
{<br />
if(wcscmp(Version,L"Service Pack 1")==0) //Windows Xp Sp1,2600<br />
ptr=0x8054efc0;<br />
else if(wcscmp(Version,L"Service Pack 2")==0) //Windows Xp Sp2,2600<br />
ptr=0x80561d20;<br />
}<br />
else if(BuildNumber==3790) //Windows 2003 server,3790<br />
{<br />
ptr=0x80570f40;<br />
}<br />
if(ptr!=NULL)<br />
memset(ptr, 0, sizeof(ULONG)*8);<br />
}<br />
<br />
VOID ThreadCreateMon (IN HANDLE PId, IN HANDLE TId, IN BOOLEAN bCreate)<br />
{<br />
<br />
PEPROCESS EProcess,PEProcess;<br />
NTSTATUS status;<br />
HANDLE dwParentPID;<br />
<br />
status = PsLookupProcessByProcessId( (ULONG)PId, &EProcess);<br />
if (!NT_SUCCESS( status ))<br />
{<br />
DbgPrint("PsLookupProcessByProcessId()\n");<br />
return ;<br />
} <br />
<br />
if ( bCreate )<br />
{<br />
dwParentPID=PsGetCurrentProcessId();<br />
status = PsLookupProcessByProcessId( <br />
(ULONG)dwParentPID, <br />
&PEProcess);<br />
if (!NT_SUCCESS( status ))<br />
{<br />
DbgPrint("PsLookupProcessByProcessId()\n");<br />
return ;<br />
}<br />
if(PId==4) //System进程创建的东东我们不管<br />
//在2000下是0,在XP后是4<br />
return;<br />
if((g_bMainThread==TRUE)<br />
&&(g_dwParentId != dwParentPID)<br />
&&(dwParentPID != PId)<br />
)<br />
{<br />
g_bMainThread=FALSE;<br />
sprintf(outBuf, "=============================="<br />
"Remote Thread :"<br />
"=============================="<br />
"\nT:%18s%9d%9d%25s%9d\n"<br />
"======================================"<br />
"======================================\n", <br />
(char *)((char *)EProcess+ProcessNameOffset),<br />
PId, TId,<br />
(char *)((char *)PEProcess+ProcessNameOffset),dwParentPID);<br />
if(gpEventObject!=NULL)<br />
KeSetEvent((PRKEVENT)gpEventObject, 0, FALSE);<br />
}<br />
if(CheckList.ONLYSHOWREMOTETHREAD) //只显示远线程<br />
return;<br />
DbgPrint( "T:%18s%9d%9d%25s%9d\n", <br />
(char *)((char *)EProcess+ProcessNameOffset),<br />
PId, TId,<br />
(char *)((char *)PEProcess+ProcessNameOffset),dwParentPID);<br />
sprintf(outBuf, "T:%18s%9d%9d%25s%9d\n", <br />
(char *)((char *)EProcess+ProcessNameOffset),<br />
PId, TId,<br />
(char *)((char *)PEProcess+ProcessNameOffset),dwParentPID);<br />
if(gpEventObject!=NULL)<br />
KeSetEvent((PRKEVENT)gpEventObject, 0, FALSE);<br />
}<br />
else if(CheckList.SHOWTERMINATETHREAD)<br />
{<br />
DbgPrint( "TERMINATED == THREAD ID: %d\n", TId);<br />
sprintf(outBuf,"TERMINATED == THREAD ID: %d\n", TId);<br />
if(gpEventObject!=NULL)<br />
KeSetEvent((PRKEVENT)gpEventObject, 0, FALSE);<br />
}<br />
}<br />
<br />
<br />
VOID ProcessCreateMon ( HANDLE hParentId, HANDLE PId, BOOLEAN bCreate )<br />
{<br />
<br />
PEPROCESS EProcess,PProcess;<br />
NTSTATUS status;<br />
HANDLE TId;<br />
<br />
g_dwParentId = hParentId;<br />
status = PsLookupProcessByProcessId((ULONG)PId, &EProcess);<br />
if (!NT_SUCCESS( status ))<br />
{<br />
DbgPrint("PsLookupProcessByProcessId()\n");<br />
return ;<br />
}<br />
status = PsLookupProcessByProcessId((ULONG)hParentId, &PProcess);<br />
if (!NT_SUCCESS( status ))<br />
{<br />
DbgPrint("PsLookupProcessByProcessId()\n");<br />
return ;<br />
}<br />
<br />
if ( bCreate )<br />
{<br />
g_bMainThread = TRUE;<br />
DbgPrint( "P:%18s%9d%9d%25s%9d\n",<br />
(char *)((char *)EProcess+ProcessNameOffset),<br />
PId,PsGetCurrentThreadId(),<br />
(char *)((char *)PProcess+ProcessNameOffset),<br />
hParentId<br />
);<br />
sprintf(outBuf, "P:%18s%9d%9d%25s%9d\n",<br />
(char *)((char *)EProcess+ProcessNameOffset),<br />
PId,PsGetCurrentThreadId(),<br />
(char *)((char *)PProcess+ProcessNameOffset),<br />
hParentId<br />
);<br />
if(gpEventObject!=NULL)<br />
KeSetEvent((PRKEVENT)gpEventObject, 0, FALSE);<br />
}<br />
else if(CheckList.SHOWTERMINATEPROCESS)<br />
{<br />
DbgPrint( "TERMINATED == PROCESS ID: %d\n", PId);<br />
sprintf(outBuf,"TERMINATED == PROCESS ID: %d\n", PId);<br />
if(gpEventObject!=NULL)<br />
KeSetEvent((PRKEVENT)gpEventObject, 0, FALSE);<br />
}<br />
<br />
}<br />
<br />
NTSTATUS OnUnload( IN PDRIVER_OBJECT pDriverObject )<br />
{<br />
NTSTATUS status;<br />
DbgPrint("OnUnload called\n");<br />
if(gpEventObject)<br />
ObDereferenceObject(gpEventObject); <br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -