データ難読化¶
ソース: lib/Transforms/Data/
| フラグ | パス | 効果 |
|---|---|---|
-kagura-str |
StringEncryption | ナロー文字列リテラルを XOR 暗号化、初使用時に遅延復号 |
-kagura-str-aes |
StringEncryptionAES | AES-128-CTR 文字列暗号化 (ランタイム必要) |
-kagura-string-split |
StringSplit | 長い文字列リテラル (16 バイト以上) を複数の小さなグローバルに分割し、初使用時に実行時に再結合 |
-kagura-wstr |
WideStringEncryption | ワイド文字列 (wchar_t / char16_t / char32_t) と CFString バッファを XOR 暗号化 |
-kagura-co |
ConstantObfuscation | 整数定数を MBA 式で置換 |
-kagura-sub |
Substitution | 算術 / ビット演算を等価な MBA に置換 |
-kagura-genc |
GlobalEncryption | プライベートな整数グローバルを暗号化、ロード箇所にインライン XOR |
-kagura-mvo |
MemoryValueObfuscation | alloca された整数ローカルをストア・ロードのたびに XOR 暗号化 |
-kagura-pe |
PointerEncryption | alloca されたポインタ変数を XOR 暗号化、メモリダンプ解析を阻止 |
-kagura-cse-break |
CSEBreak | 共有された SSA 式を複製し、デコンパイラが CSE 復元によって再度まとめられないようにする |
kagura-str と kagura-sub の Before/After は Before / After 例 を参照。
-kagura-string-aggressive(JSON "string": {"aggressive": true})で、str・str_aes・wstr の対象を短い文字列・書式文字列・グローバル初期化子からの参照にも広げられます。起動時に復号し、アドレスが変わらない領域に保持します。既定は従来の保守的な動作です。str は str_aes より先に実行されるため、ナロー文字列を AES に任せる場合は str を無効化してください。対象範囲・初期化順序・メモリ保持の注意点は 設定 を参照してください。
ゲーム実行時の値 (HP, 通貨等) を C++ レベルで守るには ゲーム保護 を参照 — Protected<T> は実行時のシャドウコピー整合性チェックを追加することで kagura-mvo を補完します。
平文の保持時間¶
-kagura-string-scoped / "string": {"scoped": true} で、条件に合う XOR/AES
文字列を呼び出しごとのスタックへ復号し、直後に volatile な消去を行います。
対象外は永続領域を維持し、ワイド文字列は対象外です。
条件・同時実行・消去の限界は 設定 を参照してください。