WienerWiener
  • Introduction
  • Compatibility
  • Release Notes
  • Comparison
  • Pricing
  • FAQ
  • Use Cases
  • License
  • Unity Asset vs Standalone
  • Lightweight Obfuscation & Change Detection
  • Mismatch Detection & Debug
  • Localization
  • Versioning
  • Google Sheets Input
  • Excel
  • YAML
  • Settings
  • Data Format
  • ValueOnly Format
  • Startup
  • Samples
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • Introduction
  • Compatibility
  • Release Notes
  • Comparison
  • Pricing
  • FAQ
  • Use Cases
  • License
  • Unity Asset vs Standalone
  • Lightweight Obfuscation & Change Detection
  • Mismatch Detection & Debug
  • Localization
  • Versioning
  • Google Sheets Input
  • Excel
  • YAML
  • Settings
  • Data Format
  • ValueOnly Format
  • Startup
  • Samples
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • Features

    • Lightweight Obfuscation & Change Detection
    • Mismatch Detection & Debug
    • Localization
    • Versioning
    • Google Sheets Input

Lightweight Obfuscation & Change Detection

Security Scope

This feature is not encryption such as AES, and it is not a digital signature. It is a lightweight mechanism for making game Static Game Data less obvious to inspect and for detecting unexpected changes.

Do not place trust boundaries such as secrets, personal data, payment, authentication, or authorization decisions in the client. Manage them on a server.

What It Can Protect

Wiener provides lightweight obfuscation and change detection for these purposes:

  • Make values in a binary harder to read directly
  • Make values harder to locate through a simple text search
  • Detect unexpected changes to obfuscated fields in memory after loading
  • Detect a binary that differs from the generated output by checking it at load time

It does not prevent a determined analyst from recovering values, using a debugger or modification tool, recalculating a checksum, or abusing operations exposed by a legitimate client. The checksum does not provide cryptographic authenticity.

Data Obfuscation

There are two ways to enable obfuscation. Obfuscating more fields increases memory use and processing on access, so limit it to fields that need it.

Table-wide: Set encryption: True in the YAML header to obfuscate every field in fields.

# Table header (obfuscate all fields)
encryption: True

Per-field: Set encryption: True on an individual field to obfuscate only that field.

fields:
  - key: DropRate
    name: drop_rate
    type: UInt
    encryption: True   # obfuscate this field only
  - key: Name
    name: name
    type: String
    # encryption omitted: normal field

Supported types: Byte, Short, UShort, Int, UInt, Long, ULong, Float, Double, String

File Change Detection

LoadBasicPack checks the binary at load time and returns an error when its contents differ from the generated output. This is intended to detect corruption or unexpected changes; it is not a substitute for a signature or authenticated encryption.

See Consistency Checks for details.

In-Memory Change Detection

Register a delegate with SetFalsifyDelegate to receive a notification when an obfuscated field changes unexpectedly after loading.

WienerManager.SetFalsifyDelegate((fieldName) => {
    Debug.LogError($"Obfuscated field change detected: {fieldName}");
    // Apply your project's logging or response policy.
});

This notification does not prevent unauthorized behavior by itself. Validate important game-state and payment decisions on a server as well.

Detailed Documentation

  • Per-field settings: yaml-fields — encryption
  • Header settings: yaml-header — encryption
  • C# API: C# Format
Last Updated:: 8/9/26, 11:18 PM
Next
Mismatch Detection & Debug