
Coefficient-Based Reconstruction of Arithmetic — 混合ブール算術(Mixed Boolean-Arithmetic)式の簡約化ツール。
CoBRAは、算術演算子(+, -, *)とビット演算子(&, |, ^, ~)、シフト演算子(<<, >>)を混在させた式の難読化を解除します。これはソフトウェア難読化で一般的に使われる手法です。
$ 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は、ワークリストベースのオーケストレータを使用して式を簡約化します。各入力は、状態種別(state kind)がタグ付けされた作業項目としてワークリストに入ります。スケジューラは、項目の状態、前提となる依存関係、および冗長な作業を防ぐ試行キャッシュに基づいて、次に実行するパスを選択します。
36の個別パスは、AST処理、シグネチャベース手法、半線形手法、分解、リフティングというファミリに分類されます。一部のパスは、競合グループによって解決される局所的な代替案や子の解決をフォークします。これらのグループの外では、ワークリストは最初に完全に検証されたトップレベルの候補を返します。すべての結果は、ランダム入力のスポットチェック(デフォルト)または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バタフライ変換により、AND積基底の係数を復元します。パターンマッチング、ANF、多項式復元は、それぞれ異なる複雑度レベルを処理します。
半線形手法は、定数マスクを持つ式(例: x & 0xFF)を処理します。式を重み付きビット単位アトムに分解し、構造復元と項の精密化によって中間表現を簡約化した後、ビット分割ORアセンブリで最終結果を再構築します。
分解は、ビット単位部分式の積を持つ混合式を対象とします。多項式コアを抽出し、残差を分類して解決します(多項式、ブールヌル/ゴースト、またはテンプレートフォールバック)。
リフティングは、複雑な部分式を仮想変数に置き換え、簡約化された外側の骨格を解決してから、元に戻します。
k * f(vars) + c とシャノン分解による4〜5変数ブール式の処理<< は乗算にデシュガーし、>> は半線形手法で簡約化詳細(LLVM、Z3などのオプション依存関係を含む)はBUILD.mdを参照してください。
# 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を参照してください — 7つの独立したソースからの35のデータセットファイルにわたる75,126の式。
{0,1}入力では正しいが全ビット幅では正しくないCoB候補が生成されます(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 | パイプライン内部を表示 |