序號 |
命令及描述 |
1 |
quickbmsver VERSION 檢查QuickBMS的當前版本是否可以支持解包腳本,這個命令很少使用。 參數:VERSION QuickBMS的版本號 |
2 |
clog NAME OFFSET ZSIZE SIZE [FILENUM] 提取文件并實時解壓,本操作不影響輸入文件的當前位置計數器,解壓算法由ComType命令指定,提取的文件內容能夠自動使用Encryption命令進行解密。 參數: NAME 輸出文件的名稱 OFFSET 定位文件在資源中的位置 ZSIZE 資源中壓縮的數據大小 SIZE 解壓后的文件大小 FILENUM 與資源關聯的文件號 |
3 |
findloc VAR TYPE STRING [FILENUM] [ERR_VALUE] 從資源的當前位置查找首次出現的字符串或數值,這個命令通常用于未知資源格式或特殊文本文件,很少使用 參數: VAR 存儲找到的位置 TYPE 能夠是字符串、統一碼或數值 STRING C語言的字符串標記法,依賴于TYPE參數 FILENUM與資源關聯的文件號 ERR_VALUE 如果沒有找到字符串,默認時FindLoc將終止解包腳本,但是若ERR_VALUE指定了值,那么這個值將被分配給VAR參數,從而不會終止解包腳本 |
4 |
for [VAR1] [OP] [VALUE] [COND] [VAR2] ... next [VAR] 經典的帶有初始化、條件和步進的"for"循環。在任何時候可使用break指令中斷循環 (注意:break指令在多個for循環中并不直觀,因為某些情況下會產生問題),next用來界定循環,同時進行步進。實際步驟是:將VALUE賦值給VAR1 (或執行一個數學操作);執行循環直到VAR1大于VAR1的限定條件;執行for和next之間的全部操作;增量VAR1 參數: VAR1 初始化變量 OP 操作符 VALUE 賦給初始化變量的值 COND 退出循環條件 VAR2 條件的第二部分 |
5 |
get VAR TYPE [FILENUM] 從打開的文件讀取字符串或數值,這是經常使用的命令 參數: VAR 存儲讀取數據的變量 TYPE 請查看前面解釋的類型描述 FILENUM 與資源關聯的文件號 |
6 |
getdstring VAR LENGTH [FILENUM] 從文件或變量中讀取定長數據,用于指定長度的文件名或其它字符串 參數: VAR 存儲讀取數據的變量 LENGTH 讀取的字節數 FILENUM 與資源關聯的文件號 |
7 |
goto OFFSET [FILENUM] [TYPE] 轉到文件的絕對位置 參數: OFFSET 到達的位置,如果是負數則從文件末尾向前推,能夠處理的范圍是(0到 0xffffffff) FILENUM 與資源關聯的文件號 TYPE SEEK_SET (默認),SEEK_CUR,SEEK_END |
8 |
idstring [FILENUM] STRING 如果文件當前位置處的簽名與提供的字符串不符則終止解包腳本。 參數: FILENUM與資源關聯的文件號 STRING C語言的字符串標記法 |
9 |
log NAME OFFSET SIZE [FILENUM] 提取文件,本操作不影響輸入文件的當前位置計數器,提取的文件內容能夠自動使用Encryption命令進行解密。 參數: NAME 輸出文件名稱 OFFSET 定位文件在資源中的位置 SIZE 提取的數據大小 FILENUM 與資源關聯的文件號 |
10 |
math VAR1 OP VAR2 執行兩個變量的數學操作,并將結果放置在第一個變量里,注意:為了兼容性考慮,全部的操作都默認使用有符號32位數值 參數: VAR1 擔當輸入和輸出變量 OP + 相加 * 相乘 / 相除 - 相減 ^ 異或 & 與 | 或 % 取模 ! 非(0成為1,其他值成為0) ~ 補碼(類似于異或0xffffffff) < 左移 > 右移 l 左轉 r 右轉 s 字節交換 w 位交換 = 將VAR2賦值給VAR1 n 負數 a 絕對值 v 根 p 乘方 x 對齊,例如:var1=1, var2=16, result=16 var1=16, var2=16, result=16 var1=17, var2=16, result=32 z 公共位交換:var1=0xab, var2=4, result=0xba var1=0xabcd, var2=4, result=0xdc var1=0xabcd, var2=8, result=0xcdab 在OP的前面或后面添加u可以強制使用無符號操作 VAR2 其它的輸入變量 |
11 |
open FOLDER NAME [FILENUM] [EXISTS] 打開文件以便進行讀取 參數: FOLDER 文件夾名稱,FDDE表示NAME參數是輸入文件夾里要打開的文件的擴展名,FDSE將認為NAME參數就是輸入文件夾里要打開的文件名,"."表示當前輸出文件夾 NAME 請看上面解釋,NAME能夠是?,這樣QuickBMS將告之用戶插入文件并手動打開,若NAME是"",將執行清空操作 FILENUM 與資源關聯的文件號 EXISTS 若文件不存在,此變量將設置為0,否則為1,若文件不存在,QuickBMS默認使用一個錯誤進行終止 |
12 |
savepos VAR [FILENUM] 返回文件的當前位置 參數: VAR 存儲位置的變量 FILENUM 與資源關聯的文件號 |
13 |
set VAR1 [TYPE] VAR2 將常量或變量賦值給其它變量,也可以在賦值時改變類型 參數: VAR1 輸出變量或內存文件 TYPE 沒什么作用 VAR2 等待賦值的變量或常量 |
14 |
do ... while VAR1 COND VAR2 一個不經常使用的循環類型,在循環的末尾執行條件檢查,實際上很少使用。 參數: VAR1 條件的第一部分 COND 條件 VAR2 條件的第二部分 |
15 |
string VAR1 OP VAR2 相當于math命令的字符串形式 參數: VAR1 輸入和輸出變量 OP = 直接復制,如果VAR2是數值,則作為原始字符串,例子:var2="0x44434241", result="ABCD" + 將VAR2附加到VAR1的末尾 - 如果VAR2是正數,那么VAR1將從末尾截斷指定的字節數;如果VAR2是負數,那么VAR1將從開頭截斷指定的字節數,否則將從VAR1中移除全部的VAR2 ^ 使用VAR2異或VAR1(若較短則循環異或) < 從VAR1的前面截斷VAR2指定的字符數量,var1="thisisastring",var2="4", result="isastring" % 截斷頭尾字符 & var1="thisisastring", var2="isa", result="isastring" | var1="thisisastring", var2="isa", result="string" $ ! > var1="thisisastring", var2="4", result="thisisast";var1="thisisastring", var2="isa", result="this" b 字節轉16進制數,var2="abc", result="616263" B 字節轉16進制數,但VAR2是一個空結尾字符串 h 16進制數轉字節,var2="616263", result="abc" e 基于Encryption命令的加密 E 基于Encryption命令的加密,但VAR2是一個空結尾字符串 c 基于ComType命令的壓縮 C基于ComType命令的壓縮,但VAR2是一個空結尾字符串 u var2="hello", result="HELLO" l var2="HELLO", result="hello" p s r 反轉字符串 R 替換字符 VAR2 第二個變量或字符串 |
16 |
cleanexit 終止解包腳本 |
17 |
if VAR1 COND VAR2 ... [elif VAR1 COND VAR2] ... [else] ... endif 檢查條件并當條件滿足時執行必要的操作: - If 是第一個條件 - Elif 是其它條件,能夠是多個 - Else 沒有條件匹配時執行的操作,一般放在最后 - EndIf 定界標記 參數: VAR1 條件的第一部分 COND 可以是字符串和數值 < 小于 > 大于 != 不等 == 相等 >= 大于等于 <= 小于等于 & 字符串:VAR1包含VAR2;數值:與 ^ 字符串:等于;數值:異或 | 或 % 取模 / 相除 << 左移 >> 右移 ! 取反 !! 若VAR2為非零值則為真 ~ 補碼 VAR2 條件的第二部分 |
18 |
getct VAR TYPE CHAR [FILENUM] 讀取字符串直到CHAR表示的定界符 參數: VAR 輸出變量 TYPE 忽略了 CHAR 8位數值的定界字符 FILENUM 與資源關聯的文件號 |
19 |
comtype ALGO [DICT] 指定clog命令使用的壓縮算法 參數: ALGO 各種壓縮算法名稱 DICT 可選的字典或與算法相關的參數 |
20 |
reverselong VAR 交換32位變量,例如:0x44332211交換為0x11223344 參數: VAR 交換的變量 |
21 |
reverseshort VAR 交換16位變量,例如:0x2211交換為0x1122 參數: VAR 交換的變量 |
22 |
endian TYPE 改變讀寫數據的全局大小序,默認為小序 參數: TYPE 小序的0x11223344存儲為44 33 22 11;大序的0x11223344存儲為11 22 33 44 |
23 |
filexor SEQ 任何讀取操作(get, *log 等等)都將執行異或 參數: SEQ 8位數值序列,可以是:如0x12或由空格分開的字節序列如"0x12 0x34 0x56"或16進制字符串如"\x12\x34\x56";設置為0或""將禁止異或 |
24 |
filerot SEQ 與filexor命令類似,但執行的是求和操作,若SEQ為0x01且文件包含"hello",則變成 "ifmmp" |
25 |
strlen VAR1 VAR2 計算VAR2的長度并存儲在VAR1中 參數: VAR1 存儲長度的變量 VAR2 需要計算長度的變量 |
26 |
getvarchr VAR1 VAR2 OFFSET [TYPE] 定制字符串以便包含不同信息 參數: VAR1 目的變量,包含讀取的元素 VAR2 想要獲取元素的變量或內存文件 OFFSET 指定VAR2中獲取元素的位置 TYPE 默認為字節 |
27 |
putvarchr VAR1 OFFSET VAR2 [TYPE] 允許使用自定義規則執行寫入的復雜操作 參數: VAR1 想要放置元素的變量或內存文件 OFFSET 在指定位置放置元素 VAR2 包含想要寫入的元素的變量 TYPE 默認為字節 |
28 |
debug 用于調試 |
29 |
padding VAR [FILENUM] 執行此命令將自動跳轉到對齊后的數據位置,如果文件使用4字節對齊,當前位置是0x39,那么在使用padding 4之后,其位置將自動變為0x3c 參數: VAR 對齊大小 FILENUM 與資源關聯的文件號 |
30 |
append 在*log命令中使能附加模式,因此當輸出文件名已經存在時將不會覆蓋而是添加 |
31 |
encryption ALGO KEY [IVEC] [MODE] [KEYLEN] 為文件的讀取操作設置一個解密算法,此命令僅工作于log 和clog命令。 參數: ALGO 各種解密算法 KEY 類似于"\x11\x22\x33\x44"的鍵值 IVEC 用于增加解密算法的安全性 MODE 默認為0,表示解密,否則為1,表示加密 KEYLEN 強制鍵值的長度,主要是避免使用變量作為鍵值時出現問題(因為可能包含0) |
32 |
print MESSAGE 打印字符串,若變量在兩個%字符之間則打印變量的值 參數: MESSAGE 字符串 |
33、34 |
getarray VAR1 ARRAY VAR2 putarray ARRAY VAR1 VAR2 使用動態數組來存儲數據,類似于臨時區或堆棧 |
35 |
callfunction NAME [KEEP_VAR] startfunction NAME ... endfunction 聲明一個函數,請牢記規則:若KEEP_VAR為1,則函數結束時會保存變量的值,通常在解包腳本的后面放置函數 參數: NAME 函數名稱 KEEP_VAR 0 = 遞歸函數(默認) 1 = 正常函數,會改變變量 |
36 |
scandir PATH NAME SIZE [FILTER] 掃描文件,沒什么用處,可以忽略 參數: PATH 必須是".",代表當前文件夾 NAME 接收文件名稱,可以是"" SIZE 接收文件大小,可以是-1 FILTER 過濾器,僅當指定-F參數時才有效 |
37 |
calldll DLLNAME FUNC/OFF CONV RET [ARG1] [ARG2] ... [ARGn] 本命令允許使用QuickBMS內部的插件,可用于存儲在可執行文件或動態鏈接庫中的自定義解壓或解密函數 參數: DLLNAME 動態鏈接庫或可執行文件名稱 FUNC/OFF 函數名稱或相對位置偏移,請牢記相對地址不是絕對地址,而是與基地址有關 CONV 函數調用慣例:stdcall,cdecl,fastcall,borland,watcom,pascal,safecall,syscall,optlink,carion,thiscall RET 函數返回值,""表示沒有返回值 [ARGS] 函數的所有參數 |
38、39、40 |
put VAR TYPE [FILENUM] putdstring VAR LENGTH [FILENUM] putct VAR TYPE CHAR [FILENUM] 類似于get*命令,但執行的是寫入操作 |