 鲜花( 0)  鸡蛋( 0)
|
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。
' P! O q3 a" i* J8 C, u: `# f一.简单批处理内部命令简介9 U' o- b, d5 P3 ]
1.Echo 命令
% J; A9 m" {6 O$ A/ a5 \" f7 I打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
6 g! X" _% W$ p9 e语法
d8 N& k$ G7 o3 r; Q- ~echo [{on|off}] [message]
9 B6 q! g7 Z! F* USample:@echo off / echo hello world* s' Z: L4 s3 Y" Z
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
& S1 E4 M$ l* e# X1 Q2.@ 命令1 p( O6 p# t# d; n1 p$ k8 K
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。; x7 O/ v& K5 [. Y
Sample:@echo off
. z# W" a3 P3 d8 G, g- e@echo Now initializing the program,please wait a minite...0 }+ d. A9 Y% k
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)6 U; O1 b' b2 ?. {/ M9 s' k
3.Goto 命令
# K0 S6 F' O& m# p' W7 [指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
4 m$ G. ^, U6 Q9 S- a/ ~( Y1 F语法:goto label (label是参数,指定所要转向的批处理程序中的行。)0 D: i- \" o* T' Y
Sample:" {9 b$ m) }) X1 M! ^
if {%1}=={} goto noparms% ]8 V( p3 z/ Q+ ]5 j" [
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)5 I% J% ?3 g9 h3 Z- f7 r6 M
@Rem check parameters if null show usage5 x" D( X0 [5 K! x
:noparms
! s' x& ?: x7 Gecho Usage: monitor.bat ServerIP PortNumber
. @+ y, C8 f8 A% P* [. ^goto end
7 A2 s! O: @3 k1 y标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。9 {* B# o% f# r8 k# _1 n; o# K2 g
4.Rem 命令' J- u" e4 C% o0 t1 |# x0 {
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。- k# e. q! M# w8 ~! ]6 H/ j& l
Rem Message# `" z7 }, L V! W: s) b
Sample:@Rem Here is the description.
. V7 ^/ c ^5 E5.Pause 命令, F* q6 t( b* Y2 r: Y6 L
运行 Pause 命令时,将显示下面的消息:
0 a3 ?5 M* { c; Q+ DPress any key to continue . . .
& B j" A4 `' u+ ?Sample:
4 {2 h3 E8 K; W4 |" f4 @; _@echo off
' s' i& l+ M0 T9 M9 q. F- z+ Q:begin
! Q- _8 n! d/ O6 {! j. dcopy a:*.* d:\back I: g7 f' t9 h
echo Please put a new disk into driver A/ C+ ]- h. ^/ x( W) d
pause
5 a! _0 ^3 f" `3 Mgoto begin
% ]3 f$ U" \1 M$ ^在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。" w0 e7 g% a$ p+ O+ w) l
6.Call 命令+ \2 o# C8 z8 X7 {! P
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
0 Y8 v: n2 b7 ^* w5 U语法
$ U* h2 Z- ^( z+ vcall [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
8 x d# ?8 E& \4 N# `+ t: l; W参数, ]/ A/ O* x3 _% c* s4 `5 J. v
[Drive:}[Path] FileName3 O& v$ ], I) Z* ]+ {
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
6 s3 \0 d, _* V. i3 e7.start 命令
- ]& A! T" \7 I7 s调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
+ f: z- D) W3 `入侵常用参数:
$ @- t+ y; S5 F9 _MIN 开始时窗口最小化
2 \! F: m: D: e# n" USEPARATE 在分开的空间内开始 16 位 Windows 程序
6 W I+ ^: i+ a! Y- x4 ^HIGH 在 HIGH 优先级类别开始应用程序
. Y$ W% ]) I# h' F5 {2 q; q9 w. _REALTIME 在 REALTIME 优先级类别开始应用程序
& Y, W% |' H9 M4 ~+ e3 {/ KWAIT 启动应用程序并等候它结束
1 g7 H% t0 l: T8 i; C: h5 H' gparameters 这些为传送到命令/程序的参数
' s1 r3 N- l' n6 k) d, C. ^执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
1 ?2 _5 S) l/ `- S; m8.choice 命令% w: p ~* @8 `" B
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
% p5 i* L& F4 U7 n如: choice /c:dme defrag,mem,end
; ]6 g+ c: ^* |将显示# c4 X0 e" r- @4 E$ Y
defrag,mem,end[D,M,E]?
- N/ _0 ^- d3 m! \; x" b7 |Sample:0 ]+ Z9 n% a5 ]2 o0 n
Sample.bat的内容如下:
7 ~! k1 c2 d5 Y1 W! M7 c0 T@echo off
/ j: ?" P: j7 W. Fchoice /c:dme defrag,mem,end7 n7 t {. i2 I* U5 D2 t5 L
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
; c7 o2 x' Z! C: {7 \/ x2 aif errorlevel 2 goto mem: r/ D* X( B% b9 Y* H$ \' H
if errotlevel 1 goto end: U3 e0 }# F3 i9 ]) V
:defrag
$ p* W1 \' K9 nc:\dos\defrag+ t v# J& ?8 A
goto end
* u) q P- ]+ ?: j! |:mem
3 ]6 ?/ d0 E+ Z4 J7 [& \/ T3 jmem
' M) z% N* o/ k* j% ogoto end# h8 V$ A- J8 N3 S7 Y" p
:end
! b/ L* s2 y9 a! T2 iecho good bye. m: S# [/ H/ w; j. B$ H
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。 |
|