这些产物提供以下四个数据集:
每个数据集目录包含以下文件:
original.c:包含所有函数的源文件
obfuscated.c:由 Tigress 生成的混淆源文件
run_tigress.sh:用于重新生成 obfuscated.c 文件的 Shell 脚本
ground_truth.json:包含基准真值的 JSON 文件。对于每个函数,它 包含原始表达式(在 original.c 中)及其在 obfuscated.c 中的混淆对应项
obfuscated:预编译的 x86_64 二进制文件(无 PIE)
trace.db:作为 SQLite 数据库的执行跟踪 (可能是最有趣的文件)
results:
qsynth.json 为每个函数包含以下条目,例如:
{
"target_1": {
"fun_name": "target_1",
"start": 164,
"stop": 238,
"orig_ast": "~(b*d ^ d*d) - b",
"orig_node": 10,
"orig_depth": 5,
"obfu_ast": "(((b & d)*(b | d) + (b & ~d)*(~b & d) & (d & d)*(d | d) + (d & ~d)*(~d & d)) - ((b & d)*(b | d) + (b & ~d)*(~b & d) | (d & d)*(d | d) + (d & ~d)*(~d & d)) - 1 ^ b) - ((~(((b & d)*(b | d) + (b & ~d)*(~b & d) & (d & d)*(d | d) + (d & ~d)*(~d & d)) - ((b & d)*(b | d) + (b & ~d)*(~b & d) | (d & d)*(d | d) + (d & ~d)*(~d & d)) - 1) & b) + (~(((b & d)*(b | d) + (b & ~d)*(~b & d) & (d & d)*(d | d) + (d & ~d)*(~d & d)) - ((b & d)*(b | d) + (b & ~d)*(~b & d) | (d & d)*(d | d) + (d & ~d)*(~d & d)) - 1) & b))",
"obfu_node": 229,
"obfu_depth": 12,
"triton_ast": "(((b & d)*(b | d) + (~b & d)*(~d & b) & d*d) - (d*d | (b & d)*(b | d) + (~b & d)*(~d & b)) - 1 ^ b) - (((d*d ^ (b & d)*(b | d) + (~b & d)*(~d & b)) & b) + ((d*d ^ (b & d)*(b | d) + (~b & d)*(~d & b)) & b))",
"triton_node": 95,
"triton_depth": 10,
"synthesized_ast": "~((d*d ^ d*b) + b)",
"synth_node": 10,
"synth_depth": 5,
"dse_t": 0.10445356369018555,
"synthesis_t": 0.03491616249084473,
"sem_orig_obf": "UNK",
"sem_obf_trit": "UNK",
"sem_orig_synth": "OK",
"is_simplified": true,
"is_fully_synthesized": true
}
}
Start 和 stop 是执行跟踪中的偏移量(因此是数据库中的 id)。然后对于每个
表达式,包含表达式本身及其节点大小和深度。接着 dse_t、synthesis_t 分别给出
符号执行时间和合成时间。is_simplified 和 is_fully_synthesized
表示函数是否被简化,如果是,是否完全简化。sem_orig_obf、sem_obf_trit
和 sem_orig_synth 表示语义是否在例如原始与合成之间保持不变
(sem_orig_synth)。"UNK" 表示尚未检查或产生了超时。
用于基准测试的表可在此处获取:https://ret2libc.com/static/various/lts_15/ 它们是 Python pickle 对象。表达式使用与 Syntia 类似的逆波兰表示法(RPN)进行编码。