天天看點

批處理程式設計- -介紹DOS/BAT

批處理程式設計- -介紹DOS/BAT

用批處理指令把一些特殊的檔案按擴充名分類寫到一份檔案裡。批處理檔案是無格式的文本檔案,它包含一條或多條指令。它的檔案擴充名為.bat或.cmd。在指令提示下鍵入批處理檔案的名稱,或者輕按兩下該批處理檔案,

系統就會調用Cmd.exe按照該檔案中各個指令出現的順序來逐個運作它們。使用批處理檔案(也被稱為批處理程式或腳本),可以簡化日常或重複性任務。當然

本文的主要内容是介紹批處理在入侵中一些實際運用,例如我們後面要提到的用批處理檔案來給系統打更新檔、批量植入後門程式等。下面就開始我們批處理學習之旅吧。

一.簡單批處理内部指令簡介

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指令就是根據這個:來尋找下一步跳到到那裡。最好有一

些說明這樣你别人看起來才會了解你的意圖啊。

4.Rem指令

注釋指令,在C語言中相當與,它并不會被執行,隻是起一個注釋的作用,便于别人閱讀和你自己日後修改。

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                啟動應用程式并等候它結束

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表示将判斷是否符合規定的條件,進而決定執行不同的指令。有三種格式:

1、if "參數" == "字元串" 待執行的指令

參數如果等于指定的字元串,則條件成立,運作指令,否則運作下一句。(注意是兩個等号)如if "%1"=="a" format a:

if {%1}=={} goto noparms

if {%2}=={} goto noparms

2、if exist檔案名 待執行的指令

如果有指定的檔案,則條件成立,運作指令,否則運作下一句。如if exist config.sys edit config.sys

3、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

三.如何使用組合指令(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 ||delsometips.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