コンテンツにスキップ

制御フロー難読化

ソース: lib/Transforms/CFG/

フラグ パス 効果
-kagura-fla ControlFlowFlattening CFG を switch ベースの状態機械に変換 (Wasm ではスキップ — 非構造化 CFG を要求するため)
-kagura-bcf BogusControlFlow MBA 不透明述語でガードされた死ブロックを注入
-kagura-ibr IndirectBranch 直接呼び出しを関数ポインタグローバルからのロードに置換
-kagura-ci CallIndirection 外部呼び出しを実行時解決のサンクテーブルへルーティング
-kagura-lt LoopTransform 偽の死カウンタと不透明な不変分岐を追加
-kagura-fsplit FunctionSplit 内部 BB を抽出してアウトラインされたヘルパー関数にする
-kagura-bbs BasicBlockSplitting 大きな BB をランダムに分割し CFG 複雑度を増加
-kagura-bbr BasicBlockReordering BB レイアウトをシャッフルし線形ディスアセンブラを混乱
-kagura-dci DeadCodeInsertion 到達不能なジャンクブロックを挿入し静的解析を誤誘導
-kagura-elt EncryptedLookupTable switch 文を XOR 暗号化されたディスパッチテーブルに変換
-kagura-vtp VTableProtection C++ RTTI の typeinfo 名 (_ZTS*) を難読化、vtable メタデータを記録

変換後の IR の見え方は Before / After 例 を参照。