winhex腳本

Winhex腳本是運行於winhex的一種腳本語言,用於數據的批量搜尋、定位、修改。

基本介紹

  • 中文名:winhex腳本
  • 運行環境:winhex
  • 用途:數據的批量搜尋、定位等
  • 特點:複雜繁瑣的數據分析過程智慧型化
腳本分析,變數,操作符,關鍵字,函式,語句,一個簡單的例子,

腳本分析

Winhex腳本是運行於winhex的一種腳本語言,用於數據的批量搜尋、定位、修改。他服務於底層數據,對用戶來說,就是將原本複雜繁瑣的手工數據分析過程智慧型化,這和開發一個全新的數據恢復軟體是一樣的。我們只需一次告訴WINHEX要乾什麼,剩下的由winhex自動執行。它WINHEX內部函式功能的高度濃縮。同時,一旦脫離了底層數據,它就喪失其根本目標。也就是說,沒有硬碟,沒有檔案,沒有記憶體,這個語言就失去了運行基礎。

變數

Winhex的變數類似於javascript,並不需要指明變數的類型,直接賦值給變數就能讓變數表達相應類型
Assign MyVariable 12345
Assign MyVariable 0x0D0A
Assign MyVariable "I like WinHex"
Assign MyVariable MyOtherVariable
將整數,二進制數值,ASCII文本,或其他變數內容保存到“MyVariable”變數中。如果這個變數不存在,將會被自動創建。其他的創建變數的方法:Read,GetUserInput,InttoStr。同時可以允許有48個變數存在。
Release MyVariable
刪除一個已存在的變數,因為winhex腳本中只支持48個變數存在,所以用過的不再使用變數我們可以將其刪除以釋放變數空間。
GetUserInput MyVariable "Please enter your name:"
在腳本運行期間,保存用戶指定的ASCII文本或二進制數據(0x...)到變數“MyVariable”中。第二個參數給除了用戶提示。如果變數不存在,它將重新創建一個。其他創建變數的方式:Assign,Read。
GetUserInputI MyIntegerVariable "Please enter your age:"
與GetUserInput功能相同,但是只允許整數型變數。
Inc MyVariable
將變數解釋為整數(不大於8位)並且每運行一次變數自動加1。在循環中有用。
Dec MyVariable
將變數解釋為整數(不大於8位)並且每運行一次變數自動減1。在循環中有用。
IntToStr MyStr MyInt
IntToStr MyStr 12345
將第一個變數中的ASCII文本轉換成整數並保存到第二個變數中。
StrToInt MyInt MyStr
將第一個變數中的整數轉換成ASCII文本並保存到第二個變數中。

操作符

加法(+),減法(-),乘法(*),整除(/),模除(%),邏輯運算符AND(&),OR(|),以及XOR(^)。
以下是有效的數學表達式
(5*2+1)
(MyVar1/(MyVar2+4))
or (-MyVar)。

關鍵字

currentpos currentpos 表示當前檔案或磁碟偏移地址
getsize getsize 表示檔案大小
unlimited unlimited 無限語句

函式

