WienerWiener
  • はじめに
  • 動作環境・対応範囲
  • リリースノート
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • はじめに
  • 動作環境・対応範囲
  • リリースノート
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • 機能

    • 軽量難読化・変更検知
    • 整合性検知・デバッグ
    • ローカライズ
    • バージョン管理
    • Google Sheets入力

軽量難読化・変更検知

セキュリティ上の位置付け

本機能は AES などの暗号化や電子署名ではありません。ゲームの Static Game Data をそのまま読み取りにくくし、想定外の変更に気付きやすくするための軽量な仕組みです。

秘密情報、個人情報、課金・認証・権限判定などの信頼境界はクライアントに置かず、サーバー側で管理してください。

保護できる範囲

Wiener は、次の用途に使える軽量な難読化・変更検知を提供します。

  • バイナリ内の値を直接読み取りにくくする
  • テキスト検索だけでは値を見つけにくくする
  • ロード後、難読化対象フィールドの値が想定外に変化したことを検知する
  • ロード時に、出力時と異なるバイナリをチェックサムで検知する

一方、解析者による復元、デバッガーや改造ツールによる読み取り、チェックサムの再計算、正規クライアントを経由した不正操作は防止できません。チェックサムは暗号学的な真正性を保証するものではありません。

データ難読化

難読化の指定方法は2種類あります。対象が増えるほどメモリ使用量が増え、アクセス時の処理も増えるため、必要なフィールドに限定してください。

ヘッダーで一括指定: encryption: True を設定すると、fields の全フィールドを難読化します。

# テーブルヘッダー(全フィールドを難読化)
encryption: True

フィールド単位で指定: 各フィールドに 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: C#フォーマット
最終更新:: 2026/08/09 23:18
Next
整合性検知・デバッグ