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