Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SiMBA — فكّ التعتيم الفعّال للتعبيرات المنطقية-الحسابية المختلطة الخطية | Kitploit
أدوات/GitHubGitHub/denuvosoftwaresolutions/simba
التحليل الثابتالهندسة العكسيةالتشفيرتحليل الملفات الثنائيةالأوراق والأبحاثالتعلم والتعليم
GitHubdenuvosoftwaresolutions/simba

SiMBA

فكّ التعتيم الفعّال للتعبيرات المنطقية-الحسابية المختلطة الخطية

عرض المستودع
189192منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

SiMBA

SiMBA هي أداة لتبسيط التعبيرات الحسابية-المنطقية المختلطة الخطية (MBAs). مثل MBA-Blast وMBA-Solver، تستخدم نهجًا جبريًا بالكامل يعتمد على فكرة أن تعبير MBA الخطي محدد بالكامل بقيمه على مجموعة الأصفار والآحاد، ولكنها تستفيد من الرؤى الجديدة التي تفيد بأن التحويل إلى فضاء البت الواحد (1-bit-space) ليس ضروريًا لتحقيق ذلك.

تستند إلى الورقة البحثية التالية:

root@kitploit:~
@inproceedings{simba2022,
    author = {Reichenwallner, Benjamin and Meerwald-Stadler, Peter},
    title = {Efficient deobfuscation of linear mixed Boolean-arithmetic expressions},
    year = {2022},
    month = nov,
    address = {Los Angeles, CA, USA},
    date = {November 7 - 11, 2022},
    booktitle = {Proceedings of the CheckMATE 2022 workshop, co-located with the ACM Conference on Computer and Communication Security, CCS'22},
    pages = {19--28},
    doi = {10.1145/3560831.3564256},
    publisher = {ACM},
    howpublished = {\url{https://arxiv.org/abs/2209.06335}}
}

اعثر على الشرائح وتسجيل الفيديو للعرض التقديمي. متاح أيضًا عبر ACM.

المحتوى

يتم توفير برنامجين رئيسيين (Python 3):

  • simplify.py لتبسيط تعبيرات MBA الخطية المفردة
  • simplify_dataset.py لتبسيط مجموعة من تعبيرات MBA الخطية الموجودة في ملف والتحقق منها عبر مقارنتها بتعبيرات أبسط مكافئة موجودة أيضًا في هذا الملف

بالإضافة إلى ذلك، يمكن استخدام البرنامج check_linear_mba.py للتحقق مما إذا كانت التعبيرات تمثل تعبيرات MBA خطية.

الاستخدام

تبسيط التعبيرات المفردة

لتبسيط تعبير مفرد expr، استخدم

root@kitploit:~
python3 src/simplify.py "expr"

بدلاً من ذلك، يمكن تبسيط تعبيرات متعددة في وقت واحد، على سبيل المثال:

root@kitploit:~
python3 src/simplify.py "x+x" "a&a"

في الواقع، تُعتبر كل وسيطة لسطر الأوامر ليست خيارًا تعبيرًا ليتم تبسيطه. لاحظ أن حذف علامات الاقتباس قد يؤدي إلى سلوك غير مرغوب فيه. تُطبع نتائج التبسيط على سطر الأوامر كما هو موضح فيما يلي:

root@kitploit:~
*** Expression x+x
*** ... simplified to 2*x
*** Expression a
*** ... simplified to a

افتراضيًا، لا يتم إجراء أي تحقق مما إذا كان تعبير الإدخال عبارة عن MBA خطي. يمكن تفعيل هذا التحقق اختياريًا عبر الخيار -l:

root@kitploit:~
python3 src/simplify.py "x*x" -l

بما أن $x*x$ ليس تعبير MBA خطيًا، فسيظهر الناتج التالي في هذه الحالة:

root@kitploit:~
*** Expression x*x
Error: Input expression may be no linear MBA: x*x

إذا تم استخدام الخيار -z، يتم في النهاية التحقق من أن نتائج التبسيط مساوية للتعبيرات الأصلية باستخدام Z3. لا يؤثر هذا في مخرجات سطر الأوامر طالما أن الخوارزمية تعمل بشكل صحيح وكان تعبير الإدخال عبارة عن MBA خطي:

root@kitploit:~
python3 src/simplify.py "x*x" -z

سيؤدي هذا إلى إظهار الخطأ التالي:

root@kitploit:~
*** Expression x*x
Error in simplification! Simplified expression is not equivalent to original one!

نظرًا لأن الثوابت التي تظهر في تعبيرات مخرجات SiMBA تكون دائمًا غير سالبة، فقد تعتمد على عدد البتات المستخدمة للثوابت وكذلك المتغيرات. هذا العدد هو $64$ افتراضيًا ويمكن ضبطه باستخدام الخيار -b:

root@kitploit:~
python3 src/simplify.py "-x" -b 32

بالنسبة لعدد $b$ من البتات، تقع الثوابت التي تظهر في المخرجات دائمًا بين $0$ و$2^b-1$. وبالتالي فإن الاستدعاء أعلاه سيؤدي إلى الناتج التالي:

root@kitploit:~
*** Expression -x
*** ... simplified to 4294967295*x

تبسيط التعبيرات والتحقق منها من ملف

لتبسيط التعبيرات المخزنة في ملف بمسار path_to_file، استخدم

root@kitploit:~
python3 src/simplify_dataset.py -f path_to_file

أي أنه يجب تحديد الملف باستخدام الخيار -f. يجب أن يحتوي كل سطر من الملف على تعبير معقد بالإضافة إلى تعبير أبسط مكافئ له، مفصولين بفاصلة، على سبيل المثال:

example-expressions.txt:

root@kitploit:~
(x&y)+(x|y), x+y
(x|y)-(~x&y)-(x&~y), x&y
-(a|~b)+(~b)+(a&~b)+b, a^b
2*(s&~t)+2*(s^t)-(s|t)+2*~(s^t)-~t-~(s&t), s

لكل سطر، يتم تبسيط كل من التعبير المعقد والبسيط ومقارنتهما أخيرًا. السبب في تبسيط الأخير هو جعل نتائج التحقق مستقلة عن المسافات البيضاء وترتيب العوامل أو الحدود، وما إلى ذلك.

كما هو الحال مع simplify.py، يمكن تفعيل فحص الخطية بالإضافة إلى فحص صحة التبسيط باستخدام الخيارين -l و**-z**، على التوالي، ويمكن تحديد عدد البتات باستخدام الخيار -b. إذا أراد المرء تشغيل SiMBA على عدد أقصى معين فقط من التعبيرات الموجودة في الملف المحدد، يمكن تحديد هذا العدد الأقصى عبر الخيار -r:

root@kitploit:~
python3 src/simplify_dataset.py -f some_file.txt -r 2

إذا كان some_file.txt يحتوي على التعبيرات المذكورة أعلاه، فسيتم تبسيط أول تعبيرين فقط منها:

root@kitploit:~
Simplify expressions from data/some_file.txt ...
  * total count: 2
  * verified: 2
  * equal: 2
  * average duration: 0.00014788552653044462

في جميع الحالات، يقدم الناتج معلومات حول

  • العدد الإجمالي للتعبيرات في الإدخال،
  • عدد التعبيرات التي يمكن التحقق من تكافؤها مع التعبير الأبسط المقابل باستخدام Z3 بعد التبسيط (ما لم تكن لنتيجة التبسيط نفس تمثيل السلسلة النصية تمامًا)،
  • عدد التعبيرات التي تم تبسيطها إلى نفس التعبير تمامًا مثل التعبير البسيط المقابل، و
  • متوسط زمن التشغيل بالثواني.

يرجى ملاحظة أن التحقق الاختياري من صحة التبسيط باستخدام Z3 يساهم في زمن التشغيل، بينما لا ينطبق ذلك على مقارنة نتائج التبسيط للأزواج المكونة من تعبير معقد وتعبير أبسط.

افتراضيًا، لا تتم طباعة نتائج التبسيط، بل تُعرض هذه الإحصائيات فقط. إذا كانت المعلومات حول نتائج التبسيط مطلوبة، فيمكن استخدام الخيار -v:

root@kitploit:~
python3 src/simplify_dataset.py -f some_file.txt -v

سيتم بعد ذلك عرض الناتج التالي:

root@kitploit:~
Simplify expressions from data/some_file.txt ...

    *** 1 groundtruth x+y, simplified x+y => equal: True, verified: True
    *** 2 groundtruth x&y, simplified x&y => equal: True, verified: True
    *** 3 groundtruth a^b, simplified a^b => equal: True, verified: True
    *** 4 groundtruth s, simplified s => equal: True, verified: True

  * total count: 4
  * verified: 4
  * equal: 4
  * average duration: 0.00016793253598734736

يوفر الخيار الآخر -e إمكانية ترميز مخرجات جميع التعبيرات بواسطة دوال تآلفية $f(x) = ax+b$ بأعداد صحيحة عشوائية $a,b$ بين $1$ و$2^b-1$ إذا كان $b$ هو عدد البتات:

root@kitploit:~
python3 src/simplify_dataset.py -f some_file.txt -v -e

بالطبع تُطبق نفس الدالة على زوج من التعبيرات في نفس السطر. سيعطي هذا ناتجًا مشابهًا لما يلي:

root@kitploit:~
Simplify expressions from data/some_file.txt ...

    *** 1 groundtruth 10623056950310032687+5038261596809828791*x+5038261596809828791*y, simplified 10623056950310032687+5038261596809828791*x+5038261596809828791*y => equal: True, verified: True
    *** 2 groundtruth 15181401701264988765+3962868592131193124*(x&y), simplified 15181401701264988765+3962868592131193124*(x&y) => equal: True, verified: True
    *** 3 groundtruth 6812440940417974076+11894131080657788315*(a^b), simplified 6812440940417974076+11894131080657788315*(a^b) => equal: True, verified: True
    *** 4 groundtruth 4558303267887122851+10271005790757592209*s, simplified 4558303267887122851+10271005790757592209*s => equal: True, verified: True

  * total count: 4
  * verified: 4
  * equal: 4
  * average duration: 0.00019435951253399253

إعادة الإنتاج

لإعادة إنتاج جزء من التجارب المذكورة في الورقة البحثية، يمكن استخدام أي من ملفات مجموعات البيانات الموجودة في الدليل data/. لكل دالة من الدوال التالية $e_1,\ldots, e_5$، يتم توفير مجموعات بيانات من $1,000$ تعبير MBA خطي مكافئ باستخدام $2$ أو $3$ أو $4$ متغيرات:

  • $e_1(x,y) = x+y$
  • $e_2 = 49,374$
  • $e_3(x) = 3,735,936,685, x + 49,374$
  • $e_4(x,y) = 3,735,936,685, (x\mathbin{^\wedge}y) + 49,374$
  • $e_5(x) = 3,735,936,685\cdot \mathord{\sim} x$

بالنسبة لـ $e_1$، يتم توفير مجموعات بيانات إضافية لـ $5$ إلى $7$ متغيرات. تم إنشاء هذه التعبيرات MBA باستخدام خوارزمية تستند إلى الطريقة التي وصفها Zhou et al. في عام 2007 والموصوفة في الورقة البحثية.

يرجى ملاحظة أن مجموعات البيانات هذه تم إنشاؤها لـ $b=64$ بت. بالنسبة لأعداد مختلفة من البتات، لا يمكن ضمان تكافؤها مع $e_i$.

لإعادة إنتاج المزيد من التجارب، نحيل إلى مجموعات البيانات المقدمة من مستودع MBA-Solver ومستودع NeuReduce، على التوالي.

فحص الخطية

يُستخدم الملف check_linear_mba.py بواسطة المُبسِّط، ولكنه يوفر أيضًا واجهته الخاصة، على سبيل المثال:

root@kitploit:~
python3 src/check_linear_mba.py "x+x" "x*x"

يقوم بفحص جميع التعبيرات التي يتم تمريرها عبر وسائط سطر الأوامر. في هذه الحالة سيؤدي إلى الناتج التالي:

root@kitploit:~
*** Expression x+x
*** +++ valid
*** Expression x*x
*** --- not valid

صيغة تعبيرات MBA

عدد المتغيرات غير محدود من الناحية النظرية، لكن زمن التشغيل يزداد بالطبع مع زيادة عدد المتغيرات. لا يوجد قيد صارم على ترميز المتغيرات. يجب أن تبدأ بحرف ويمكن أن تحتوي على أحرف وأرقام وشرطات سفلية. على سبيل المثال، جميع أسماء المتغيرات التالية مقبولة:

  • $a$, $b$, $c$, ..., $x$, $y$, $z$, ...
  • $v0$, $v1$, $v2$, ...
  • $v_0$, $v_1$, $v_2$, ...
  • $X0$, $X1$, $X2$, ...
  • $var0$, $var1$, $var2$, ...
  • $var1a$, $var1b$, $var1c$, ...
  • ...

يتم دعم العوامل التالية، مرتبة حسب أسبقيتها في بايثون:

  • $\mathord{\sim}$, $-$: النفي على مستوى البتات والسالب الأحادي
  • $*$: الضرب
  • $+$, $-$: الجمع والطرح
  • &: العطف (AND)
  • $\mathbin{^\wedge}$: الانفصال الحصري (XOR)
  • $|$: الانفصال الشامل (OR)

يمكن استخدام المسافات البيضاء في تعبيرات الإدخال. على سبيل المثال، يمكن كتابة التعبير "x+y" بدلاً من ذلك كـ "x + y".

يرجى احترام أسبقية العوامل واستخدام الأقواس عند الضرورة! على سبيل المثال، التعبيران $1 + (x|y)$ و$1 + x|y$ غير متكافئين لأن $+$ له أسبقية أعلى من $|$. لاحظ أن الأخير ليس حتى تعبير MBA خطيًا.

التبعيات

محلل SMT Z3 مطلوب

  • بواسطة simplify_dataset.py حيث يتم التحقق من أن التعبيرات المبسطة مكافئة للتعبيرات البسيطة المقابلة، و
  • بواسطة simplify.py إذا تم استخدام التحقق الاختياري من التعبيرات المبسطة. إذا لم يُستخدم هذا الخيار، فلن يتم إصدار أي خطأ حتى لو لم يكن Z3 مثبتًا.

تثبيت Z3:

  • من مستودع Github: https://github.com/Z3Prover/z3، أو
  • على Debian: sudo apt-get install python3-z3

الترخيص

حقوق النشر (c) 2022 Denuvo GmbH، مُصدرة بموجب GPLv3.

الاتصال

  • Benjamin Reichenwallner: benjamin(dot)reichenwallner(at)denuvo(dot)com
  • Peter Meerwald-Stadler: peter(dot)meerwald(at)denuvo(dot)com
تنزيل الأداة