簡易難読化・改ざん検知
本機能について
本機能はAES等の強暗号化ではありません。マスターデータのカジュアルな解析・改ざんへの保護を目的とした簡易難読化です。
本格的なセキュリティが必要なデータ(課金情報・アカウント認証等)はサーバー側での管理を推奨します。
目的と保護範囲
Wienerの難読化・改ざん検知機能は、マスターデータのカジュアルな解析・改変への保護を目的としています。
- バイナリエディタでの値の読み取りを防ぐ
- テキスト検索による値露出を防ぐ
- ロード後のメモリ上への不正な書き換えを検知する
注意: 個人情報など高度なセキュリティが必要なデータはサーバー側で管理してください。Wienerの簡易難読化はゲームマスターデータの簡易保護に特化した設計です。
データ難読化
難読化の指定方法は2種類あります。
この設定は、主にロード後のメモリ改ざん検知と、値の直接的な読み取りを難しくするためのものです。難読化対象が増えるほどメモリ消費量が増え、アクセスごとにわずかにCPUを消費します。全フィールドを一律に難読化するのではなく、改ざん検知や保護が必要なデータだけに指定することを推奨します。
ヘッダーで一括指定: encryption: True を設定すると、fields の全てのキーを難読化します。
# テーブルヘッダー(全フィールドを難読化)
encryption: True
フィールド単位で指定: fields の各キーに encryption: True を設定すると、そのキーのみ難読化します。
fields:
- key: DropRate
name: drop_rate
type: UInt
encryption: True # このフィールドのみ難読化
- key: Name
name: name
type: String
# encryption 未指定 → 平文のまま
対応する型: Byte, Short, UShort, Int, UInt, Long, ULong, Float, Double, String
ファイル改ざん検知
ロード時(LoadBasicPack)にハッシュ照合が行われ、バイナリが書き換えられていた場合は即エラーを返します。
詳細は 整合性検知 を参照してください。
メモリ改ざん検知
SetFalsifyDelegate でデリゲートを登録しておくと、ロード後のメモリ上で難読化フィールドへの不正な書き換えを検知できます。
WienerManager.SetFalsifyDelegate((fieldName) => {
Debug.LogError($"メモリ改ざん検知: {fieldName}");
// クラッシュレポートへの送信や強制終了などを行う
});
詳細ドキュメント
- フィールド単位の設定: yaml-fields — encryption
- ヘッダー設定: yaml-header — encryption
- C# API: format-csharp