序号 |
命令及描述 |
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*命令,但执行的是写入操作 |