注册表安全编程实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三、注册表安全编程实验
一、实验目的与要求
1、了解windows注册表的作用
2、设计注册表安全防护工具,并利用vc++ 编程实现
二、实验环境
Visual C++ 6.0
三、实验原理
在Windows的注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,就象磁盘文件系统的目录结构一样。每个键都包含了一组特定的信息,每个键的键名都是和它所包含的信息相关联的。注册表的根键共有6个,这些根键都是大写的,并以HKEY为前缀,这种命令约定是以Win32API的Registry函数的关键字的符号变量为基础的。它们分别为:
1)HKEY_CLASSES_ROOT
管理文件系统,根据在Windows中安装的应用程序的扩展名,该根键指明其文件类型的名称,相应打开该文件所要调用的程序等信息。
2)HKEY_CURRENT_USER
管理系统当前的用户信息,在这个根键中保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码,在用户登录Windows时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。
3)HKEY_LOCAL_MACHINE
该根键存放本地计算机硬件数据,管理当前系统硬件配置,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息。
4)HKEY_USERS
管理系统的用户信息,在这个根键中保存了存放在本地计算机口令列表中的用户标识和密码列表,同时每个用户的预配置信息都存储在HKEY_USERS根键中,HKEY_USERS是远程计算机中访问的根键之一。
5)HKEY_CURRENT_CONFIG
管理当前用户的系统配置,在这个根键中保存着定义当前用户桌面配置(如显示器等等)的数据,该用户使用过的文档列表,应用程序配置和其他有关当前用户的安装信息。
6)HKEY_DYN_DATA
管理系统运行数据,在这个根键中保存了系统在运行时的动态数据,此数据在每次显示时都是变化的[2],因此,此根键下的信息没有放在注册表中。
以上是注册表树最顶层的6个分支所分别代表的含义,可以由用户有针对性的对其进行修改、编辑等操作,但也可能受到来自网络的恶意攻击。因此,注册表安全就是防止非授权用户访问注册表敏感键值和注册表本身。
系统启动项
Windows操作系统的系统启动项是在注册表中设置的,在注册表中常见的自启动位置如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
下的Run、RunOnce、RunOnceEx、RunServices和RunServicesOnce;
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion下的Run和Runonce;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersi on\Winlogon\Notify。
在这些注册表位置下,如果添加一新键值,并指定运行的程序,那么只要操作系统启动时,改程序自动启动。
文件关联
文件关联就是将一种类型的文件与一个可以打开它的程序建立起一种依存关系。当用户双击该类型文件时,系统就会先启动这一应用程序,再用它来打开该类型文件。一个文件可以与多个应用程序发生关联,我们可以利用文件的“打开方式”进行关联选择,我们也可以删除因误操作而引起的错误文件关联,可以根据需要新建文件关联,在有些软件中还可以恢复文件的关联。文件关联也是很多流行病毒、木马经常利用的隐藏和自动运行的手段。可能被病毒修改用于启动病毒的,比较常见的是.exe关联方式被破坏,其他的文件关联也有可能被病毒利用.对应的注册表项主要有如下几项:
HKEY_CLASSES_ROOT\exefile\shell\open\command;
HKEY_CLASSES_ROOT\comfile\shell\open\command;
HKEY_CLASSES_ROOT\txtfile\shell\open\command;
HKEY_CLASSES_ROOT\batfile\shell\open\command;
HKEY_CLASSES_ROOT\inifile\shell\open\command。
操作注册表的API函数介绍:
RegCreateKeyEx该函数用来创建注册表键
LONG RegCreateKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition
);
hKey 入参,一个打开键的句柄。调用该函数的进程必须拥有
KEY_CREATE_SUB_KEY的权力。该句柄可以是Re
gCreateKeyEx或者RegOpenKeyEx的返回值,也可
以是以下预定义的值
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS