也谈rootkit 注册表信息隐藏

Rootkit隐形技术入门 Rootkit隐形技术入门这篇文章的作者: 宇文 出处:51CTO摘要:在安全界,rootkit已越来越引起人们的关注,而rootkit技术的过人之处就在于它的隐形技术,本文旨在向读者打开一扇通向rootkit隐形技术的大门。 一、综述本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术:进程隐形技术和文件隐形技术。同时,为了让读者获得rootk 阅读详情
注册表是Windows系统存储关于计算机配置信息的数据库,包括了系统运行时需要调用的运行方式的设置,是系统的核心。操作系统是用特殊的文件 (Hive文件)来存储注册表的内容,并提供给用户相关的编程接口(APIs)来进行注册表的操作,例如Advapi32.dll中的Registry Functions(如:RegEnumKey)。在Windows操作系统中,函数的调用有着极其规范的层次结构,如下图所示是系统实现 RegEnumKey函数的调用体系。
名称:  2.JPG
查看次数: 389
文件大小:  24.9 KB
注册表隐藏就是将系统呈现给用户的注册表信息进行修改,使得用户或检测工具无法直观地发现事实上存在的注册表内容。目前的注册表隐藏,大都采用的是Hook技术。根据它们不同的运行环境和模式,把常见的注册表隐藏技术称为用户态下注册表隐藏技术和核心态下注册表隐藏技术。它们通常是利用IAT Hook, Inline Hook、远程线程注入、SSDT Hook等方式来实现。网上比较多见的核心态隐藏技术是ssdt hook NtEnumerateKey 和inline hook CmEnumerateKey。然而这些方法已经很容易被防御体系发现。

本文是通过修改hive内存结构中的特殊指针hook实现注册表项的隐藏。关于hive文件结构,论坛中曾经有两人写过相关的文章,一篇是炉子大牛写的《HIVE格式解析》,另一篇是HSQ大牛写的《注册表监控弱点演示程序 v0.2 逆向ASM源码及相关资料》,另外,Petter Nordahl-Hagen写过一个hive文件存取库,我整理了下,也附在本篇文章之后,方便大家查阅。

相信看过网上这几篇的朋友一定还有些疑虑,到底注册表的工作原理是怎样的呢?我们今天通过一个驱动代码来揭开它神秘的面纱。

在磁盘上,注册表并不是简单的一个大文件,而是一组称为hive的单独文件。每个hive文件包含了一颗注册表树。有一个键作为该树的根。子键和他们的值存储在根的下面。当配置管理器(注册表的执行体子系统)加载hive的时候,会在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet /Control/hivelist子键下的注册表值中记录下每个hive的路径。下面是我本机注册表hivelist子键导出的信息:

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/hivelist]

"//REGISTRY//MACHINE//HARDWARE"=""

"//REGISTRY//MACHINE//SECURITY"="//Device//HarddiskVolume1//WINDOWS//system32//config//SECURITY"

"//REGISTRY//MACHINE//SOFTWARE"="//Device//HarddiskVolume1//WINDOWS//system32//config//SOFTWARE"

"//REGISTRY//MACHINE//SYSTEM"="//Device//HarddiskVolume1//WINDOWS//system32//config//SYSTEM"

"//REGISTRY//USER//.DEFAULT"="//Device//HarddiskVolume1//WINDOWS//system32//config//DEFAULT"

"//REGISTRY//MACHINE//SAM"="//Device//HarddiskVolume1//WINDOWS//system32//config//SAM"

"//REGISTRY//USER//S-1-5-20"="//Device//HarddiskVolume1//Documents and Settings//NetworkService//NTUSER.DAT"

"//REGISTRY//USER//S-1-5-20_Classes"="//Device//HarddiskVolume1//Documents and Settings//NetworkService//Local Settings//Application Data//Microsoft//Windows//UsrClass.dat"

"//REGISTRY//USER//S-1-5-19"="//Device//HarddiskVolume1//Documents and Settings//LocalService//NTUSER.DAT"

