
إعادة البناء القائمة على المعاملات للعمليات الحسابية — مُبسِّط تعبيرات الحساب المختلط البولي-الحسابي (MBA) لإزالة التشويش
إعادة بناء حسابية قائمة على المعاملات — مُبسِّط تعبيرات الحساب المنطقي المختلط (Mixed Boolean-Arithmetic).
يقوم CoBRA بإزالة التعتيم (deobfuscation) عن التعبيرات التي تخلط بين العمليات الحسابية (+, -, *) والعمليات المنطقية على البتات (&, |, ^, ~) وعمليات الإزاحة (<<, >>) — وهي تقنية شائعة الاستخدام في تعتيم البرمجيات.
$ cobra-cli --mba "(x&y)+(x|y)"
x + y
$ cobra-cli --mba "((a^b)|(a^c)) + 65469 * ~((a&(b&c))) + 65470 * (a&(b&c))" --bitwidth 16
67 + (a | b | c)
$ cobra-cli --mba "((a^b)&c) | ((a&b)^c)"
c ^ a & b
$ cobra-cli --mba "(x&0xFF)+(x&0xFF00)" --bitwidth 16
x
$ cobra-cli --mba "(x ^ 0x10) + 2 * (x & 0x10)"
16 + x
$ cobra-cli --mba "x << 3"
8 * x
$ cobra-cli --mba "~x"
~x
$ cobra-cli --mba "(x^y)*(x&y) + 3*(x|y)"
(x ^ y) * (x & y) + 3 * (x | y)
$ cobra-cli --mba '-357*(x&~y)*(x&y)+102*(x&~y)*(x&~y)+374*(x&~y)*~(x^y)
-306*(x&~y)*~(x|y)-17*(x&~y)*~(x|~y)-105*~(x|~y)*(x&y)+30*~(x|~y)*(x&~y)
+110*~(x|~y)*~(x^y)-90*~(x|~y)*~(x|y)-5*~(x|~y)*~(x|~y)+34*(x&~y)*~x
-85*(x&~y)*~y+10*~(x|~y)*~x-25*~(x|~y)*~y'
22 * (x & y) + -17 * x + -5 * y
يستخدم CoBRA منسّقًا قائمًا على قائمة عمل (worklist) لتبسيط التعبيرات. يدخل كل تعبير إلى قائمة العمل كعنصر عمل مُعلَّم بنوع حالة. يختار المجدول (scheduler) المرحلة التالية بناءً على حالة العنصر، والاعتماديات المسبقة، وذاكرة تخزين مؤقتة للمحاولات تمنع العمل المتكرر.
تُنظَّم 36 مرحلةً منفصلة في عائلات: معالجة شجرة التحليل (AST)، والتقنيات القائمة على التوقيع، والتقنيات شبه الخطية، والتفكيك، والرفع. بعض المراحل تُطلق بدائل محلية أو حلولًا فرعية تُحسم عبر مجموعات تنافسية (competition groups)؛ وخارج هذه المجموعات، تعيد قائمة العمل أول مرشح علوي مُتحققٍ منه بالكامل. تُتحقق جميع النتائج عبر فحص عشوائي للمدخلات (الافتراضي) أو عبر إثبات تكافؤ باستخدام Z3 (--verify).
Input Expression
|
[Worklist Scheduler]
|
Work items flow through state kinds:
|
kFoldedAst ──> AST processing passes
| (classify, lower, rewrite)
|
+──> kSignatureState ──> Signature techniques
| (pattern match, CoB, ANF, polynomial recovery)
|
+──> kSemilinearNormalizedIr ──> Semilinear techniques
| (normalize, recover structure, refine, reconstruct)
|
+──> kCoreCandidate / kRemainderState ──> Decomposition
| (extract core, classify residual, solve)
|
+──> kLiftedSkeleton ──> Lifting
| (virtual variable substitution, outer solve)
|
+──> kCandidateExpr ──> Verification
(spot-check or Z3 proof)
|
Simplified Expression
التقنيات القائمة على التوقيع تقيّم التعبير على جميع المدخلات المنطقية للحصول على متجه توقيع. يحوّل فراشي CoB (butterfly) لاستعادة معاملات أساس جداء AND. وتتعامل مطابقة الأنماط، وANF، واستعادة الحدوديات مع مستويات تعقيد مختلفة.
التقنيات شبه الخطية تتعامل مع التعبيرات ذات الأقنعة الثابتة (مثل x & 0xFF). يُفكَّك التعبير إلى ذرّات bitwise موزونة، ثم يعمل استرداد البنية وتحسين الحدود على تبسيط التمثيل الوسيط، وتُعيد تجميع OR المقسمة حسب البتات بناء النتيجة النهائية.
التفكيك يستهدف التعبيرات المختلطة التي تحتوي على جداءات من تعبيرات فرعية bitwise. يُستخرج نواة حدودية، ثم تُصنَّف البقايا وتُحل (حدودية، أو منطقية-صفرية/شبحية، أو قالب احتياطي).
الرفع (Lifting) يستبدل التعبيرات الفرعية المعقدة بمتغيرات افتراضية، ويحل الهيكل الخارجي المبسّط، ثم يعيد التعويض.
k * f(vars) + c مع تفكيك شانون للتعبيرات المنطقية ذات 4-5 متغيرات<< يُحوَّل إلى ضرب، و>> يُبسَّط عبر التقنيات شبه الخطيةراجع BUILD.md للحصول على التفاصيل الكاملة بما في ذلك الاعتماديات الاختيارية (LLVM، Z3).
# Build dependencies (Abseil, Highway; optionally GoogleTest, LLVM, Z3)
cmake -S dependencies -B build-deps -DCMAKE_BUILD_TYPE=Release
cmake --build build-deps
# Build CoBRA
cmake -S . -B build \
-DCMAKE_PREFIX_PATH=$(pwd)/build-deps/install \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
# (Optional) Build and run tests
cmake -S dependencies -B build-deps -DCMAKE_BUILD_TYPE=Release -DCOBRA_BUILD_TESTS=ON
cmake --build build-deps
cmake -S . -B build \
-DCMAKE_PREFIX_PATH=$(pwd)/build-deps/install \
-DCMAKE_BUILD_TYPE=Release \
-DCOBRA_BUILD_TESTS=ON
cmake --build build
ctest --test-dir build --output-on-failure
cmake -S . -B build \
-DCMAKE_PREFIX_PATH=$(pwd)/build-deps/install \
-DCOBRA_BUILD_LLVM_PASS=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
# Basic simplification
cobra-cli --mba "(x&y)+(x|y)"
# Specify bitwidth
cobra-cli --mba "(x&0xFF)+(x&0xFF00)" --bitwidth 16
# Enable Z3 equivalence verification
cobra-cli --mba "(a^b)+(a&b)+(a&b)" --verify
# Verbose output (show intermediate pipeline steps)
cobra-cli --mba "(x&y)+(x|y)" --verbose
lib/core/ Core simplification engine (~50 source files)
Orchestrator Worklist scheduler, state machine, main simplification loop
OrchestratorPasses 39-pass registry with DAG-aware scheduling
CompetitionGroup Multi-technique racing and winner selection
ContinuationTypes Deferred recombination data for pass composition
JoinState Multi-operand join tracking for structural rewrites
SignatureSimplifier Signature-based techniques (CoB, pattern matching, ANF)
SignatureVector Evaluate expression on {0,1}^n inputs
AuxVarEliminator Reduce variable count by detecting cancellations
PatternMatcher Recognize bitwise patterns (2-var/3-var tables, scaled)
CoeffInterpolator Butterfly interpolation for coefficient recovery
CoBExprBuilder Reconstruct expressions from CoB coefficients
AnfTransform Algebraic Normal Form conversion
AnfCleanup Absorption, factoring, OR recognition
CoefficientSplitter Separate bitwise vs. arithmetic contributions
ArithmeticLowering Lower arithmetic fragment to polynomial IR
PolyNormalizer Canonical form for polynomial expressions
SingletonPowerRecovery Detect x^k terms via finite differences
DecompositionEngine Extract-solve loop: polynomial core + residual solving
GhostBasis Ghost primitive library (mul_sub_and, mul3_sub_and3)
GhostResidualSolver Boolean-null classification and ghost residual solving
WeightedPolyFit 2-adic weighted linear solve for polynomial quotients
MixedProductRewriter Expand bitwise products into linear sums
TemplateDecomposer Bounded template matching for mixed expressions
ProductIdentityRecoverer Recover product-of-sums identities
SemilinearNormalizer Decompose into weighted bitwise atoms
SemilinearSignature Per-bit signature evaluation and linear shortcut
StructureRecovery XOR recovery, mask elimination, term coalescing
TermRefiner Dead-bit mask reduction, same-coefficient merge
BitPartitioner Group bit positions by semantic profile
MaskedAtomReconstructor Reassemble with OR-rewrite for disjoint masks
Evaluator Compiled expression evaluator
lib/llvm/ LLVM pass plugin (CobraPass, MBADetector, IRReconstructor)
lib/verify/ Z3-based equivalence verification
include/cobra/ Public headers
tools/cobra-cli/ CLI frontend and expression parser
test/ 1195 tests across ~63 test files
يحتوي CoBRA على 1195 اختبارًا تغطي اختبارات الوحدات والتكامل ومعايير مجموعات البيانات:
# Run all tests
ctest --test-dir build --output-on-failure
# Run a specific test suite
ctest --test-dir build -R test_simplifier --output-on-failure
# Run with verbose output
ctest --test-dir build -V
تتحقق معايير مجموعات البيانات من التعبيرات المعتّمة الواقعية من مصادر مستقلة متعددة. راجع DATASETS.md للتقرير الكامل للمعايير — 75,126 تعبيرًا عبر 35 ملف بيانات من 7 مصادر مستقلة.
{0,1} ولكنها غير صحيحة عند العرض الكامل (أساس جداء AND مقابل الضرب الحسابي). تُكتشف هذه الحالات وتُبلَّغ بشكل صحيح كفشل في التحقق.شكرًا لـ Bas Zweers وفريق Back Engineering على الإلهام والتوجيه الذي ساعد في تشكيل هذا المشروع. يُنصح بمشاهدة: محاضرتهم re//verse 2026 بعنوان Deobfuscation of a Real World Binary Obfuscator.
شكر إضافي لـ Jack Royer و Matteo Favaro و Arnau Gàmez والمساهمين المجهولين الآخرين على المراجعة والاختبار المستمرين.
Apache-2.0. تُعاد توزيع مجموعات بيانات الاختبار في test/datasets/ من مشاريع بحثية تابعة لجهات خارجية بموجب تراخيصها الأصلية (بشكل أساسي GPL-3.0). راجع THIRD_PARTY_LICENSES للتفاصيل.
| الخيار | الافتراضي | الوصف |
|---|
--mba <expr> | التعبير المراد تبسيطه | |
--bitwidth <n> | 64 | عرض الحساب المعياري (1-64) |
--max-vars <n> | 16 | أقصى عدد للمتغيرات |
--verify | off | فحص تكافؤ باستخدام Z3 |
--verbose | off | طباعة تفاصيل خط الأنابيب الداخلية |