Create "D:\My File.txt" 1000
創建一個1000位元組的新檔案,如果已經存在同名檔案,則將其覆蓋。
Open "D:\My File.txt"
Open "D:\*.txt"
打開指定格式的檔案,如果通配符為“?”則winhex會讓用戶選擇要打開的檔案。
Open C:
Open D:
打開指定的邏輯驅動器。如果通配符為“:?”則winhex會讓用戶選擇要打開的邏輯驅動器或者磁碟。
Open 80h
Open 81h
Open 9Eh
打開指定的物理介質。軟碟的為00h,硬碟與u盤為80h,光碟為9Eh。
可以增加第二個參數來設定檔案或者介質的編輯模式(“in-place”或者“read-only”)
CreateBackup
為活動檔案的當前狀態創建WHX備份。
CreateBackupEx 0 100000 650 true "F:\My backup.whx"
備份當前活動磁碟中從0扇區到100000扇區的數據。備份檔案將自動分割成650M大小。並且選擇了壓縮選項。輸出檔案的路徑以及名稱作為最後的參數寫入。
如果備份檔案不需要分割,則第三個參數的數值該為0即可。如果不啟動壓縮功能則將“true”改為“false”。如果需要自動分配檔案名稱以及檔案路徑則最後的參數表示為“""”即可。
Goto 0x128
Goto MyVariable
游標的位置移動到偏移量0x128位置(16進制表示)。同樣也可以用數字變數(最長8位元組)來定義游標移動的位置。
Move -100
將當前游標的位置向後移動100位元組(16進制)。
Write "Test"
Write 0x0D0A
Write MyVariable
游標當前位置(以覆蓋模式)寫入ASCII字元“Test”或者兩個位元組的16進制數“0D0A”。這裡同樣可以寫入數字變數中的值。同時將游標移動到被覆蓋部分的後面。當到達檔案的結尾時,將在檔案尾部添加空位元組以完成操作。下一個寫命令將不會在檔案尾巴。
Write2
和“Write”的功能類似,當時當到達檔案結尾的時候,不會在檔案添加空位元組。
So it is not safe to assume that Write2 always moves the current position forward by the number of bytes written.
Insert "Test"
功能與“Write”類似,但是在“insert”模式只能套用於檔案。
Read MyVariable 10
從當前位置讀入10個位元組的數據到“MyVariable”變數中。如果變數不存在,它將會創建一個。winhex同時可以支持48個不同的變數。另一個創建變數的命令是“Assign”。
ReadLn MyVariable
從當前位置讀入一整行的數據到“MyVariable”變數中直到遇到換行符。如果變數已經存在了,則變數的大小將會被從新調整。
Close
不保存的關閉當前活動視窗
CloseAll
不保存的關閉所有視窗。
Save
保存當前活動視窗中打開的檔案或磁碟的修改。
SaveAs "C:\New Name.txt"
將當前活動視窗打開的檔案另外儲存為指定目錄下的檔案。如果通配符為“?”,則winhex會讓用戶自己選擇保存的路徑以及檔案名稱。
SaveAll
保存所有視窗中修改。
Terminate
中斷腳本的執行。
Exit
中斷腳本的執行並且關閉winhex。
ExitIfNoFilesOpen
如果在winhex中沒有打開的檔案將終止腳本檔案的執行。
Block 100 200
Block "My Variable 1" "My Variable 2"
在當前活動視窗中定義一個偏移量從100到200的選塊(10進制)。下一行命令表示定義從變數"My Variable 1"到"My Variable 2"的選塊(最長8位元組)
Block1 0x100
偏移量0x100處定義一個位元組的選塊。同樣可以使用變數
Block2 0x200
定義一個從開頭到偏移量0x200部分的選塊。同樣可以使用變數。
Copy
將當前選塊複製進剪下板中。如果沒有定義選塊,其功能和編輯選單中的複製命令相同。
Cut
將當前選塊中的檔案剪下到剪下板中。
Remove
將當前選塊中的數據從檔案中移除。
CopyIntoNewFile "D:\New File.dat"
CopyIntoNewFile "D:\File +MyVariable+.dat"
將當前選塊中的數據複製進指定的新檔案,而不複製進剪下板。如果沒有定義選塊,其功能和編輯選單中的複製命令相同。同樣可以複製磁碟扇區中的數據作為一個新檔案。新建的檔案不會自動在winhex的編輯視窗中打開。可以在“+”之間加入變數,變數名將被解釋為不大於2^24(16M)的整數。通常在循環套用以及檔案恢復中比較有用。
Paste
剪下板中的數據貼上入檔案中,並且不改變游標當前位置。
WriteClipboard
剪下板中的數據寫入檔案或磁碟扇的當前位置中,不改變游標當前位置,並且覆蓋從當前游標所在位置以後的數據。
Convert Param1 Param2
將當前活動檔案中的數據從一種格式轉換成另一種格式。有效的參數是ANSI,IBM,EBCDIC,Binary,HexASCII,IntelHex,
MotorolaS, Base64, UUCode, LowerCase, 以及UpperCase,與轉換選單中的轉換選單命令功能相同。
AESEncrypt "My Password"
使用AES加密當前活動檔案或者磁碟,或其選塊,使用指定的密鑰(最高32位)。
AESDecrypt "My Password"
解密當前活動檔案或磁碟。
Find "John" [MatchCase MatchWord Down Up BlockOnly SaveAllPos Unicode Wildcards]
Find 0x1234 [Down Up BlockOnly SaveAllPos Wildcards]
分別搜尋當前活動視窗中名為“john”的字元串或16進制值數0x1234,並且在第一個搜尋到的地方停下來。其他的參數是可選的。
默認的winhex搜尋整個檔案或磁碟。其他的可選參數功能和通常的winhex搜尋選項相同。
ReplaceAll "Jon" "Don" [MatchCase MatchWord Down Up BlockOnly Unicode Wildcards]
ReplaceAll 0x0A 0x0D0A [Down Up BlockOnly Wildcards]
在當前活動視窗中使用其他的值替換所有存在上述字元串或16進制數值的地方。在“in-place”模式下只能套用與磁碟。
CopyFile C:\A.dat D:\B.dat
將C:\A.dat檔案中的內容複製到D:\B.dat中。
MoveFile C:\A.dat D:\B.dat
將C:\A.dat檔案轉移到D糟中並命名為D:\B.dat。
DeleteFile C:\A.dat
將C:\A.dat檔案刪除。
InitFreeSpace
InitSlackSpace
使用當前初始化設定清理當前邏輯驅動器中的所有自由空間或鬆散空間,InitSlackSpace將驅動器的模式臨時轉換為“in-place”模式,以保存未保存的修改。
InitMFTRecords
使用當前初始化設定在當前NTFS格式的邏輯驅動器中清理未使用的MFT FILE記錄。對於其他的檔案系統無效。修改立即就會寫入硬碟中。
GetClusterAlloc MyStr
在邏輯卷中,找回哪個檔案被儲存在當前簇中的文本描述,然後將描述保存到指定的變數中。
GetClusterAllocEx IntVar
在邏輯卷中,找回一個整數值指示簇是否被分配,1或者非0,表示該簇已被分配。並且將描述保存在指定變數中。
GetClusterSize IntVar
返回邏輯卷中簇的大小,並將數值保存到指定的變數中。
InterpretImageAsDisk
磁碟鏡像或證據檔案作為原始物理磁碟或分區一樣對待。需要specialist或forensic許可。
CalcHash HashType MyVariable
CalcHashEx HashType MyVariable
與工具選單中的hash命令功能相同並且將變數儲存在指定變數中(如果變數不存在,則會自動創建)。HashType參數必須為以下類型中的一種:CS8, CS16, CS32, CS64, CRC16, CRC32, MD5, SHA-1, SHA-256, PSCHF。CalcHashEx命令將在windows視窗中顯示hash值。
MessageBox "Caution"
顯示信息對話框,並且提供ok和cancel兩個按鈕。按下cancel按腳本本。
ExecuteScript "ScriptName"
在腳本的當前運行處運行另一個腳本。調用其他外部腳本可以鑲套使用。當被調用的腳本執行完成以後,腳本繼續執行下面的命令。這個特徵可以幫助用戶清楚的了解腳本的結構。
Turbo On
Turbo Off
管理道模式開關。
Debug
用戶可以利用該命令確定腳本中的每一條命令都是否有效。
UseLogFile
錯誤信息被寫入當前資料夾下的日誌檔案“scripting.log”。這些信息不會顯示在信息對話框中。非常有用,特別在運行的腳本主機無法遠程連線的時候。

