
QSynth를 위한 벤치마크 데이터셋 및 합성 아티팩트로, Tigress로 난독화된 C 함수, x86_64 바이너리, 실행 트레이스, 정답 데이터, 그리고 합성된 AST 결과를 포함합니다.
이 아티팩트는 다음 네 가지 데이터셋을 제공합니다:
각 데이터셋 디렉터리에는 다음 파일들이 포함되어 있습니다:
original.c: 모든 함수를 포함하는 소스 파일
obfuscated.c: Tigress에 의해 생성된 난독화된 소스 파일
run_tigress.sh: obfuscated.c 파일을 재생성하기 위한 셸 스크립트
ground_truth.json: 정답(ground truth)을 포함하는 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와 유사한 Reverse-Polish-Notation(RPN)으로 인코딩되어 있습니다.