"//REGISTRY//USER//S-1-5-19_Classes"="//Device//HarddiskVolume1//Documents and Settings//LocalService//Local Settings//Application Data//Microsoft//Windows//UsrClass.dat"

"//REGISTRY//USER//S-1-5-21-1550111154-316279633-4274931122-1006"="//Device//HarddiskVolume1//Documents and Settings//Jason//NTUSER.DAT"

"//REGISTRY//USER//S-1-5-21-1550111154-316279633-4274931122-1006_Classes"="//Device//HarddiskVolume1//Documents and Settings//Jason//Local Settings//Application Data//Microsoft//Windows//UsrClass.dat"

通过这个信息我们看到,在C:/WINDOWS/system32/config目录中存储着HKLM所有项的hive文件以及一个HKU的DEFAULT hive文件,其他的HKU下的hive文件存储在c:/Documents and Settings等子目录下。在hivelist记录的这些信息中,我们看到hive文件只能加载到HKLM和HKU下。如图:
名称:  1.JPG
查看次数: 695
文件大小:  30.7 KB

配置管理器从逻辑上将一个hive分成一些称为block的分配单元。如图:
名称:  3.jpg
查看次数: 683
文件大小:  12.3 KB

其方式类似于文件系统将一个磁盘分成簇。根据定义,注册表block的大小为4096字节(4kb)。当新的数据要扩展一个hive时,该hive总是按照 block的粒度来增加。hive的第一个block称为base block. 里面包含了一些全局信息,包括一个特征签名regf、更新的序列号,时间戳,hive格式版本号、校验和以及该hive的内部文件名(如:/Device /HarddiskVolume1/WINDOWS/system32/config/SECURITY)。

结构如下:
lkd> dt _hbase_block

nt!_HBASE_BLOCK
   +0x000 Signature         : Uint4B
   +0x004 Sequence1         : Uint4B
   +0x008 Sequence2         : Uint4B
   +0x00c TimeStamp         : _LARGE_INTEGER
    +0x014 Major             : Uint4B
    +0x018 Minor             : Uint4B
    +0x01c Type              : Uint4B
    +0x020 Format            : Uint4B
    +0x024 RootCell          : Uint4B
    +0x028 Length            : Uint4B
    +0x02c Cluster           : Uint4B
    +0x030 FileName          : [64] UChar
   +0x070 Reserved1         : [99] Uint4B
    +0x1fc CheckSum          : Uint4B
    +0x200 Reserved2         : [894] Uint4B
    +0xff8 BootType          : Uint4B
    +0xffc BootRecover       : Uint4B
windows将一个hive所存储的注册表数据组织在一种称为cell的容器中。一个cell可以容纳一个键、一个值、一个安全描述符、一列子键或者一列键值。其对应的结构如下:

typedef struct _CELL_DATA
{
     union _u
    {
         CM_KEY_NODE       KeyNode;
         CM_KEY_VALUE      KeyValue;
         CM_KEY_SECURITY   KeySecurity;     // Variable security descriptor length
         CM_KEY_INDEX      KeyIndex;        // Variable sized structure
         CM_BIG_DATA       ValueData;       // This is only for big cells; a list of cells
                                          // all of the length CM_KEY_VALUE_BIG

         HCELL_INDEX       KeyList[1];      // Variable sized array
         WCHAR             KeyString[1];    // Variable sized array
     } u;
} CELL_DATA, *PCELL_DATA;

该结构中嵌套了一个联合体,用于代表cell可以存放的不同类型的数据。

下面给出CELL_DATA可以存放的几种不同类型的cell结构:

lkd> DT _CM_KEY_NODE
nt!_CM_KEY_NODE
    +0x000 Signature         : Uint2B
    +0x002 Flags             : Uint2B
    +0x004 LastWriteTime     : _LARGE_INTEGER
    +0x00c Spare             : Uint4B
    +0x010 Parent            : Uint4B
    +0x014 SubKeyCounts      : [2] Uint4B
    +0x01c SubKeyLists       : [2] Uint4B
    +0x024 ValueList         : _CHILD_LIST
    +0x01c ChildHiveReference : _CM_KEY_REFERENCE
    +0x02c Security          : Uint4B
    +0x030 Class             : Uint4B
    +0x034 MaxNameLen        : Pos 0, 16 Bits
    +0x034 UserFlags         : Pos 16, 4 Bits
    +0x034 VirtControlFlags : Pos 20, 4 Bits
    +0x034 Debug             
木马攻防实战:30种攻击手法深度解析与系统化防御指南 恶意软件是网络安全领域的核心威胁之一,其中木马程序因其隐蔽性和破坏性尤为突出。其工作原理通常涉及伪装、持久化驻留、隐蔽通信和数据窃取等多个阶段,利用系统漏洞或社会工程学手段渗透目标系统。从技术价值看,理解木马运作机制对于构建有效的检测与防御体系至关重要,能够帮助安全从业者及普通用户识别异常行为、保护敏感数据。在实际应用场景中,无论是个人终端防护还是企业网络安全架构,掌握木马攻防知识都能显著提升整体安全水位。本文聚焦于**木马攻防实战**,系统拆解了包括**持久化与隐藏**在内的30种典型攻击手法,并提供了从 阅读详情

相关推荐

揭秘“无限次重启”背后的系统安全与恶意程序陷阱

htmltable {th, td {th {pre {简介:“无限次重启”是一种由恶意软件或系统故障引发的严重计算机问题,表现为系统在启动后不断循环重启,导致用户无法正常使用设备并可能造成数据丢失。该现象通常由setup.exe等可执行文件携带的病毒、木马或rootkit引起,这些恶意程序篡改系统关键文件或添加自启动项,干扰正常启动流程。

weixin_32311823的博客 1473

rootkit,文件,进程隐藏

rootkit,backdoor,系统调用劫持,ps进程隐藏,ls文件隐藏,代码

hook KeyControlBlock方式注册表隐藏

hookKeyControlBlock 方式隐藏注册表文件

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

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

ring0 rootkit隐藏注册表中的项.zip

ring0 rootkit隐藏注册表中的项.zip

python修改注册表终止360进程实例

本文实例讲述了python修改注册表终止360进程的实现方法。分享给大家供大家参考。 具体实现代码如下: import _winreg import os import shutil #复制自身 shutil.copyfile(K3.exe,c:WINDOWSsystem32K3.exe) #把360启动改为自身 run = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE, "SOFTWAREMicrosoftWindowsCurrentVersionRun",0,_winreg.KEY_WRITE ) _winreg.SetValueEx(

超详细Tokenizer——文本训练数据预处理

Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。

halo的博客 3700

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 748

STC8H单片机ADC实战:从读取电位器到串口绘图,12位精度玩起来

本文详细介绍了STC8H单片机的ADC功能实战应用,从读取电位器到串口绘图,展示了12位精度的实现方法。通过硬件连接、代码配置、串口数据传输及高级优化技巧,帮助开发者快速掌握ADC模块的使用,适用于各种传感器数据采集和信号处理场景。

weixin_28278377的博客 343

基于YOLO和KCF的目标跟踪算法研究

该算法结合了YOLO的目标检测能力和KCF的目标跟踪精度,能够实现准确且高效的目标跟踪。通过结合YOLO的目标检测能力和KCF的目标跟踪精度,该算法能够实现准确且高效的目标跟踪。目标跟踪:从第二帧开始,我们使用YOLO检测目标,并使用KCF跟踪器更新目标的位置。具体而言,对于每个检测到的目标,我们计算其与上一帧跟踪结果的特征相似度,然后选择最相似的目标作为当前帧的跟踪结果。需要注意的是,以上代码只是演示了基于YOLO和KCF的目标跟踪算法的基本思路,实际应用中可能需要根据具体情况进行调整和优化。

QoDeveloper的博客 1573

Buildroot RK3568系统中更改GPU驱动为:panfrost

1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2078

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2169

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1348

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 一种躲避运行时代码校验的方法
下一篇: 简单inline hook ObReferenceObjectByHandle保护进程和屏蔽文件执行
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值