非常高兴已经有高人开始为AVZ写脚本了,谢谢syfwxmh。希望有更多的人能参与进来,用我们的知识与技术造福更多用户。
自编AVZ脚本修复安全模式
http://hi.baidu.com/kis2009
AVZ Antiviral Toolkit 提供了一整套的脚本函数,使得用户可以自己编写脚本清除病毒、修复系统。今天我们就来看一下如何用AVZ的脚本函数修复安全模式。当然,网络上现在已经有注册表文件或其它的修复程序,但为了演示AVZ脚本函数,我们这里就用AVZ脚本来恢复。恶意程序破换安全模式其实就是删除了注册表中与安全模式相关的注册表键,要恢复安全模式我们就需要恢复那些被删除的键。AVZ脚本为我们提供了这样的函数。我们这里用到的脚本函数有:
procedure RegKeyCreate(ARoot, AName : string);
procedure RegKeyStrParamWrite(ARoot, AName, AParam, AValue : string);
AVZ脚本的语法是类Delphi的。学过Delphi编程的朋友可以很容易地理解上面两个函数的原型。对于不懂编程的朋友,我这里简单介绍一下:
procedure RegKeyCreate(ARoot, AName : string); 是说RegKeyCreate是一个函数名(函数就是子程序,完成某一种功能的一段代码),后面圆括号中的是函数的参数,是这段子程序做操作所要用到的东西。RegKeyCreate函数用于创建一个注册表键,注册表键就是类似于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion这样的东西。后面的ARoot就表示主键,主键一共有五种:HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_USERS和HKEY_CURRENT_CONFIG。这些主键下又有子键,参数里的AName就表示子键的键名。后面的“: string”是说这两个参数都是字符串类型的。比如要创建一个注册表键“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal”就可以写:
RegKeyCreate('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal');
RegKeyStrParamWrite这个函数是给键值设置数据的,参数ARoot、AName还是分别表示主键与子键,AParam表示键值(注册表编辑器里叫value),AValue表示键值的数据(注册表编辑器里叫data)。比如要将“HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot”的键值“AlternateShell”的数据设置为“cmd.exe”,就可以这样写:
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot', 'AlternateShell', 'cmd.exe');
简单介绍这两个函数之后,我们书归正文。为了恢复安全模式,我们需要恢复安全模式相关的所有注册表信息,也就是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot下的所有注册表。这个键下面都有什么信息呢?找一个恢复安全模式用的注册表文件就可以看到。其内容如下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot]
"AlternateShell"="cmd.exe"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\AppMgmt]
@="Service"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Base]
@="Driver Group"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot Bus Extender]
@="Driver Group"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot file system]
@="Driver Group"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\CryptSvc]
@="Service"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\DcomLaunch]
@="Service"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmadmin]
@="Service"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmboot.sys]
@="Driver"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmio.sys]
@="Driver"
……
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{71A27CDD-812A-11D0-BEC7-08002BE2092F}]
@="Volume"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}]
@="Human Interface Devices"
这个文件的内容就代表着要对注册表进行的操作。我们就来根据这个文件的内容来写修复脚本。这些东西代表什么呢?我们选两个代表性的来看一下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal]
这行表示创建一个注册表键“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal”。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot]
"AlternateShell"="cmd.exe"
表示将注册表键“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot”下的键值“AlternateShell”的数据设置为“cmd.exe”。
这不正是前面例子里用脚本函数所做的吗,我们再来回顾一下:
RegKeyCreate('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot', 'AlternateShell', 'cmd.exe');
这下您知道该如何根据注册表文件写脚本了吧。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\AppMgmt]
@="Service"
写成脚本是什么呢?这里的@表示默认的键值,脚本里用空字符串“”表示,所以写成脚本函数是下面这个样子:
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\AppMgmt', '', 'Service');
这样所有注册表文件里的操作我们都能写成等价的脚本函数了。剩下的就是力气活了。要修复的注册表键怎么这么多?
AVZ脚本以“begin”开始,最后以“end.”结束。最后我们得到的脚本是这样的(中间略去n行):
begin
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot', 'AlternateShell', 'cmd.exe');
RegKeyCreate('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\AppMgmt', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Base', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot Bus Extender', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot file system', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\CryptSvc', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\DcomLaunch', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmadmin', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmboot.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmio.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmload.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmserver', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\EventLog', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\File system', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Filter', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\HelpSvc', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Netlogon', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PCI Configuration', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PlugPlay', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PNP Filter', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Primary disk', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\RpcSs', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\SCSI Class', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\sermouse.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\sr.sys', '', 'FSFilter System Recovery');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\SRService', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\System Bus Extender', '', 'Driver Group');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vga.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vgasave.sys', '', 'Driver');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\WinMgmt', '', 'Service');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{36FC9E60-C465-11CF-8056-444553540000}', '', 'Universal Serial Bus controllers');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E965-E325-11CE-BFC1-08002BE10318}', '', 'CD-ROM Drive');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E967-E325-11CE-BFC1-08002BE10318}', '', 'DiskDrive');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E969-E325-11CE-BFC1-08002BE10318}', '', 'Standard floppy disk controller');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96A-E325-11CE-BFC1-08002BE10318}', '', 'Hdc');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96B-E325-11CE-BFC1-08002BE10318}', '', 'Keyboard');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96F-E325-11CE-BFC1-08002BE10318}', '', 'Mouse');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E977-E325-11CE-BFC1-08002BE10318}', '', 'PCMCIA Adapters');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E97B-E325-11CE-BFC1-08002BE10318}', '', 'SCSIAdapter');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E97D-E325-11CE-BFC1-08002BE10318}', '', 'System');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E980-E325-11CE-BFC1-08002BE10318}', '', 'Floppy disk drive');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{71A27CDD-812A-11D0-BEC7-08002BE2092F}', '', 'Volume');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}', '', 'Human Interface Devices');
……
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{71A27CDD-812A-11D0-BEC7-08002BE2092F}', '', 'Volume');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}', '', 'Human Interface Devices');
end.
脚本怎么执行呢?一种方法是在KIS2009的“执行AVZ脚本”里粘贴入脚本执行,方法可以参考我的帖子《用卡巴斯基系统报告生成avz脚本清除hbkernel病毒》。另一种就是在AVZ Antiviral Toolkit的菜单里点选“File->Custom scripts”,在弹出的“Runing script”(这里的拼写有问题,应该是“Running scripte”,呵呵)框里粘贴入脚本,点击“Run”即可。在AVZ里运行的时候在下面的Log框里还能看到日志呢。 |