語句

IfFound
如果發現了值則執行下面的命令。
IfEqual MyVariable "Hello World"
IfEqual 0x12345678 MyVariable
IfEqual MyVariable 1000
IfEqual MyVariable MyOtherVariable
IfEqual MyVariable (10*MyOtherVariable)
比較兩個整數值(其中每個值可以是常量,整數變數或者數學表達式)或者兩個變數,ASCII字元串,或16進制數值(2進制模式)。比較兩個對象的2進制數值長度,如果不相同的話則返回結果為false。只有返回值為true時,下面的命令才會被執行。if條件不可以鑲套使用。
IfGreater MyVariable "Hello World"
IfGreater 0x12345678 MyVariable
IfGreater MyVariable 1000
IfGreater MyVariable MyOtherVariable
IfGreater MyVariable (10*MyOtherVariable)
和IfEqual擁有相同的參數。第一個參數大於第二個參數,返回值為true,則下面的命令才能被執行。if條件不可以鑲套使用。
Else
套用在IfFound或IfEqual之後。如果沒有任何對象被搜尋到或者比較的目標不相同,則執行else後面的代碼。
EndIf
結束if條件命令執行(在IfFound或IfEqual之後)。
{...
ExitLoop
...}
退出循環。其後會有一個方括弧來定義其循環次數,可以是變數也可以是關鍵字“unlimited”(無限循環)。winhex腳本中循環只能使用ExitLoop命令來退出。循環不可以鑲套使用。
舉例:
{ Write "Loop" }[10] 將輸出“Loop”字元串10次。
Label ContinueHere
創建一個標籤並命名為“ContinueHere”
JumpTo ContinueHere
腳本跳轉到標籤處繼續執行.
NextObj
循環在所有視窗中進行切換“活動”視窗。如果有三個視窗被打開,並且視窗#3狀態為活動視窗,則“NextObj”命令將會讓視窗#1變為活動視窗。
ForAllObjDo
在ForAllObjDo與EndDo之間的腳本代碼將在所有打開的檔案或者磁碟中執行。

一個簡單的例子

恢復NTFS分區DBR扇區
open :? //打開故障分區(自己選擇)
assign w1 getsize //聲明w1的值為最大(也就當前打開分區的總位元組)
goto (w1-512) //跳轉到總位元組數-512位元組的位置(NTFS 的備份DBR位置最後一個扇區
//getsize為最大所以我們要-512位元組才是DBR備份的開始位置
read w2 512 //讀取512個位元組到變數w2 把NTFS備份DBR讀入到變數w2
goto 0x000 //跳轉到開始位置
write w2 //寫入變數w2(把剛才NTFS備份DBR的信息寫入到0號扇區
save //保存

相關詞條

熱門詞條

聯絡我們