
مجموعات بيانات المعايير ومخرجات التوليف الخاصة بـ QSynth، وتحتوي على دوال C المشوّشة بواسطة Tigress، وثنائيات x86_64، وتتبعات التنفيذ، والحقيقة الأساسية، ونتائج AST المُولّفة.
توفر هذه التحفيات مجموعات البيانات الأربع التالية:
يحتوي كل مجلد مجموعة بيانات على الملفات التالية:
original.c: ملف المصدر الذي يحتوي على جميع الدوال
obfuscated.c: ملف المصدر المُشوَّش كما تم إنشاؤه بواسطة Tigress
run_tigress.sh: سكربت Shell لإعادة إنشاء ملف obfuscated.c
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 الإزاحات في أثر التنفيذ (وبالتالي المعرّف في قاعدة البيانات). ثم لكل
تعبير، التعبير نفسه وحجم عقدته وعمقه. ثم يعطي 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/ وهي كائنات pickle بلغة Python. يتم ترميز التعبيرات بترميز مشابه للترميز البولندي المعكوس (RPN) المستخدم في Syntia.