网络安全之CMD下的网络安全配置( 三 )



作为系统服务,不但要在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下增加主键,在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumRoot下也增加主键 。而后者默认只有SYSTEM身份才可以修改 。幸运的是,并不需要手动添加它,winpcap被调用时会自动搞定 。甚至完全不用手动修改注册表,所有的事winpcap都会自己完成,只需要将三个文件复制到合适的位置就行了 。
作为范例,还是演示一下如何修改注册表:利用前面说过的inf文件来实现 。

[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=NPF,,winpcap_svr
[winpcap_svr]
DisplayName=Netgroup Packet Filter
ServiceType=0x1
StartType=3
ErrorControl=1
ServiceBinary=%npf.sys

将上面这些内容保存为_wpcap_.inf文件 。
再写一个批处理_wpcap_.bat:

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %蚠wpcap_.inf
del _wpcap_.inf
if /i %?=%SYSTEMROOT%system32 goto COPYDRV
copy packet.dll %SYSTEMROOT%system32
copy wpcap.dll %SYSTEMROOT%system32
del packet.dll
del wpcap.dll
:COPYDRV
if /i %?=%SYSTEMROOT%system32drivers goto END
copy npf.sys %SYSTEMROOT%system32drivers
del npf.sys
:END
del %0

然后用Winrar将所有文件(5个)打包为自解压的exe,并将『高级自解压选项』->『解压后运行』设置为_wpcap_.bat,命令行的winpcap安装包就制作完成了 。
注意,批处理最后一行没有回车符 。否则会因为正在运行而无法删除自己 。
所有的软件安装,基本上可以套用这个思路 。但也有例外的,那就是系统补丁的安装 。
由于系统补丁有可能要替换正在被执行或访问的文件,所以用copy命令是不行的 。
幸好,Windows补丁包支持命令行安装 。
比如:

KB824146.exe -n -z -q
-n 不保留备份
-z 不重起
-q 安静模式

如果有一堆补丁要打,那么用RAR打包成自解压文件,外加一个批处理 。

for %%f in (KB??????.exe) do %%f -n -z -q
for %%f in (KB??????.exe) do del %%f
del %0

Windows脚本
很多事用脚本来做是很简洁的 。下面给出几个常用脚本的echo版 。
1、显示系统版本

@echo for each ps in getobject _ >ps.vbs
@echo ("winmgmts:.rootcimv2:win32_operatingsystem").instances_ >>ps.vbs
@echo wscript.echo ps.caption^&" "^&ps.version:next >>ps.vbs
cscript //nologo ps.vbs & del ps.vbs

2、列举进程

@echo for each ps in getobject _ >ps.vbs
@echo ("winmgmts:.rootcimv2:win32_process").instances_ >>ps.vbs
@echo wscript.echo ps.handle^&vbtab^&ps.name^&vbtab^&ps.executablepath:next >>ps.vbs
cscript //nologo ps.vbs & del ps.vbs

3、终止进程

@echo for each ps in getobject _ >pk.vbs
@echo ("winmgmts:.rootcimv2:win32_process").instances_ >>pk.vbs
@echo if ps.handle=wscript.arguments(0) then wscript.echo ps.terminate:end if:next >>pk.vbs

要终止PID为123的进程,使用如下语法:

cscript pk.vbs 123

如果显示一个0,表示终止成功 。
然后:

del pk.vbs

4、重启系统

@echo for each os in getobject _ >rb.vbs
@echo ("winmgmts:{(shutdown)}!.rootcimv2:win32_operatingsystem").instances_ >>rb.vbs
@echo os.win32shutdown(2):next >>rb.vbs & cscript //nologo rb.vbs & del rb.vbs

5、列举自启动的服务

@echo for each sc in getobject("winmgmts:.rootcimv2:win32_service").instances_ >sc.vbs
@echo if sc.startmode="Auto" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs
@echo next >>sc.vbs & cscript //nologo sc.vbs & del sc.vbs

6、列举正在运行的服务

@echo for each sc in getobject("winmgmts:.rootcimv2:win32_service").instances_ >sc.vbs
@echo if sc.state="Running" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs

推荐阅读