当前位置:文档之家› 注册表安全编程实验

注册表安全编程实验

实验三、注册表安全编程实验一、实验目的与要求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的权力。

该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSlpSubKey 入参,标识子键名称。

该参数不能为空。

参数中不能存在(/)Reserved 保留值,必须为0lpClass 入参,指向一个字符串,该字符串定义了该键的类型。

可以为空。

该参数可以在操作本地和远程注册表时使用dwOptions 入参,该参数可以是以下值REG_OPTION_BACKUP_RESTORE,0x00000004LREG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值REG_OPTION_VOLATILE,0x00000001LsamDesired 入参,定义访问权限lpSecurityAttributes 入参,定义返回的句柄是否可以被子进程继承,为NULL时不能继承。

phkResult 出参,保存返回的句柄lpdwDisposition 出参,可以是以下值。

如果为空,则不返回。

REG_CREATED_NEW_KEY,0x00000001L 该键是新创建的键REG_OPENED_EXISTING_KEY,0x00000002L 该键是已经存在的键该函数的返回结果:成功则返回ERROR_SUCCESS,否则失败.RegOpenKeyEx该函数用来打开一个指定的注册表键,参数的使用和返回结果与RegCreateKeyEx函数相同。

LONG RegOpenKeyEx(HKEY hKey, // 需要打开的主键的名称LPCTSTR lpSubKey, //需要打开的子键的名称DWORD ulOptions, // 保留,设为0REGSAM samDesired, // 安全访问标记,也就是权限PHKEY phkResult // 得到的将要打开键的句柄) ;RegSetValueEx该函数将在注册表项下设置指定值的数据和类型LONG RegSetValueEx(HKEY hKey,LPCTSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,DWORD cbData);hKey 一个已打开项的句柄,或指定一个标准项名lpValueName 指向一个字符串的指针,该字符串包含了欲设置值的名称。

若拥有该值名称的值并不存在于指定的注册表项中,则此函数将其加入到该项。

如果此值是NULL,或指向空字符串,则此函数为该项的默认值或未命名值设置类型和数据。

Reserved 保留值,必须强制为0dwType 指定将被存储的数据类型,该参数可以为REG_BINARY 任何形式的二进制数据REG_DWORD 一个32位的数字REG_DWORD_LITTLE_ENDIAN 一个“低字节在前”格式的32位数字REG_DWORD_BIG_ENDIAN 一个“高字节在前”格式的32位数字REG_EXPAND_SZ 一个以0结尾的字符串,该字符串包含对环境变量(如“%PAHT”)的未扩展引用REG_LINK 一个Unicode格式的带符号链接REG_MULTI_SZ 一个以0结尾的字符串数组,该数组以连接两个0为终止符REG_NONE 未定义值类型REG_RESOURCE_LIST 一个设备驱动器资源列表REG_SZ 一个以0结尾的字符串lpData 指向一个缓冲区,该缓冲区包含了欲为指定值名称存储的数据。

cbData 指定由lpData参数所指向的数据的大小,单位是字节。

该函数的返回结果:成功则返回ERROR_SUCCESS,否则失败.四、实验内容1、注册表编写实验2、通过注册表修改浏览器的默认主页五、实验步骤(1)、注册表编写实验以管理员的身份运行vc++6.0,部分代码如下:HKEY hKey1;DWORD dwDisposition;LONG lRetCode;//创建注册表代码lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, "SOFTWARE\\ Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping\\WebSecurity", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposi tion);//设置键值代码,Hack_Name为键名,sixage为键值lRetCode=RegSetValueEx(hKey1,"Hack_Name",0,REG_SZ,(byte*)"sixage", 100);成功后截图如下:程序运行完后,结果是在HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\Windows NT\CurrentVersion\IniFileMapping\WebSecurity下创建了2个键值Hack_Hobby和Hack_Name(2)、通过注册表修改浏览器的默认主页通过修改HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main下“Start Page”的键值和HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下“Start Page”的键值,来达到修改浏览者IE默认连接首页的目的。

相关主题