注册表是Windows系统存储关于计算机配置信息的数据库,包括了系统运行时需要调用的运行方式的设置,是系统的核心。操作系统是用特殊的文件 (Hive文件)来存储注册表的内容,并提供给用户相关的编程接口(APIs)来进行注册表的操作,例如Advapi32.dll中的Registry Functions(如:RegEnumKey)。在Windows操作系统中,函数的调用有着极其规范的层次结构,如下图所示是系统实现 RegEnumKey函数的调用体系。注册表隐藏就是将系统呈现给用户的注册表信息进行修改,使得用户或检测工具无法直观地发现事实上存在的注册表内容。目前的注册表隐藏,大都采用的是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下。如图:
配置管理器从逻辑上将一个hive分成一些称为block的分配单元。如图:
其方式类似于文件系统将一个磁盘分成簇。根据定义,注册表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
相关推荐
揭秘“无限次重启”背后的系统安全与恶意程序陷阱
htmltable {th, td {th {pre {简介:“无限次重启”是一种由恶意软件或系统故障引发的严重计算机问题,表现为系统在启动后不断循环重启,导致用户无法正常使用设备并可能造成数据丢失。该现象通常由setup.exe等可执行文件携带的病毒、木马或rootkit引起,这些恶意程序篡改系统关键文件或添加自启动项,干扰正常启动流程。
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库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。
STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成
本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。
STC8H单片机ADC实战:从读取电位器到串口绘图,12位精度玩起来
本文详细介绍了STC8H单片机的ADC功能实战应用,从读取电位器到串口绘图,展示了12位精度的实现方法。通过硬件连接、代码配置、串口数据传输及高级优化技巧,帮助开发者快速掌握ADC模块的使用,适用于各种传感器数据采集和信号处理场景。
基于YOLO和KCF的目标跟踪算法研究
该算法结合了YOLO的目标检测能力和KCF的目标跟踪精度,能够实现准确且高效的目标跟踪。通过结合YOLO的目标检测能力和KCF的目标跟踪精度,该算法能够实现准确且高效的目标跟踪。目标跟踪:从第二帧开始,我们使用YOLO检测目标,并使用KCF跟踪器更新目标的位置。具体而言,对于每个检测到的目标,我们计算其与上一帧跟踪结果的特征相似度,然后选择最相似的目标作为当前帧的跟踪结果。需要注意的是,以上代码只是演示了基于YOLO和KCF的目标跟踪算法的基本思路,实际应用中可能需要根据具体情况进行调整和优化。
Buildroot RK3568系统中更改GPU驱动为:panfrost
1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载
华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。
OpenOCD入门到精通:第20章 Target 子系统源码分析
摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。
超大规模系统(千万级用户)中实现字段级权限控制
摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
1473



被折叠的 条评论
为什么被折叠?



