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