Windows 2000 Resource Kit其中的一些小工具链接:
http://www.microsoft.com/windows2000/techinfo/reskit/tools/default.asp
概要
Resource Kit实际上是Microsoft为管理员提供的一套额外的工具集,包括了超过400个各种工具,vbs,dll,msc,涵盖了管理TCP/IP,网络,注册表,安全,远程管理,配置,Batch文件,以及操作系统的其他方面。可以让你更容易的管理一个NT系统。不得不承认这是一个非常庞大的工具集,包括到了已经被人们所遗忘2K所应该具有的功能。当你了解到了里面一些工具的性能以后,你将会知道即使仅仅只是一个C2级的操作系统也具有相当的安全性,对于细心配置的系统,攻击也只能伤其表面。但是,但是任何东西都有他的两面性,ResKit就非常具有代表性,在Hacker群体中大家习惯把这个玩意叫做“Hacker的工具箱”。当然如果你想当一个Hacker你得掌握里面的东西,而想当一个好的administrator你也得掌握里面的东西。希望大家都可以好好看看。
第一部分:管理你的计算机
1. Appsec.exe (Application Security)
Appsec.exe是一个基于GUI的应用程序,它允许管理员在一个多用户环境下限制普通用户访问一组网络上经预订的应用程序。启用这种应用程序安全性,将会导致系统拒绝普通用户执行或使用一个未经许可的应用程序。大家 看这是不是一个很有用的工具呢?对某些特定的程序进行限制以后,可以减少一些Hacker入侵的可能,下面我们 继续讨论。
对于2000来说一个显著的特点就是引入了GPO(Group Policy)这种东西,实际上就是一个界面化了的注册表编辑器,但是因为GPO的存在2000大大提高了他的安全性。一般来说,我们可以通过配置GPO从启动菜单和桌面 上隐藏一个应用程序,但是不能禁止用户用其它手段访问它,Appsec增加了这种安全性,可以禁止用户执行应用 程序甚至是从命令行模式或者使用其他的应用程序。Microsoft的建议是和GPO一起使用,放在Terminal Server上运行或者说是在应用程序运行的机器上使用。Appsec对于应用程序的限制还算严格,除了应用程序的名称以外还要包括该应用程序的全路径,只有二者都附和才能够运行。
下面提几点注意:
a. 只有管理员或管理员组的成员可以运行所有程序,用户(包括PowerUser组)只能运行列表中的应用程序。
b. Appsec第一次启用时,Terminal Server的会话必须中断,否则Appsec将不能在本次会话中启用。
c. 实际上Appsec只能限制调用CreateProcess方法的应用程序,不能限制使用NTCreateProcess方法的程序,但是这种程序非常的少见。
d. Appsec只能限制32位的程序,但是在默认情况下,一旦启用appsec任何对16位程序的访问都是禁止的,但 是可以添加ntvdm.exe来使16位程序可以被访问。
e. 我想这个也是Appsec最大的缺点,Appsec并不对程序本身进行检查,也就是所如果将该有效程序进行替换 的话,Appsec不会发现。所以说我们必须禁止用户替换和重命名应用程序,这可以用Security Template来做。
f. 还有Appsec只可限制可执行文件,不可以是DLLs。
g. Appsec的使用是对于计算机的,也就是说一经启用使用本机的用户都要受到限制。
另外,应该要提到的一点是,按照Microsoft的要求,Appsec的列表中至少应该有:
\Wtsrv\explorer.exe
\Wtsrv\system32\cmd.exe
\Wtsrv\system32\net.exe
\Wtsrv\system32\regini.exe
\Wtsrv\system32\subst.exe
\Wtsrv\system32\systray.exe
\Wtsrv\system32\xcopy.exe
这么几项。
当然啦!你去掉也是可以的,但是会造成用户难以正常使用。嗯,以我个人的建议,如果你想防止Hacker入侵去掉net.exe会有意想不到的收获,呵呵!cmd.exe也是不错的选择,如果不想管理员以外的任何人访问就统统去掉就好,后果你们试试就知道了。
p.s. 这个程序所需要的文件Appsec.exe(这个倒是在),Appsec.hlp(这个也在),但是Appsec.dll,
psec.cnt,Instappsec.exe并没有包括在Resource Kit里面,要去网站上自己下载!!这简直是搞笑嘛!也
只有Microsoft干得出来。你可以在这个地方下载这个hotfix:
http://download.microsoft.com/download/win2000platform/Appsec/1.0/NT5/EN-US/appsec_hot
fix.exe,安装以后就可以用了。 启用以后,换个用户(不是管理员组)登陆本机随便点个应用程序,你就可以看到Access to specified device, path or file is denied的警告,很厉害的,哈哈!
2. Cachemov.exe (Offline Files Cache Mover)
Cachemov.exe一个有趣的东东,用来移动离线文件的缓存(默认保存在根卷下),如果你觉得那东西在那个地方碍的你事的话,把它挪个地方也没有什么问题。这个工具比较简单就不再多说什么了,就一个GUI,然后选择 一个卷,它就自动帮你做完了,很简单。你也可以使用无人值守模式 cachemov -unattend x:\ 电脑自己搞 定,此时需要(Cchmvmsg.dll)。所有的结果会保存至应用程序日志。 只是注意一下,运行时需要管理员的身份,还有就是不能够移动到网络驱动器和可移动驱动器上去。移动以后不要改letter,不然你会有麻烦的!
3. Defptr.exe (Default Printer)
如果你闲着没有事的话,可以用用这个东西。它允许你随意改变你的默认打印机,可以在可用的网络和本地打印机间交换,一旦运行以后会在右下角有个小图标(如果不想看到图标可以使用defptr -i), 这个东西可能对漫游用户会有一点好处吧!
4. Delprof.exe(User Profile Deletion Utility)
删除用户的Profile时用的工具,本来这个是可以在System Properties里面做的。而这个工具可以在本地或
是远程运行,看起来的好处就是可以指定多长时间不使用就删除,在处理比较多的用户的时候才显得出好处来,就那么个把的话,就自己做好了。稍微介绍一下语法好了。
delprof /q /i /p /c:\\computername /days /?
/q 后台悄悄执行,不用确认。
/i 忽略错误继续删除。
/p 在删除前提示确认。
/c:\\computername 这个不用解释了吧?
/days 指定多少天不使用的Profile就删除,days用整数。
/? 出现上面这些东东。
5. DelSrv.exe (Delete Service)
一个拿来删除服务用的工具,使用起来非常简单,只要delsrv servicename就可以了。没有什么好说的。
6. Dureg.exe (Registry Size Estimator)
这是一个用来评估你的注册表储存了多少数据的工具,可以从任何一个hive,subtree和subkey中读出。另外
,这个工具还可以用来搜索注册表中的text字符串,这种搜索还可以具体到某个subtree中。
这个工具主要用于得出注册表具体占用空间,对于开发人员和管理员来说都是一个非常有用的工具。虽然我们可以使用控制面板中的System选项和系统监视器中的Registry Quota in Use来监视注册表,但是如果你只想知道某个单独的Key或者是Subkey所占用的空间,上面这些工具就无能为力了。
语法:
dureg /cr /cu /u /lm /a /s│/d "registry_path" "string to search"
/a
表示查找整个注册表的大小。
dureg /a
Size of HKEY_CLASSES_ROOT : 7740324
Size of HKEY_USERS : 995732
Size of HKEY_LOCAL_MACHINE : 17265663
Total Registry data size: 26001719
/cr "registry_path"
默认情况下,返回的是HKEY_CLASSES_ROOT的大小。
/cu "registry_path"
默认情况下,返回的是HKEY_CURRENT_USER的大小。
/lm "registry_path"
默认情况下,返回的是HKEY_LOCAL_MACHINE的大小。
/u "registry_path"
默认情况下,返回的是HKEY_USERS的大小。
以上四个选项都可以在 "registry_path"中填入该Subkey下的任意key。比如:
dureg /lm "software\microsoft",查找HKEY_LOCAL_MACHINE\Software\Microsoft key的大小。
/s "string"
在注册表中搜索该字符串。比如:
dureg /s "run" 寻找和run相关的字符串。当然你也可以和/cr等这几个参数一起使用,比如:dureg /cr
/s "run"。
会看到一大串显示,这里就不写出来了。
7. Elogdmp.exe (Event Log Query Tool)
一个命令行工具用来导出选定的日志中的信息。这是在屏幕上进行显示,最好和Find或者是Findstr这样的工具
一起使用,不然太难找到了。
语法:
elogdmp -? computername eventlogtype
eventlogtype有Application, Security,System三种。
比如: elogdmp hello application
这个工具可以远程使用,但是需要域管理员组或者是本地管理员组的成员才可以使用。
8. Instsrv.exe (Service Installer)
嗯,Instsrv.exe一个命令行工具可以用来安装或者是删除可执行服务(.exe),当然也可以给它们分配名字的
语法:
instsrv Servicename pathtoexecuteable -a accountname -p accountpassword or Servicename remove
ServiceName
用来显示的名字,比如Alerter。
PathToExecuteable
要安装服务文件的全路径,包括盘符在内。
-a accountname
指定服务运行的帐户。
-p accountpassword
帐户的密码。
servicename remove
指定你想移出的服务。
比如:你想安装一个bbb.exe作为一个bbb的服务。
instsrv bbb "c:\program files\bbb.exe"
默认情况下,我们安装的服务是没有启动的,需要启动。而有些时候需要插入相应的注册表项。
如果想指定这个服务在某个用户下运行:
instsrv bbb "c:\program files\bbb.exe -a hello\bbb -p xxx"
that's OK!
如果要卸在的话: instsrv bbb Remove,注意删除之前要先Stop。
这里我们再提到一个工具Srvinstw.exe,这是一个GUI模式的工具,所以用起来非常的简单,照着提示一步步做就可以了。它和Instsrv.exe的区别是这个东东可以在远程计算机上安装服务。它们都需要administrator 的特权,请记住。
9. intfiltr.exe (Interrupt Filter)
这是一个在多CPU环境下用来调整CPU之间中断关系的工具,可以用来测试最优化的方案。我没有2个这种东西,这个程序就没有进行测试了!那个有的话,帮我试试,告诉我结果。我把它补全。
10. Inuse.exe (File-In-Use Replace Utility)
一个命令行工具可以用来替换被锁定的操作系统文件,比如一些重要的DLL文件。这些文件会在下一次启动的时候被替换,根据微软的说法,这种替换会在下一次启动的Autochk完成之后,创建Paging Files之前。基本上来说,这个一个调试用的工具。该程序需要管理员身份运行。
语法:
insuse -? source destinaion /y
source
你想用来替换的文件。可以使用完整的物理路径或者是UNC路径。
destination
你要替换的文件。
/y
表示确定。
如果你想用一个远程文件来替换一个本地存在的文件可以使用下面的方法。
inuse \\hello\winnt\abc.dll c:\winnt\abc.dll /y
11. Javareg.exe (Java/COM Registration Utility)
命令行工具可以用来注册Java classes,鄙人不懂Java这种高深的东西,连什么是classes都不知道,没有办
法了,这一块就只好%¥&………了,不好意思。有懂的人帮一下忙好了,呵呵!!
12. Netsvc.exe (Command-line Service Controller)
一个命令行工具,用来控制服务,和SC比较类似,但是在功能上要比后者少很多!用这个工具基本上可以进行远程启动,停止,暂停,继续服务或者查询一个服务的状态。基本上只要你是一个普通用户就可以执行这个命令, 当然如果要启动和停止的话,就需要相应的权限了。 当然和SC相比Netsvc有很大的局限性,所以在这里我多说一点和服务有关的东西。在Win2k虽然你可以对各种服务进行查询,但是并不是所有的服务都可以直接关闭,比如Workstation这个服务,但奇怪的是Workstation这个服务有些时候会莫名其妙的丢失,至今我还不知道原因,一旦丢失以后基本上就 需要重装了。我们继续话题,当一个用户有许多活动的连接存在的时候,你只可以查询或者是暂停该服务,而不能远程强迫服务停止。而如果有服务依靠别的服务才能运行的时候,我们也不能直接停止该服务。举一个简单的例子,Clipbook服务需要Network DDE服务才能运行,我们必须先停止CilpBook才能停止Network DDE。
这里还要提到另外一种状况,就是当你停止一个不可以停止的服务的时候Netsvc会报告Service is running ,而该服务不能停止的原因有很多种,但是Netsvc并不会报告给你,太惨了!!此外,当一个服务不能被暂停的时候,这个鬼东西仍然会报告给你说Service is running,唉!所以说最好使用SC。
语法:
netsvc command servicename \\computername /?│/help
command可以是以下几个命令:
/list
列出已经安装的服务,这个时候不使用servicename。
/query
查询一个服务的状态。
/start, /stop, /stop, /continue
这几个命令就不用解释了吧?字面意义都已经很清楚了。
最后举两个例子吧!如:
netsvc /list \\hello
netsvc /query \\hello "Alerter"
netsvc Alerter \\hello /pause
更进一步具体的内容可以在SC那里看到,这里不再多说。
13. Now.exe
Reskit里面比较无聊的命令之一,可以在STDOUT(Standard output)上输出一个带时间戳的东东。有点像
ECHO命令。举例说明算了:
当我们打入ECHO bbb的时候,屏幕会显示bbb
C:\>echo bbb
bbb
但是当我们用Now bbb的时候,会输出:
C:\>now bbb
Sat Feb 16 22:31:34 2002 -- bbb
这种东西,不知道有什么用,呵呵!
14. Pathman.exe
一个命令行工具可以修改系统路径和用户路径,当然这个工具还可以用来检查路径中的错误,有多余的头部分号,尾部分号,多个连接得分号,重复的添加和删除,增加重复的路径或是移出一个不存在的路径等等,但是不检查路径的有效性。 2K保留了两套路径,一个是统一的全局系统路径,另一组是每个用户个别的用户路径,当然为了保证兼容性,2000仍然保留了从Autoexec.bat装入路径。每个用户可以修改自己的用户路径,而只有管理员可以修改系统路径,为了方便操作,微软就搞出了这个Pathman。
语法:
pathman /as /au /rs /ru path
/as
增加分号隔开的系统路径。
/au
增加分号隔开的用户路径。
/rs
删除分号隔开的系统路径。
/ru
删除分号隔开的用户路径。
当修改完成以后,Pathman会广播信息给所有的顶端窗口提醒它们环境被改变了,这将会导致应用程序升级它们的环境,获得经修改的路径。
举例说明:
添加c:\temp;C:\users\name;d:\utils为用户路径,当然,只是在它们不存在的时侯才添加。这个结果你可
以在System properties的Environment Variable中看到。上面一栏是user的变量,下面是系统变量。
实际上这个工具也有个好处就是添加和删除可以同时操作,你可以:
pathman /au C:\users\name /ru c:\users\name 呵呵!不过没有什么意思!
15. Ptree.exe(Process Tree)
该程序可以允许你在本地或者是远程查询进程树,同样也可以Kill它们。2000默认情况下,允许Local
Administrators, Power Users, Users查询这些树,但是只有Local Administrators和Power Users可
以Kill进程。
就这个工具而言,它有这么几部分组成ptreedrv.sys(kernel-mode驱动程序),ptreesvc.exe和
ptreesvcps.dll(2000的服务的程序,就是所ptree是需要在该计算机上安装一个服务),
Ptreesvr.dll(COM+服务端),ptree.exe(控制台客户端),Ptreeg.exe(GUI客户端,推荐使用这个,在
DOS底下看到的东西太少,也不好看,还是GUI爽!而且还可以同时管理多台计算,不错吧!我是挺喜欢的,比Ctrl+Alt+Del出来的那个东西要好得多!)
这个程序并没有和Reskit一起安装,而实在Reskit的目录下生成一个名为Ptree的目录,底下有个ptree.msi
,要点击安装。同时由于这是一个基于COM+的程序,而安装ptreeCOM的时侯,需要MSDTC服务,注意不要把它关了,不然会导致ptree不能正常运行,而且只会提示不能找到服务,后来是查了错误日志才发现的,微软坑人 !。我就因为这个弄了好一阵子,呵呵! 使用嘛,很简单,GUI就不用说了,都有提示,说一下命令行模式吧!
ptree -c computer -k│-kt process -?│/?
-c computer
当要管理的是远程主机的时侯才需要用的这个参数,如果是本机就不要啦,直接ptree就可以了。
-k process
干掉后面指定的进程。
这里的process可以是进程的名字也可以是PID。
-kt process
可以干掉整整一棵树。
举例: ptree -c hello 然后出来一大串东西,自己看吧!
16. pulist.exe
命令行工具,和上面那个东西有点类似,和Tlist也有一点像(这东西在Support Tools里面)但是
pulist.exe多一点点好处,可以显示出进程和用户之间的关系。比如:
C:\>pulist
Process PID User
Idle 0
System 8
smss.exe 156 NT AUTHORITY\SYSTEM
csrss.exe 176 NT AUTHORITY\SYSTEM
winlogon.exe 172 NT AUTHORITY\SYSTEM
services.exe 228 NT AUTHORITY\SYSTEM
lsass.exe 240 NT AUTHORITY\SYSTEM
svchost.exe 428 NT AUTHORITY\SYSTEM
spoolsv.exe 452 NT AUTHORITY\SYSTEM
msdtc.exe 480 NT AUTHORITY\SYSTEM
tcpsvcs.exe 604 NT AUTHORITY\SYSTEM
svchost.exe 620 NT AUTHORITY\SYSTEM
llssrv.exe 644 NT AUTHORITY\SYSTEM
nspmon.exe 712 USER1-COMPUTER1\NetShowServices
nscm.exe 724 USER1-COMPUTER1\NetShowServices
当你的计算机有多个处理器时,需要判断安全上下关系的时侯这个工具的用处就体现出来了!如果是远程操作的 时候就多加一个pulist \\server就可以了。而且可以顺序显示多个站点pulist \\server \\server………,
但是这个时侯会不显示User。
当你需要专门查找一个已知的进程的时候,可以用这样的方法来简化查找:
pulist │ find "string"
比如,过去老的pwdump2需要知道LSASS的PID,我们可以这样做:
c:\>pulist │ find "LSASS"
LSASS.EXE 252 NT AUTHORITY\SYSTEM
然后使用252来运行pwdump2………
17. Reducer.exe (Reduce Trace Data)
这个东西是一个命令行的事件追踪工具,可以用来处理Tracelog(后面会提到这个工具)产生的记录,形成每个线程,每个进程的工作量记录。
实际上呢,Reducer就是一个用来进一步分析工具,比如TraceDump(后面提到)可以允许你对一个追踪日志进行摘要,而Reducer则允许你进行拆分获得更多的细节,诸如:
事务统计表:响应时间,每秒的事务数,每个事务的磁盘读写,每个事务的网络流量,CPU的使用(包括核心和用户空间)。
映象统计表:事务有关的每个进程,每个进程相关的线程,每个进程的CPU使用(包括kernel和user),每个进程的磁盘读写,每个进程的网络流量。
磁盘信息:总的磁盘读写,每个进程的磁盘读写。
OK,接下来介绍一下语法。
语法非常简单:
reducer -out filename -h│-help│-?
-out filename
输出的文件的名字,默认是Workload.txt
举例:这里我已经事先使用Tracelog生成了一个logfile.etl,然后,
reducer -out my_workload.txt c:\logfile.etl就行了。
--------------------------------------------------
----------------------------------------------+
│ WINDOWS 2000 Capacity Planning Trace
│
│ Version : 2128
│
│ Type : Default
│
+-------------------------------------------------------------------------------------
----------------------------------------------+
│
│
│ Build : 2195
│
│ Processors: 1
│
│ Start Time: 17 Feb 2002 23:14:17.430
│______________________________________________________________________│ │
│ End Time : 17 Feb 2002 23:14:38.550
│
│ Duration : 21 Sec
│
│
│
│ Trace Name: NT Kernel Logger
│
│ File Name : C:\LogFile.Etl
│
│ Start Time: 17 Feb 2002 23:14:17.430
│______________________________________________________________________│ │
│ End Time : 17 Feb 2002 23:14:38.550
│
│ Duration : 21 Sec
│
│
│
+-------------------------------------------------------------------------------------
----------------------------------------------+
+-------------------------------------------------------------------------------------
----------------------------------------------+
│ Transaction Statistics
│
+-------------------------------------------------------------------------------------
----------------------------------------------+
│ Transaction Sort Trans Response Transaction Disk/Trans
Tcp/Trans │
│ Key Time(ms) Rate/sec Reads
Writes Sends Recieves │
+-------------------------------------------------------------------------------------
----------------------------------------------+
+-------------------------------------------------------------------------------------
----------------------------------------------+
~
样式大概会是这样的。
18. Regback.exe (Registry Backup)
一个注册表备份用工具,允许你在系统运行期间对注册表进行备份。我想当你需要测试一个软件时,最好先备份一下注册表。在使用这个程序时,至少需要备份文件和文件夹的权限。Regback.exe在运行的时侯需要调用Replacekey函数。
语法:
regback destination_dir filename hivetype hivename more│/?
destination_dir
备份文件的位置
filename
要创立的文件
hivetype
machine或者是users
hivename
HKLM或者HKLU
这里提几点注意:
Regback可以备份整个注册表hive(你可以理解为一个file,比如HKEY_USERS\Default在硬盘上实际上就是%SYSTEMROOT%\SYSTEM32\CONFIG\DEFAULT\DEFAULT.LOG)还包括了ACLs(Access control lists),所以你也可以用这个东东发现和以前不同的ACLs。 Regback不能自动备份Config文件夹以外的文件,你要手动进行,这是为了避免名字冲突。如果当前注册表并没有打开的hive需要自己用Xcopy.exe或者是Scopy.exe拷贝。另外,没有装入的Hive也要自己弄。如果出错的话,Regback会在第一次的时候就停止工作。它也不能覆盖存在的文件,会报错。还有如果空间不合适的话,备份就不能进行,所以最好先备份到硬盘上,然后再拷贝到磁盘上保存。
举两个例子吧!
备份全部活动的Hives
C:\>regback c:\backup
saving SECURITY to c:\backup\SECURITY
saving SOFTWARE to c:\backup\software
saving SYSTEM to c:\backup\system
saving .DEFAULT to c:\backup\default
saving SAM to c:\backup\SAM
***Hive = '\REGISTRY\USER'\'S-1-5-21-1177238915-1383384898-1957994488-500'
Stored in file '\Device\HarddiskVolume1\Documents and Settings\Administrator'\'N
TUSER.DAT'
Must be backed up manually
regback users S-1-5-21-1177238915-1383384898-1957994488-50
0
***Hive = '\REGISTRY\USER'\'S-1-5-21-1177238915-1383384898-1957994488-500_Classe
s'
Stored in file '\Device\HarddiskVolume1\Documents and Settings\Administrator\Loc
al Settings\Application Data\Microsoft\Windows'\'UsrClass.dat'
Must be backed up manually
regback users S-1-5-21-1177238915-1383384898-1957994488-50
0_Classes
你看,连SAM都可以备份,对于破解SAM,也是有非常大的用处的。
下面是备份指定的User的Profile
C:\>regback c:\backup\administrator.bku users s-1-5-21-1177238915-1383384898-195
7994488-500
saving s-1-5-21-1177238915-1383384898-1957994488-500 to c:\backup\administrator.
bku
这里用的是SID比较特别,只是用起来太麻烦了,输那么多数字,呵呵!
最后是做一个网络备份,也是一个批量脚本。
注意使用Schedule服务一起搭配。前面提到过regback不能覆盖文件,一旦有重名的文件将会导致错误的发生 。
echo on
rem ... Name: doback.bat
rem ... Purpose: Network backup for Registry files
rem ... Process: Connect to backup share, delete old backup files, copy over new
backup files
rem ... Before using this batch file, create a share containing the following
directories: backup, config. Set permissions on this share so that appropriate users
can run this script.
net use \\myshare\backup
rem --> delete old backups; regback will not copy over an existing file
echo y│del
24. Sc.exe (Service Controller Tool)
干好一年以前就写过这个东西介绍了。大家再看一遍吧!
我们知道在MStools SDK,也就是在Resource Kit有一个很少有人知道的命令行软件,SC.exe,这个软件向所有的Windows NT和Windows 2000要求控制他们的API函数。我们可以在命令行里通过对这些函数设定参数的方式来设定他们(API)。SC.exe也可以显示服务的状态,同时也可以从状态结构区域里重新找到存储在里面的数值。它还可以列出远程计算机的服务函数或者是服务状况结构。SC.exe这个开发工具至少可以比服务控制面板程序和网络命令行界面(net.exe,这个东西可以告诉你一个服务是
在运行中,还是停止,还是暂停。)这两个东西提供更多的细节和准确的信息。虽然上述两个东西在正常工作的情况下,对于完整的调试是非常好用的,但是如果有新的服务,或者新的代码被开发出来的时候,这两个工具提供的信息可能造成误导。这也就是我们需要用到SC的原因。
下面举列说明,如果在开发阶段,你的服务在挂住在一个start-pending的时候,控制面板和net.exe同样报告服务是在运行的。但它挂在一个stop-pending的时候,net.exe报告它运行,而控制面板着报告它停止,如果你试着 启动它,这是控制面板则会告诉你这个服务正在运行。难道这不是很困惑吗?呵呵!
SC.exe可以让你询问服务的状况和取出存储在状态结构区域内的数值,控制面板和net.exe不提供服务完整的状况 。但是无论如何,SC程序可以告诉你这个服务准确的情形,同样也可以给你看最后的checkpoint数和等待提示。
这个checkpoint,我叫它检查点(我觉得他就像一个程序调试时置的断点),所以我们也可以把看作为一个调试工具,因为它可以提供一个关于在程序停止时还要沿着初始化继续前进多久准确报告。
SC.exe也可以允许你调用很多的服务控制API函数,可以让你从命令行里改变大量的参数。这位服务开发者们提供了很多的优势。例如,它提供了一个方便的方式来创建或者在注册表和服务控制管理数据库中配置服务信息。开发者们不需要在手动的在注册表里单独的设置键值来配置服务,也不用重起机器来强迫服务控制管理数据库升级 。
作为一个命令很工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用SC.exe来控制服务。这个很有用,如果你想看看你的服务不断的启动和停止,我没有试过哦!让一个服务一下子
打开,一下子关闭,听上去很不错的。如果你的服务进程里面有多个进程的话,你可以保持一个进程继续运行不让它走开,然后让另一个不断的打开在关闭,还可以寻找一下内存缺乏导致不完全清楚的证据。
下面介绍SC,SC QC,and SC QUERY
SC使用这样的语法:
1. SC [Servername] command Servicename [Optionname= Optionvalue]
2. SC [command]
这里使用第一种语法使用SC,使用第二种语法显示帮助。
下面介绍各种参数。
Servername
可选择:可以使用双斜线,如\\myserver,也可以是\\192.168.0.1来操作远程计算机。如果在本地计算机上
操作
就不用添加任何参数。
Command
下面列出SC可以使用的命令。
config 改变一个服务的配置。(长久的)
continue 对一个服务送出一个继续控制的要求。
control 对一个服务送出一个控制。
create 创建一个服务。(增加到注册表中)
delete 删除一个服务。(从注册表中删除)
EnumDepend 列举服务的从属关系。
GetDisplayName 获得一个服务的显示名称。
GetKeyName 获得一个服务的服务键名。
interrogate 对一个服务送出一个询问控制要求。
pause 对一个服务送出一个暂停控制要求。
qc 询问一个服务的配置。
query 询问一个服务的状态,也可以列举服务的状态类型。
start 启动一个服务。
stop 对一个服务送出一个停止的要求。
Servicename
在注册表中为service key制定的名称。注意这个名称是不同于显示名称的(这个名称可以用net start和服务控制面板看到),而SC是使用服务键名来鉴别服务的。
Optionname
这个optionname和optionvalue参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等号之间是没有空格的。一开始我不知道,结果………………,比如,start= optionvalue,这个很重要。
optionvalue可以是0,1,或者是更多的操作参数名称和数值对。
如果你想要看每个命令的可以用的optionvalue,你可以使用sc command这样的格式。这会为你提供详细的帮助。
Optionvalue
为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用sc command来询问每个命令。
Comments
很多的命令需要管理员权限,所以我想说,在你操作这些东西的时候最好是管理员。呵呵!
当你键入SC而不带任何参数时,SC.exe会显示帮助信息和可用的命令。当你键入SC紧跟着命令名称时,你可以得到一个有关这个命令的详细列表。比如,键入sc create可以得到和create有关的列表。
但是除了一个命令,sc query,这会导出该系统中当前正在运行的所有服务和驱动程序的状态。
当你使用start命令时,你可以传递一些参数(arguments)给服务的主函数,但是不是给服务进程的主函数。
SC create
这个命令可以在注册表和服务控制管理数据库建立一个入口。
语法1
sc [servername] create Servicename [Optionname= Optionvalue]
这里的servername,servicename,optionname,optionvalue和上面的一样,这里就不多说了。这里我们
详细说明一下optionname和optionvalue。
Optionname Optionvalue
描述type= own, share, interact, kernel, filesys
关于建立服务的类型,选项值包括驱动程序使用的类型,默认是share。
start= boot, system, auto, demand, disabled
关于启动服务的类型,选项值包括驱动程序使用的类型,默认是demand(手动)。
error= normal, severe, critical, ignore
当服务在导入失败错误的严重性,默认是normal。
binPath= (string)
服务二进制文件的路径名,这里没有默认值,这个字符串是必须设置的。
group= (string)
这个服务属于的组,这个组的列表保存在注册表中的ServiceGroupOrder下。默认是nothing。
tag= (string)
如果这个字符串被设置为yes,sc可以从CreateService call中得到一个tagId。然而,SC并不显示这个标签,所以使用这个没有多少意义。默认是nothing
depend= (space separated string)有空格的字符串。
在这个服务启动前必须启动的服务的名称或者是组。
obj= (string)
账号运行使用的名称,也可以说是登陆身份。默认是localsystem
Displayname= (string)
一个为在用户界面程序中鉴别各个服务使用的字符串。
password= (string)
一个密码,如果一个不同于localsystem的账号使用时需要使用这个。
Optionvalue
Optionname参数名称的数值列表。参考optionname。当我们输入一个字符串时,如果输入一个空的引用这意味着一个空的字符串将被导入。
Comments
The SC CREATE command performs the operations of the CreateService API function.
这个sc create命令执行CreateService API函数的操作。详细请见CreateService。
例1
下面这个例子在一台叫做(\\myserver)的计算机上为一个叫“NewService”的服务建立的一个注册表登记。
sc \\myserver create NewService binpath= c:\winnt\system32\NewServ.exe
按照默认,这个服务会建立一个WIN32_SHARE_PROCESS使用SERVICE_DEMAND_START启动方式。这将不会有任何从属关系,也将会按照localsystem安全上下关系来运行。
例2
下面这个例子将在本地计算机上,建立一个服务,它将会是一个自动运行服务,并且运行在他自己的进程上。它从属于TDI组和NetBios服务上。注意,你必须在从属中间增加一个空格的引用。
sc create NewService binpath= c:\winnt\system32\NewServ.exe type= own
start= auto depend= "+TDI Netbios"
例3
服务开发者可以通过临时改变二进制路径(影像路径)的方式来将这个服务运行在内核调试器的上下关系中。下面这个例子就可以让我们看到如何改变服务的配置。
sc config NewService binpath= "ntsd -d c:\winnt\system32\Newserv.exe"
这个例子会引起服务控制管理器调用ntsd.exe使用下例的参数字符串:
"-d c:\nt\system32\NewServ.exe"
当系统装入newserv.exe时ntsd将会转而打断调试器,所以断点可以被设置在服务代码里。
SC QC
这个SC QC“询问配置”命令可以列出一个服务的配置信息和QUERY_SERVICE_CONFIG结构。
语法1
sc [Servername] qc Servicename [Buffersize]
Parameters
servername和servicename前面已经介绍过了,这里不再多说。
Buffersize,可选择的,列出缓冲区的尺寸。
Comments
SC QC命令显示了QUERY_SERVICE_CONFIG结构的内容。
以下是QUERY_SERVICE_CONFIG相应的区域。
TYPE dwServiceType
START_TYPE dwStartType
ERROR_CONTROL dwErrorControl
BINARY_PATH_NAME lpBinaryPathName
LOAD_ORDER_GROUP lpLoadOrderGroup
TAG dwTagId
DISPLAY_NAME lpDisplayName
DEPENDENCIES lpDependencies
SERVICE_START_NAME lpServiceStartName
例1
下面这个例子询问了在上面例子中建立的“NewService”服务的配置:
sc \\myserver qc NewService
sc显示下面的信息:
SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : c:\winnt\system32\NewServ.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : NewService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
NewService有能力和其他的服务共享一个进程。但是它不是自动启动的。二进制文件名是NewServ.exe。这个服务不依靠与其它的的服务,而且运行在lcoalsystem的安全上下关系中。这些都是调用QueryServiceStatus基本的返回,如果还需要更多的细节届时,可以看看API函数文件。
SC QUERY
SC QUERY命令可以获得服务的信息。
语法:
sc [Servername] query { Servicename │ Optionname= Optionvalue... }
参数:
servername, servicename, optionname, optionvalue不在解释。只谈一下这个命令提供的数值。
Optionname Optionvalue
Description
type= driver, service, all
列举服务的类型,默认是service
state= active, inactive, all
列举服务的状态,默认是active
bufsize= (numeric value)
列举缓冲区的尺寸,默认是1024 bytes
ri= (numeric value)
但开始列举时,恢复指针的数字,默认是0
Optionvalue
同上。
Comments
SC QUERY命令可以显示SERVICE_STATUS结构的内容。
下面是SERVICE_STATUS结构相应的信息:
TYPE dwServiceType
STATE dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE dwWin32ExitCode
SERVICE_EXIT_CODE dwServiceSpecificExitCode
CHECKPOINT dwCheckPoint
WAIT_HINT dwWaitHint
在启动计算机后,使用SC QUERY命令会告诉你是否,或者不是一个启动服务的尝试。如果这个服务成功启动,WIN32_EXIT_CODE区间会将会包含一个0,当尝试不成功时,当它意识到这个服务不能够启动时,这个区间也会提供一个退出码给服务。
例子
查询“NewService"服务状态,键入:
sc query NewService
显示一下信息:
SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
注意,这里存在一个给这个服务的退出码,即使这个服务部不在运行,键入net helpmsg 1077,将会得到对
1077错误信息的说明: 上次启动之后,仍未尝试引导服务。所以,这里我想说一句,希望大家可以活用net helpmsg,这会对你的学习有很大的帮助。
下面在对SC query的命令在说明一下:
列举活动服务和驱动程序状态,使用以下命令:
sc query
显示messenger服务,使用以下命令:
sc query messenger
只列举活动的驱动程序,使用以下命令:
sc query type= driver
列举Win32服务,使用以下命令:
sc query type= service
列举所有的服务和驱动程序,使用以下命令:
sc query state= all
用50 byte的缓冲区来进行列举,使用以下命令:
sc query bufsize= 50
在恢复列举时使用index=14,使用以下命令:
sc query ri=14
列举所有的交互式服务,使用以下命令:
sc query type= service type= interact
好了,说到这里。SC命令基本上已经说完了。希望大家好好看看,呵呵!相信会有帮助的!!
25. Scanreg.exe
又是个注册表工具,有没有人烦了?我都快烦了,呵呵!
一个注册表检查工具,基本上就是一个"registry GREP"。支持搜索本地或远程的Win一家老小的注册表中的任意东西。
scanreg -s string -k -v -d -r key -c -e -n
-s
要搜索的字符串
-r
开始搜索的root,默认是HKEY_CURRENT_USER
也可以使用以下的格式:
HKEY_LOCAL_MACHINE === lm
HKEY_CURRENT_USER === cu
HKEY_CLASSES_ROOT === cr
HKEY_USERS === us
-k
查询键。
-v 注意必须指定-k -v -d中的至少一个。
查询值。
-d
当然是查询数据。
-c (默认是不敏感)
大小写敏感。
-e (默认是返回所有合适的)
只返回却确合适的。
-n
输出的时候不使用颜色(默认是key红,values绿,data黄)真不知道微软的怎么想的!!看上去怪怪的,还有就是匹配的字符串都高亮标出。
最后来两个例子:
scanreg -s version -k -v -d
scanreg -s version -kvd <--居然这种独可以?
scanreg /s version /r \lm\software /kvde 没有关系,这种都是可以的,呵呵!
scanreg version \\hello\HKEY_LOCAL_MACHINE -d 操作远程的东东。
26. sclist.exe
可以列出当前运行或者是停止的服务。看看远程的机器也是功能之一,但是比起SC来说,还是太简单了!
sclist -r -s MachineName -?
-r
只显示正在运行的服务。
-s
只显示已经停止的服务。
Machinename
本地可以不指出。
这个简单大家自己做做,这里不举例了!! ,不要讲我偷懒哦!
27. Setx.exe
这个命令行工具提供了一种批量修改环境变量的方法,同时不需要使用任何编程方法或者是脚本。此外,除了可以获得变量和值之外还可以跟注册表的值挂上关系。在2000中除了setx.exe之外,其他没有任何一种命令行工具可以直接设置系统变量值。只有通过控制面板和注册表编辑器才能够设置。如果有人说可以用set命令的话, 实际上这个CMD的内部命令只能够设置当前控制台窗口的用户环境变量。 setx允许你通过Command Line Mode,Registry Mode,File Mode,这三种模式来设置环境变量。
a. Command-Line
setx variable value -m
variable
要设置的环境变量的名字。
value
要设置的值。
-m
设置计算机环境,默认设置是用户环境。
b. Registry Mode
setx variable -k hive\key\……\value -m
variable
要设置的环境变量的名字。
-k
指定变量设置会基于注册表中的信息。
hive\key\……\value
注册表路径,如:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\StandardName
-m
同命令行模式。
c. File Mode
setx variable -f filename -a x,y │ -r x,y "string" -d d -x -m
-f filename
指定使用的文件名。
-a x,y
指定要搜索的绝对坐标或者是偏移量。
-r x,y "string"
指定从"string"的相对坐标或者是偏移。
-d d
指定附加的分隔符,后一个d表示,可以是",", "\"等等。系统有四个内建的分隔符是:space, tab,
carriage return, linefeed。附加的可以是任意的ASCII字符。
-x
显示文件坐标,这个时候-a, -r, -d会变忽略。
-m
在同上。
setx将变量写入到在注册表的主环境中去。用setx设置的变量将会在下一次启动的时候生效,这是2000的局限。当访问REG_MULTI_SZ时,只能访问到第一个项目。
目前setx只可以支持HKCU和HKLM两个hives。用Setx增加的值不可以用setx去掉,可以在控制面板里面改,也可以在注册表里面改,这种时候也可以用set把它置空。
但是还是来几个例子吧!
a.Command Line
Setx MACHINE COMPAQ
在用户环境中设置MICHINE为COMPAQ。
setx MYPATH %PATH%
设置MYPATH的值为当前PATH变量的值。
setx MYPATH ~PATH~
设置MYPATH总是和PATH环境的值保持一致。
b. Registry
Setx TZONE -k
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\StandardName
设置TZONE的值为上面的键。比如:"Central Standard Time"
Setx BUILD -k "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\CurrentBuildNumber"
设置BUILD的值为当前的Windows NT版本号,如:1314。
c. File
在进行这部分之前先运行ipconfig > ipconfig.out,弄一个ipconfig的文本出来。然后就可以进行操作了
Setx var -f ipconfig.out -x
这个命令会显示这个文件的内容的坐标。如:
C:\>SETX VAR -f ipconfig.out -x
(1,0 Windows) (1,1 2000) (1,2 IP) (1,3 Configuration)
(3,0 Ethernet) (3,1 adapter) (3,2 Local) (3,3 Area) (3,4 Connection
(5,0 Connection-specific) (5,1 DNS) (5,2 Suffix) (5,3 .) (5,4
(6,0 IP) (6,1 Address.) (6,2 .) (6,3 .) (6,4 .) (6,5 .) (6,6 .) (6,7 .) (6,8 .)
(6,9 .) (6,10 .) (6,11 .) (6,12 .) (6,13 (6,14 192.168.1.1)
(7,0 Subnet) (7,1 Mask) (7,2 .) (7,3 .) (7,4 .) (7,5 .) (7,6 .) (7,7 .) (7,8 .)
(7,9 .) (7,10 .) (7,11 .) (7,12 .) (7,13 (7,14 255.255.255.0)
(8,0 Default) (8,1 Gateway) (8,2 .) (8,3 .) (8,4 .) (8,5 .) (8,6 .) (8,7 .) (8,8
.) (8,9 .) (8,10 .) (8,11
setx ipaddr -f ipconfig.out -a 5,11
这个命令会寻找绝对偏移为(5,11)的内容,然后设置ipaddr为这个值。如:
C:\>setx ipaddr -f ipconfig.out -a 6,14
Extracted value is: 192.168.1.1
Setx ipgateway -f ipconfig.out -r 0,11 "Gateway"
查找Gateway这个字符串偏移0,11的东东,然后写到ipgateway里面去。
C:\>Setx ipgateway -f ipconfig.out -r 0,11 "Gateway"
Extracted value is: 192.168.1.244
以上所有的修改都会在重起以后看到,可以用set或者是控制面板中的System properties看。
28. showpriv.exe (show Privilege)
一个用来显示用户或者是组分配的特权的命令行工具,如果要看domain的相关的东西的话,要在DC上使用。使用起来很简单,showpriv privilege就行了,如:
C:\>showpriv sesecurityprivilege
1 account(s) with the sesecurityprivilege user right:
BUILTIN\Administrators
All accounts enumerated
这里主要讲一下这个2000的一些privilege。
Privilege,为本地管理员提供了一种手段,可以控制允许什么人具有什么权限或者能执行什么样的系统操作,
如允许交互式登陆等等。这里我们说的特权是指特殊操作所需的权限,如备份呀什么的!一旦授予了某种特权,这些特权就会包括在用户的安全访问令牌中。这是一些基本的概念,可以看以下,比较容易明白。
系统为了管理的方便总是为每个本地组分配了相应的特权,而且从来不改变这个特权,这些东东在NT系统上可以分为内置能力,标准用户权力,高级用户权力这么几种,但是在2000中标准权利和高级权力已经被用户特权所取代,只有在为委派而信任计算机和用户帐户(SeEnableDelegationPrivilege)和把计算机从dock中移出(SeUndockPrivilege)这两种情况下可以把NT的权利映射到2000中的特权。注意一下2000的一些问题。并非所有能力都有匹配的权利,因此,不可能用权力完全匹配组的内置能力。而由于特定组能力的预定义分配和不能把所有能力复制为权力,就难以区分任务,并且只能强制使用最低特权的概念。
那么在域一级下就缺少一个安全结构,导致了难以授予管理的功能。2000在AD引入后,就允许区分任务,也可授予domain和OU相应的管理层次。
下面来谈一下具体的一些用户特权,应当有26个,也有说28个的。
SeTcbPrivilege
成为OS的一部分允许进程可以像用户一样被鉴别,因此可以像用户一样访问相应的资源。只有底层的鉴别服务需要这样的特权,所以无论是工作站,独立服务器,还是DC都没有把这个设为某人权利。
SeMachineAccountPrivilege
添加工作站到域 为了这个特权可以启用,必须保证这个用户在域控制器本地安全策略中的才行。
SeBackupPrivilege
备份文件和目录。
允许用户绕过文件和目录的权限来做备份。只有当应用程序尝试访问NTFS备份API时才检查这个特权。默认情况下,这个特权分配给Administrators和Backup Operators。
SeChangeNotifyPrivilege
回避遍历检查。
允许用户来回移动目录,但是不能列出文件夹的内容。默认情况下,这种特权被赋予Administrators,
Backup Operators, Power Users, Users ,and Everyone,换句话说就是所有人都有这种权利。
SeSystemTimePrivilege
改变系统时间。
默认情况下Administrators和Power Users有这种权利。
SeCreatePagefilePrivilege
创建分页文件。
允许用户创建和改变一个分页文件的大小。默认情况下,只有Administrators有这个特权。
SeCreateTokenPrivilege
创建令牌对象。
允许进程调用NtCreateToken()或者是其他的Token-Creating APIs创建一个访问令牌。
SeCreatePermanentPrivilege
创建永久共享对象。
允许进程在2000项目管理器中创建一个目录对象。
SeDebugPrivilege
调试程序。
允许用户连接一个Debugger来调试任何进程。默认情况下Administrators有该特权。
SeEnableDelegationPrivilege
为委派而信任计算机和用户帐户。
允许用户为了委派而改变信任,只有当用户或者是计算机对该对象的帐户控制标志有写权限的时候可以。
SeRemoteShutdownPrivilege
远程关闭系统。
Administrators在默认情况下有此特权。
SeAuditPrivilege
产生安全审核。
允许一个应用程序在安全日志中,创建,产生,增加一条记录。
SeIncreaseQuotaPrivilege
增加限额。
允许一个有写属性的进程利用其他进程从而取得更多的处理器限额,这种特权有利于系统调试,但是也有导致DOS的可能。
SeIncreaseBaseProrityPrivilege
增加调度优先级。允许一个有写属性的进程利用其它进程来获得更多的执行优先权。有这种特权的用户可以在Task管理器中改变一 个进程的调度优先权。默认情况Administrators有该特权。
SeLoadDriverPrivilege
安装和卸载设备驱动程序。
允许用户安装和卸载即插即用设备的驱动程序,不是即插即用的不受这个特权影响,但是只能被
Administrators所安装。因为驱动程序是作为被信任的程序来运行的,这需要很高的特权。而这种特权可能会被用于安装恶意程序,和破坏性的访问。默认情况下Administrators有该特权。
SeSecurityPrivilege
管理审计和安全日志。
允许用户指定对象访问的审计。有这种特权的用户也可以清空安全日志。默认情况下Administrators有该特权。
SeSystemEnvironmentPrivilege
修改firmware环境变量。
允许用户使用进程通过一个API来设置系统环境变量,另外,也可以让用户使用System Properties来做到以上这一步。默认情况下Administrators有该特权。
SeProfileSingleProcessPrivilege
Profile单一进程。
允许用户使用性能监视器来监视nonsystem进程。默认情况下Administrators有此特权。
SeSystemProfilePrivilege
Profile系统性能。
允许用户使用性能监视器来监视system进程。默认情况下Administrators有此特权。
SeUndockPrivilege
将计算机中dock中删除。
允许用户使用Eject PC从坞中将计算机移出,默认情况下Administrators, Power Users, Users均有此特
权。
SeAssignPrimaryTokenPrivilege
替换一个进程级令牌。
允许一个父进程替换相关的子进程的访问令牌。
SeRestorePrivilege
恢复文件和目录。
允许用户绕过文件及目录权限来恢复备份文件。默认情况下Administrators和Backup Operators有此特权。
SeShutdownPrivilege
关闭系统。
允许用户关闭本地计算机。默认情况下Administrators, Backup Operators, Power Users, Users都有
该特权,但是在2000 Server中Users没有此特权。
SeSynchAgentPrivilege
同步目录服务数据。
允许一个进程提供目录同步服务,这个特权只有在DC上。默认情况下域的Administrators和LocalSystem帐户
有此特权。
SeTakeOwnershipPrivilege
取得文件所有者身份。
允许用户取得在系统中任何可得到的对象的所有者身份,包括:AD对象,文件,文件夹,打印机,注册表键,进
程和线程。默认情况下Administrator有此特权。
以上就是2000的用户特权了,是不是很多呢?呵呵!
29. Sleep.exe (Batch File Wait)
Sleep可以让计算机等待一段指定的时间。这个东东对于使用Batch文件会非常有用,在某些情况下也可能会让AT命令的使用更加方便。
Sleep time
time
要暂停的时间,秒为单位。
sleep 20
在运行下一个程序之前等待20s。
假设我们搞这么一个登陆脚本到计算机上,我想是个不错的主意。
@echo off
echo 2/23/2002
echo.
echo 不要忘了明天女朋友生日哦!!呵呵!
sleep 60
30. Soon.exe (Near-Future Command Scheduler)
soon这个命令可以让一个程序在很短的时间里面启动,比如几秒钟之内。基本上soon就是一个AT的装配命令,可以简单的装配一组合适AT命令来远程或者是本地启动一个程序。当然soon使用起来要比AT简单的多,自然功能也要少一些了。当然soon可以让一个命令在小于一天的时间内重复启动,这一点还是很有用的。下面介绍一下
如何使用。
soon有两种命令,一是普通的操作命令,还有就是配置命令。
1. Scheduling Command
soon \\computername delay /interactive "command"
\\computername
指定你要的计算机,远程使用时要net use。
delay
指定从现在开始到启动程序的间隔,以秒为单位,默认情况下是本地5s,远程15s。
/interactive
这个和AT命令里面的interactive是一样的。基本上可以看作是如果你打开一个cmd窗口,它会在桌面上跳出来。默认是off的。只有当Schedule服务以LocalSystem身份启动时才可以Interactive。
command
你想要执行的命令,这里用双引号来维持命令解释时候的空格。
2. Configuration Command
soon /d /l:n /r:n /i: on│off
/d
用这个开关来修改默认配置
/l:n
指定LocalDelay的值。
/r:n
指定RemoteDelay的值。 注意,这些值都是正整数,而且以秒为单位。
/in│off
指定默认情况下是interactive还是uninteractive。
如果你想每5分钟启动一次一个程序可以写一个这样的脚本。
every5.cmd
soon 300 every5.cmd
xxxx.exe
对于远程启动时,使用AT命令不能成功的原因多数是因为AT命令需要指定绝对时间,如果不能搞得太清楚的话,我建议你们使用soon命令,在大部分情况下大家需要AT的功能,soon都可以完成,而且很快。基本上srv.exe 这样的后门都可以用soon来做。 另外不得不提一点,不知道是我的机器的关系还是这个程序本身的bug,很多情况下soon产生的schedule居然会是tomorrow,这个有点让人搞不懂。大家可以多试试。
31. Srvany.exe (Applications as Services Utility)
Srvany一个可以让Windows应用程序像一个服务那样运行。也就是说在logoff的时候不关闭,也不用在logon
的时候重新启动。也就是就算是没有人登陆这个程序也可以运行,当然计算机得是开着的,呵呵!此外,如果这个应用程序不忽略WM_ENDSESSION或者CTRL_LOGOFF_EVENT时,程序也会因为logoff而退出。srvany是一个为32-bit应用程序设计的,但是用用16-bit也应该没有多大问题。如果你安装过srvany服务的话,在升级或安装Windows 2000, Windows NT Server, Windows NT Workstation, or applications 时要先disabled。实际上srvany本身就是一个服务,它先把自己启动起来,然后又在启动那些配置过的应用程序。就我个人开来这种方法很费力,比起instsrv和srvinstw来说都比较难以使用,最关键的是还要手工添加注册表。下面也就说一下怎么样让一个应用程序像一个服务那样运行。首先我们要安装Srvany,可以使用instsrv Myservice c:\path\srvany.exe或者srvinstw照提示做就可以了。这个是必要的,我们需要Srvany来启动程序。当然为了让程序像服务一样运行,我们需要编辑注册表信息,而且还要选择启动参数和工作目录。这里再次提醒手工操作注册标有危险性,注意备份。
我们只要在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\下
添加一个Parameters子键,这里的MyService是刚刚指定的Srvany的服务名字。
然后再这个subkey底下建立一个应用程序入口,使用REG_SZ类型。
接着在指定程序的全路径,需要包括扩展名。比如Application: REG_SZ: C:\Tools\srv.exe
为了指定相应的启动参数我们还得继续编辑注册表。
这个时候要在刚刚的Parameters底下接着创建一个AppParameters条目,也是REG_SZ类型。
比如:AppParameters: REG_SZ: C:\tmp\example,当然因为srvany已经被安装为一个服务了,你也可以
在Services面板里指定。C:\Tools\srv.exe C:\\temp\example。注意,这里使用\\来表示一个\。
再来就是指定环境变量了。
添加一个AppEnvironment,REG_MULTI_SZ类型。这个东西就是Services面板里面的Dependencies这一项。 可以根据需要指定,没有就不需要添加。 还要指定Working Directory。
也是在Parameters里面建立一个AppDirectory使用REG_SZ。比如:AppDirectory: REG_SZ: C:\Tmp
当然也可以在Services里面 /D c:\\tmp D:\\Tools\\Vi.exe c:\\tmp\\example。
一个srvany可以启动一个应用程序,如果你要用srvany而且是多个程序的话,只要采用不同的servicename启 动一个srvany就可以了。如果要删除可以使用instsrv myservice remove,也可以用sc。
大家可以通过调整以下这几个注册表项来为提供相应的访问。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
LanmanServer\Parameters\NullSessionShares
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
LanmanServer\Parameters\NullSessionPipes
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
LanmanServer\Parameters\RestrictNullSessAccess
32. Srinstw.exe (Service Installation Wizard)
这个安装服务的工具前面就已经提到过了,而且又是GUI工具,使用起来都照着提示做就可以了,这里就不再多说什么,只是注意卸载服务的时候不要把系统重要的服务赶掉就好了。
33. Svcacls.exe (service ACL Editor)
很可惜在这个版本的Reskit里面缺少了这个程序,非常遗憾不能对它进行测试。
Svcacls是一个可以用来设置服务对象的ACL的命令行工具,基本上就是为了方便administrator进行委派控制而设立的。使用这个工具我们需要administrator特权,当然这个东西也是可以进行委派的。这里就提醒一点,不要删除任何服务的adminstrators和system许可,不然的话,你可能就要从装系统来恢复控制了。
svcacls \\targetcomputer\Service Option
\\targetcomputer\Service
这个不用说了。
Option有以下几种
G(grant): trustee: Permissions 增加许可。
S(Set): trustee: Permissions 重置许可。
R(Revoke): trustee: 删除被赋予的explicit permissions。
D(deny): trustee: 拒绝访问。注意,使用这个命令的时候要很小心,一旦你用了D:everyone,连
administrators都没有权限来访问这个服务了。
你可以在一行里面使用这些命令。比如: r:username g:uername:riu。
trustee
你要指定的用户。
permissions
相应的权限。
有Specific许可和generic许可两种。
Specific permissions:
Q: Query Service Configuration (SERVICE_QUERY_CONFIG)
S: Query Service Status (SERVICE_QUERY_STATUS)
E: Enumerate Dependent Services (SERVICE_ENUMERATE_DEPENDENTS)
C: Change Service Configuration (SERVICE_CHANGE_CONFIG)
T: Start Service (SERVICE_START)
O: Stop Service (SERVICE_STOP)
P: Pause/Continue Service (SERVICE_PAUSE_CONTINUE)
I: Interrogate Service with ControlService() (SERVICE_INTERROGATE)
U: Allow User-Defined Control Commands (SERVICE_USER_DEFINED_CONTROL)
Generic permissions:
F: Full Control (SERVICE_ALL_ACCESS = QSECTOPIU)
R: Generic Read (GENERIC_READ = QSE)
W: Generic Write (GENERIC_WRITE = C)
X: Generic Execute (GENERIC_EXECUTE = TOPIU)
这个工具为我们提供了一种安全性的选择,禁止对某些服务的访问,可以避免一些攻击的发生。
34. Svcmon.exe (service Monitoring Tool)
这个工具可以用来监视本地或者是远程计算机服务的状态改变,当它发现一个服务开始或者是停止的时候,这个工具将会通过发e-mail或者是Exchange Server来通知你知道。
这个工具由两部分组成,Svcmon.exe这个需要你手工拷贝到%SystemRoot%\System32底下,另一个Smconfig
是一个安装向导。由于是图形界面,所以我就不再多说什么东西。这里提醒一下注意,在Exchange
Recipients那里添如你要提醒的用户的Email。其他的按照指示做就可以了。
35. Timethis.exe (Time This)
我很喜欢这个工具,这个工具可以用来报告一个程序的运行时间。报告的时间可以详细到0.001s。连net sue都可以拿来测试。 当然使用起来也很简单。
timethis commandname
当你在命令中有<, >, >>,|这样的符号的时候,请使用双引号,比如:timethis "dir /a > a.txt"
使用以后基本上会出来这么一个东西。
C:\>timethis dir
TimeThis : Command Line : dir
TimeThis : Start Time : Sun Mar 03 17:45:27 2002
Volume in drive C is WIN2000
Volume Serial Number is 4CE5-8543
Directory of C:\
2002-02-23 22:58
Documents and Settings
2002-02-23 22:49
Inetpub
2002-03-03 11:37
Program Files
2002-03-03 14:15
WINNT
0 File(s) 0 bytes
4 Dir(s) 9,512,271,872 bytes free
TimeThis : Command Line : dir
TimeThis : Start Time : Sun Mar 03 17:45:27 2002
TimeThis : End Time : Sun Mar 03 17:45:27 2002
TimeThis : Elapsed Time : 00:00:00.050
36. Timezone.exe (Daylight Saving Time Update Utility)
微软真是奇怪,居然在ResKit里面加入了这样的东西,一个调整夏令时的工具。我们现在又不用夏令时,没有多大用处。随便说说!
timezone /g /s startdate enddate /?
/g
当前的情况。
/s startdate enddate
进行修改,格式是HourayofWeekay:Month
Hour: 00-23
DayofWeek: 0=Sunday 1=monday………
Day指定发生的时间,如果上面是sunday,这里是1的话,就是该月的第一个星期天。
Month: 1 = January 到12 = December。
37. Tlocmgr.exe (Telephony Location Manager)
一个用来管理TAPI的小程序,允许你方便的改变你的TAPI Location。一旦运行以后会在右下角有一个tray,这个实在没有什么好说的。
38. Tracedmp.exe (Trace Dump)
这个工具也是用来处理Tracelog产生的日志的,和前面的Reducer.exe有相象之处。Tracelog产生的是不容易阅读的,我们可以使用Tracedmp把它转换比较容易读的格式,比如Summary.txt这种内容少一点, 也可以是CSV可以比较详细。还有tracedmp可以直接从Realtime buffer中直接读出数据来处理。tracedmp解释tracelog产生的日志是通过一个叫mofdata.guid的文件,这文件里面包含了系统的目录服务和系统追踪信息。
如果要处理 其他的数据,必须把相应的信息加入到mofdata.guid中去。
tracedmp option -h│-?
-o filename
输出CSV和summary文件,默认情况下是dumpfile.csv和summary.txt。这里的dumpfile.csv包括每一个
event的详细的信息。具体产生的日志的内容代表的信息我在这里就不详细说了,大家可以参看相应的资料。
-guid
MOF定义文件,默认的GUID是mofdata.guid,你也可以进行指定。
-rt
产生一个real-time trace文件。如果要指定这个选项,tracelog必须是在工作的。
-summary
只提供summary.txt文件。一般像这样用就可以了,Tracedmp c:\logfile.etl。你当然也可以tracedmp -rt ds,来显示realtime记录。
39. Traceenable.exe (Trace Enable)
这是一个用来enable/disable RAS/RADIUS记录的GUI工具。这个工具允许我们修改
HKLM\SOFTWARE\Microsoft\Tracing key下的
EnableConsoleTracing
EnableFileTracing
MaxFileSize
三个subkeys。如果你熟悉注册表的话,也可以直接修改。图形界面的工具就不多说了。提一下面板中的几个选项。
Global
enable console tracing
允许你实时看目录。
enable pool tagging
打开system pool标记。
Per Component
enable console tracing
在控制台窗口中显示日志跟踪信息。
enable file tracing
把信息保存到一个日志文件中。一般在%windir%\tracing。
max file size
文件的最大尺寸。
如果你是在一台才安装的计算机中启用这个东东的话,有些键值会不在注册表中,那就是说在Trace Enable中也看不到,你需要先运行RasPhone。
40. Tracelog.exe (Trace Log)
说了半天终于说到这个tracelog.exe了。这个命令行工具可以开始,停止,启用跟踪记录,这些记录可以用Tracedmp或者是Reducer来看。tracelog在运行时将建立一个buffer,然后如果有数据进入buffer它可以把这些数据转换为文件保存,也可以进行实时的跟踪,这个时候我们可以用如tracedmp这样的应用程序读出buffer中的数据。
tracelog managementoption bufferoption logfileoption Systemleveltracingoption
Provider-specificOption -h│-?
managementOption: Starting, stopping, updating and querying
-guid file
和tracedmp中的是一样的,都是表示provider的信息。如果开始System tracing可以不用提供Guid,如果是directory service events我们可以指定control.guid。
-start logger_name
开始一个trace会话。你要提供一个日志名字,如果是一个system trace可以不需要指定,默认的名字为“NT
Kernel logger”。
-stop logger_name
终止trace会话。如果是system trace可以不用指定logger_name。
-update option logger_name
升级当前的trace会话。这个东西在你想改变文件的名字,buffer的参数,realtime模式等时候就会被用到。
以下这些option可以在kernel logger中用到。
-rt
模式开关,调整realtime mode。
-f logfile_name
指定新的log文件的名字。
-ft n
改变buffer的刷新计数器。
-max n
改变buffer的大小。
"-nodisk" "-noprocess" "-nothread" "-nonet" "-fio" "-pf" "-hf" "-img" "-cm"
NT kernel logger的一些标志。
上面这些调整可以一次进行,如:tracelog -update -rt -max 40。
-x
停止所有活动的会话。
-l
查询在工作的traces。
-q
只查询system trace。
BufferOption
-b n
设置buffer的大小为n kb。小的buffer会导致经常刷新buffer,基本上使用默认就好。
-min n
设置最小buffer,默认是2。
-max n
设置最大buffer,默认是25。
-ft n_seconds
设置刷新时间。
-age n_minutes
修改老化时间。就是分配的buffer没有使用,会在多长时间内被释放。
LogfileOption
-rt b
启用real time mode。
-f name
日志的名字。默认是c:\logfile.etl,如果要使用不同的名字用-o filename。
-seq n_mbyte
一直使用到n_mbyte。
-cir n_mbyte
循环使用n_mbyte。
Systemleveltracingoption
为kernel tracing提供更多的选项。
默认情况下kernel tracing包括
Process start/end
Disk I/O
Network TCP/IP, UDP/IP
Thread start/end
只有在使用一些开关后,才会产生下面的内容。
Image Load
Registry calls
File I/O
Page Fault
但是trace这些东西会产生很大的负担。
-fio
启用file I/O tracing。
-pf
启用page faults tracing。
-hf
启用hard faults tracing。
-img
启用image load tracing。
-um
启用Process Private tracing。这种情况下buffer建立在Private Process space中,默认是在kernel
space中。
-nf
每n mb更新文件。
ProviderSpecificOption: Provider Level Options
-level n
-flags
这些都和相应的provider有关。
下面看个例子,
打开trace。
c:\>tracelog start
Logger Started...
Operation Status: 0L
The operation completed successfully.
Logger Name: NT Kernel Logger
Logger Id: ffff
Logger Thread Id: 1360
Buffer Size: 8 Kb
Maximum Buffers: 25
Minimum Buffers: 2
Number of Buffers: 2
Free Buffers: 1
Buffers Written: 3
Events Lost: 0
Log Buffers Lost: 0
Real Time Buffers Lost: 0
Log File Mode: Sequential
Enabled tracing: Process Thread Disk TcpIp
Log Filename: C:\LogFile.Etl
停止trace
C:\>tracelog
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |