
QSynth用のベンチマークデータセットと合成成果物。Tigressで難読化されたC関数、x86_64バイナリ、実行トレース、グラウンドトゥルース、および合成されたAST結果を含む。
これらのアーティファクトは以下の4つのデータセットを提供します:
各データセットディレクトリには以下のファイルが含まれています:
original.c: すべての関数を含むソースファイル
obfuscated.c: Tigress によって生成された難読化済みソースファイル
run_tigress.sh: obfuscated.c ファイルを再生成するためのシェルスクリプト
ground_truth.json: グラウンドトゥルースを含む JSON ファイル。各関数について、 original.c 内の元の式と、obfuscated.c 内の対応する難読化された式を含みます
obfuscated: x86_64 (no 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 は実行トレース内のオフセット (つまり DB 内の 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) でエンコードされています。