
QSynth के लिए बेंचमार्क डेटासेट और संश्लेषण आर्टिफैक्ट्स, जिनमें Tigress-अस्पष्ट C फ़ंक्शन, x86_64 बाइनरी, निष्पादन ट्रेस, ग्राउंड ट्रुथ, और संश्लेषित AST परिणाम शामिल हैं।
ये आर्टिफैक्ट्स निम्नलिखित चार डेटासेट प्रदान करते हैं:
प्रत्येक डेटासेट निर्देशिका में निम्नलिखित फ़ाइलें होती हैं:
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 के समान Reverse-Polish-Notation (RPN) के साथ एन्कोड की गई हैं।