OZero Security
APIリファレンス

APIリファレンス

OZero SDKのすべての公開クラスとメソッドの完全なリファレンスです。特に記載がない限り、すべてのクラスはOZeroSDK.Security名前空間に属します。

OZeroSecurityManager OZeroSDK.Security

すべてのアクティブなセキュリティモジュールを管理する中央シングルトンです。DontDestroyOnLoadによりシーン遷移時も維持されます。静的なInstanceプロパティからアクセスしてください。OZeroBootstrapperがランタイム起動時に[RuntimeInitializeOnLoadMethod]経由で自動生成します — 手動でインスタンス化しないでください。

プロパティ

名前 説明
Instance OZeroSecurityManager 静的シングルトンアクセサ。アクティブなインスタンスを返します。

メソッド

void RegisterUserCallback(DelegateSecurityViolation callback)

ユーザーチェーンにサードパーティコールバックを登録します。内蔵デフォルトハンドラは別チェーンで動作するため、ユーザーコールバックを解除しても無効化できません。コールバックは、モジュール種別、公開 abort code、メッセージキー、安全な診断メッセージ、現在のポリシーでアプリを終了するかを含む OZeroSecurityEvent を受け取ります。

void UnregisterUserCallback(DelegateSecurityViolation callback)

以前に登録したユーザーコールバックを削除します。メモリリーク防止のため、OnDisableまたはOnDestroyで必ず呼び出してください。

デリゲート

delegate void DelegateSecurityViolation(OZeroSecurityEvent evt)

RegisterUserCallback で使うコールバックシグネチャです。独自 UI、ログ、保存フローの判断には evt.Typeevt.AbortCodeHexevt.MessageKeyevt.Messageevt.WillAbort を参照してください。

サンプルコード

using OZeroSDK.Security;
using UnityEngine;

public class MySecurityListener : MonoBehaviour
{
    void OnEnable()
        => OZeroSecurityManager.Instance.RegisterUserCallback(OnThreat);

    void OnDisable()
        => OZeroSecurityManager.Instance.UnregisterUserCallback(OnThreat);

    void OnThreat(OZeroSecurityEvent evt)
        => Debug.Log(
            $"Threat={evt.Type}, Code={evt.AbortCodeHex}, Message={evt.Message}");
}

OZeroSecurityEvent class

RegisterUserCallback に渡される顧客向けの違反イベント payload です。内部検出の詳細ではなく、安定した安全な診断情報だけを公開します。

名前 説明
TypeModulationType違反を発生させたセキュリティモジュールです。
AbortCodeOZeroAbortCode安定した公開 abort code カテゴリです。
AbortCodeValueintサーバーログで使いやすい数値コードです。
AbortCodeHexstring0x0C のような16進文字列です。
MessageKeystringローカライズや analytics グルーピングに使える安定した英語メッセージキーです。
Messagestring顧客に表示可能な安全な英語診断メッセージです。
WillAbortboolコールバック返却後、または grace timer 満了後に現在の応答ポリシーがアプリを終了する場合 true です。

ModulationType enum

どのセキュリティモジュールが警告を発生させたかを示します。OZeroSecurityEvent.Type として取得できます。

説明
MemoryModulation Secure Type変数が不審な方法でアクセスされた
SpeedHack スピードハックまたは時間操作を検知
TimeHack システムクロックの異常を検知(逆行、NTP不一致)
Injection メモリインジェクションツール(Fridaなど)または不正DLLを検知
PhysicsHack 不可能な位置変化を検知 (OZeroPhysicsHackDetector により発火 — 個々のプレイヤーオブジェクトに直接コンポーネントをアタッチ; Bootstrapper による自動生成は行われません)
DeviceBindingModulation セーブデータがバインドされたデバイスと異なるデバイスで読み込まれた
InstallSource アプリが公認ストア以外からインストールされた
BuildIntegrity アセンブリハッシュ不一致、デバッガー接続、またはプラットフォームチェック失敗
EnvironmentModulation エミュレーターまたは非標準ランタイム環境を検知
SteamAntiPiracy Steam の所有権またはチケット検証に失敗した場合に発生します。

OZeroBootstrapper OZeroSDK.Security

ゼロ配線の自動ブートストラップエントリポイントです。このクラスを直接呼び出す必要はありません。SDKをUnityの起動フローへ接続し、検証済みのセキュリティ設定を読み込み、ゲーム開始前に有効なディテクターを自動で準備します。利用可能な場合、Nativeランタイム保護もここで初期化されます。

公開APIなし — 呼び出し側でこの型をインスタンス化したり継承したり参照したりしないでください。サポートされる連携サーフェスはOZeroSecurityConfigアセットのみです。

OZeroSecurityConfigRuntime OZeroSDK.Security

保護されたビルド時セキュリティ設定のランタイムローダーです。パッケージされた設定を検証し、インメモリのOZeroSecurityConfigスナップショットを準備し、検証失敗時は設定された脅威対応ポリシーを適用します。

プロパティ

名前 説明
Current OZeroSecurityConfig ブロブからハイドレートされた設定スナップショット。初回アクセス時にEnsureLoaded()を呼び出します。プレイヤービルドではOZeroSecurityConfig.Instanceがこのプロパティ経由でプロキシされます。

メソッド

static void EnsureLoaded()

冪等なローダー — 繰り返し呼び出しても安全です。初回アクセスでパッケージ設定を検証・読み込み、以降は同じスナップショットを再利用します。失敗時の処理はグローバル脅威対応ポリシーに従います。

この型は内部ローダーです。サポートされる連携面はOZeroSecurityConfigとUnityエディターウィンドウです。

OZero Secure Variables OZeroSDK.Security

プリミティブ型の暗号化されたドロップイン代替品です。値はNative C++ヒープにのみ保存されOZero proprietary cipherで暗号化されます。フレームごとに48バイトのXORマスクが追加適用されるため、メモリスキャナーにはノイズしか見えません。すべての算術演算子と暗黙的な型変換がサポートされています — 型名の変更だけが必要です。

対応型一覧

クラス 置き換え対象
OZeroSV_Intint
OZeroSV_Int64long
OZeroSV_UIntuint
OZeroSV_UInt64ulong
OZeroSV_Shortshort
OZeroSV_UShortushort
OZeroSV_Bytebyte
OZeroSV_Floatfloat
OZeroSV_Doubledouble
OZeroSV_Decimaldecimal
OZeroSV_Boolbool
OZeroSV_Stringstring
OZeroSV_Vector2Vector2
OZeroSV_Vector3Vector3
OZeroSV_Bufferbyte[]

対応演算子

数値型(Int、Int64、UInt、UInt64、Short、UShort、Byte、Float、Double、Decimal)はすべての算術(+ - * / %)、比較(== != < > <= >=)、複合代入(+= -= *= /=)、インクリメント/デクリメント(++ --)演算子と、対応するプリミティブ型との暗黙的変換をサポートします。Vector2・Vector3は算術および等価演算子をサポートします。Boolは等価演算子のみサポートします。Stringは==!=+をサポートします。Bufferはインデックス演算子による生のバイト配列アクセスを提供します。

Secure TypesはGCアロケーションがゼロです。暗号化はstackallocとネイティブアトミックカウンターで実行されるため、フレームごとに何千回も呼ばれるホットパスでも安全に使用できます。

OZeroSafePlayerPrefs OZeroSDK.Security

UnityのPlayerPrefsの暗号化されたドロップイン代替品です。キー名はmessage authenticationでハッシュされ、値はkey-derivation functionデバイスバインドキー(10万回反復)を使用したOZero proprietary cipherで暗号化されます。デバイスのレジストリ(Windows)や設定plist(iOS)を参照しても保存データは読めません。

メソッド

static void SetInt(string key, int value)
static int GetInt(string key, int defaultValue = 0)
static void SetFloat(string key, float value)
static float GetFloat(string key, float defaultValue = 0f)
static void SetString(string key, string value)
static string GetString(string key, string defaultValue = "")
static void SetInt64(string key, long value)
static long GetInt64(string key, long defaultValue = 0L)
static void SetDouble(string key, double value)
static double GetDouble(string key, double defaultValue = 0.0)
static void SetBool(string key, bool value)
static bool GetBool(string key, bool defaultValue = false)
static bool HasKey(string key)
static void DeleteKey(string key)
static void DeleteAll()
static void Save()

すべてのメソッドはPlayerPrefsと機能的に同一です。マイグレーション手順は不要 — クラス名を置き換えるだけです。

OZeroSafePlayerPrefsで書き込まれたデータは標準のPlayerPrefsと互換性がありません。両者を切り替えると既存データが読めなくなります。

OZeroSV_File OZeroSDK.Security

組み込みの整合性検証とともにファイルを暗号化/復号します。キーはアプリレベル(デバイス非バインド)のためSteamクラウドセーブと互換性があります。読み込み時に整合性検証が走り、改ざんされたファイルは破損データを黙って返すのではなく例外を発生させます。

暗号化されたファイルには44バイトのオーバーヘッド(認証ヘッダ)があります。ファイルの先頭に付加されるため、ペイロードはオフセット44から始まります。

メソッド

static void WriteAllText(string path, string contents)

contentsを暗号化し、保護されたペイロード(ヘッダ + 暗号文 + 認証タグ)をpathに書き込みます。ディレクトリは事前に存在している必要があります。

static string ReadAllText(string path)

pathのファイルを読み込み、整合性を検証してから復号された文字列を返します。ファイルが改ざんされている場合InvalidDataExceptionをスローします。

static void WriteAllBytes(string path, byte[] bytes)

生のバイト配列を暗号化してpathに書き込みます。

static byte[] ReadAllBytes(string path)

WriteAllBytesで書き込まれたファイルを読み込み復号します。返す前に整合性タグを検証します。

サンプルコード

using OZeroSDK.Security;

string path = Application.persistentDataPath + "/save.json";
string json = JsonUtility.ToJson(saveData);

// Write (encrypts automatically)
OZeroSV_File.WriteAllText(path, json);

// Read (decrypts + integrity check)
try
{
    string loaded = OZeroSV_File.ReadAllText(path);
    saveData = JsonUtility.FromJson<SaveData>(loaded);
}
catch (System.IO.InvalidDataException)
{
    // File was tampered — handle accordingly
    Debug.LogError("Save file integrity check failed.");
}

OZeroBuildIntegrityValidator OZeroSDK.Security

ビルド改ざん、デバッガー/タイミング異常、プラットフォームネイティブ整合性チェック、任意の Pro サーバー attestation、OZero Managed Verification を行うランタイム検証コンポーネントです。Build Integrity が OZeroSecurityConfig で有効な場合、OZeroBootstrapper が自動生成します。

検査内容

検査 説明
Assembly / Manifest対応ビルドターゲットで、生成された整合性マニフェストと managed assembly の状態を検証します。
Debugger / Timing接続されたデバッガー、異常なタイミングギャップ、ブレークポイントのような停止を検出し、一般的なフォーカス喪失の誤検知は抑制します。
Platform Native有効な場合、Android パッケージ/署名、iOS jailbreak、デスクトップランタイム状態などのプラットフォーム別チェックを実行します。
Pro AttestationPro サーバー attestation が有効な場合、ローカル検査通過後にサーバー発行の attestation トークンを要求します。Managed Verification が有効な場合は、同じトークンで OZero の委任 verdict も確認します。

公開プロパティ

名前 説明
InstanceOZeroBuildIntegrityValidatorモジュールが作成されている場合の現在の validator インスタンスです。
LastValidationResultbool?直近のローカル検証結果です。初回実行前は null です。
IsValidatingbool検証実行中は true です。
IsIntegrityVerifiedbool直近の有効なローカル検査が通過した後 true になります。
AttestationTokenOZeroBuildAttestationToken直近の Pro attestation トークンです。サーバー attestation が成功または失敗するまでは null です。トークンには再利用/監査追跡用の一意な token ID が含まれます。

イベントとメソッド

UnityEvent OnValidationPassed { get; }

有効なすべてのローカル検査が通過したときに呼び出されます。

UnityEvent OnValidationFailed { get; }

有効なローカル検査または Pro attestation がビルドを拒否したときに呼び出されます。

UnityEvent OnAttestationPassed { get; }

Pro サーバー attestation が成功し、AttestationToken に有効なトークンが入った後に呼び出されます。

void Validate()

手動検証を開始します。通常はダッシュボードの起動時/定期検証設定を使用します。

OZeroSpeedHackDetector OZeroSDK.Security

5つの独立した検知シグナルを使用してスピードハックと時間操作を検知します。シグナルが互いに確認し合った場合のみ脅威を報告し、誤検知を減らします。

検知シグナル

シグナル 説明
TimeScale UnityのTime.timeScaleの不正な変更を監視
API Clock OS時間APIをネイティブバックグラウンドタイマーと比較
Thread Drift Unityランタイム時間と独立したNativeタイミングソース間のドリフトを測定
Time Backward システム時間の逆行を検知
NTP 任意 — 絶対時間検証のためNTPサーバーとクロスチェック(ネットワーク必要)

検知はModulationType.SpeedHackまたはModulationType.TimeHackOZeroSecurityManagerコールバックを通じて発生します。OZeroSecurityConfigで設定します。

OZeroInjectionDetector OZeroSDK.Security

異常なランタイムモジュール、フック、デバッガー、信頼モジュールポリシーのシグナルを観察します。周期チェックは可能な場合Jitterスケジューリングを使用し、予測しやすいスキャンタイミングを減らします。

検知対象

Runtime module 予期しないモジュールまたはフック関連のランタイムシグナル
Debugger デバッガーまたはトレーサー接続シグナル
Memory map 疑わしいランタイムメモリまたはモジュール配置シグナル
Illegal DLL プロセスにロードされた不正な管理アセンブリ(Windows/Unity Editor)

検知はModulationType.InjectionOZeroSecurityManagerコールバックを通じて発生します。

OZeroSecurityConfig ScriptableObject

グローバルセキュリティ設定を保存するScriptableObjectアセットです。エディターで作成すると、ビルドパイプラインがプレイヤービルド向けの保護されたランタイム設定としてパッケージします。実際に適用される設定はOZeroSecurityConfig.Instanceから参照します。

フィールド

フィールドはネストされた設定クラス(ResponseIntegrityInstallSourceDeviceBindingSpeedHackInjection)にグループ化されており、OZeroSecurityConfig.Instanceの同名プロパティでアクセスします。よく調整されるフィールドを以下に列挙しています — 全項目はアセットのインスペクターツールチップを参照してください。

フィールド デフォルト 説明
— トップレベル —
developerSecret string "" OZeroSV_FileOZeroSafePlayerPrefsのkey-derivation functionキー導出に使用するパスフレーズ。ゲームごとに固有である必要があり、リリース後は変更してはなりません。
enableLog bool true SDKのデバッグログ有効化(リリースビルドではOZeroSecLogにより常に削除されます)。
— Response —
response.forceQuitOnDetection bool true 脅威時に強制終了(OZeroInternalFallbackReceiverがネイティブOZ_AbortProcessで強制)。ユーザーコールバックチェーンのみで処理したい場合は無効化してください。
— Integrity —
integrity.useIntegrity bool true ビルド整合性モジュールのマスタースイッチ。
integrity.validateOnStartup bool true Start()で完全な整合性チェックを実行します。
integrity.periodicCheckInterval float 120 定期的な再検証実行間隔(秒)。0以下にすると定期チェックを無効化します。
integrity.checkAssemblyHash bool true OZeroAssemblyManifestに対するコンパイル済みアセンブリのSHA-256 / 公開鍵トークン検証。
integrity.checkDebugger bool true アタッチされたマネージドデバッガー、Unityデバッグビルドフラグ、CPUタイミング異常を検知。
integrity.checkPlatformNative bool true プラットフォーム固有のネイティブチェック(Root、Jailbreak、APK署名、Authenticodeなど)を実行。
integrity.failIfManifestMissing bool false* アセンブリマニフェストの欠落・読込失敗を違反として処理します。*development以外のプレイヤービルドでは、シリアライズ値に関わらずtrueに強制されます。
integrity.requireManifestSignature bool false* アセンブリマニフェストに有効なpublic-key signature署名を要求します。鍵はTools → OZero → Generate Manifest Signing Keysで生成してください。*リリースプレイヤービルドではtrueに強制されます。
integrity.blockEmulator bool true (Android) エミュレーター検知を整合性違反として処理。
— InstallSource (Android) —
installSource.useInstallSource bool true インストール元検証のマスタースイッチ。
installSource.allowGooglePlayStore bool true Google Playからのインストール許可(Galaxy Store、Amazon Appstore、AppGallery、OneStoreなど個別ストアフラグもトグル可能)。
— DeviceBinding —
deviceBinding.useDeviceBinding bool true デバイスバインディング検証のマスタースイッチ。
deviceBinding.hardwareChangeTolerance int (0–3) 1 デバイスを新規扱いとする前に許容されるハードウェアフィンガープリント要素の変更数。
— SpeedHack —
speedHack.useSpeedHack bool true スピードハックディテクターのマスタースイッチ。
speedHack.checkInterval float 1.0 ポーリング間隔(秒、0.05–5にクランプ)。
speedHack.requiredDetections int 3 違反を発火させるために必要な連続疑似サンプル数(1–10にクランプ)。
speedHack.useWebTimeValidation bool true 外部エンドポイントとのHTTPS HEADベースのゲーム時間クロス検証を有効化。
speedHack.webTimeUrls[] string[] [] M-4ハードニング (2026-04-24). ラウンドロビン時間クロス検証に使用される、統合者管理下のエンドポイントリスト。自身が管理する2つ以上のエントリを設定してください。このリストが空の場合のみ、廃止された単一webTimeUrlフィールドへフォールバックします。
speedHack.minSuccessfulEndpoints int 2 ラウンドが成功と見なされるために、有効なDateヘッダーで応答する必要があるwebTimeUrlsのうちの最小エンドポイント数。
speedHack.maxConsecutiveFailures int 6 onWebTimeUnavailableのエスカレーション発火までに許容される最大連続失敗ラウンド数。
speedHack.onWebTimeUnavailable enum WarnOnly ウェブ時間エンドポイントが到達不能な場合のポリシー: WarnOnly(デフォルト — ログ出力後実行継続、オフラインファーストゲーム向け)、Strict(敵対的環境とみなしSpeedHackコールバック発火)、Silent(ログ・エスカレーションなし — 非推奨)。
— Injection —
injection.useInjection bool true インジェクション/フックディテクターのマスタースイッチ。ビルド種別による動作: release → 即時終了、development build → 警告のみ(M-5ハードニング、2026-04-24)、editor → 無視。
developerSecretは最初のリリース前に設定し、以降は変更してはなりません。変更するとすべての既存セーブデータ(PlayerPrefsおよびファイル)が読めなくなります。

OZeroLicenseConfig OZeroSDK.Security.License

Resources/OZeroLicenseConfig から読み込まれる ScriptableObject です。ライセンスティア、Plus/Pro キー、任意の Pro ランタイム機能を設定します。未作成または空の場合は Standard/serverless として動作します。

フィールド

フィールド 説明
tierOZeroLicenseTierStandard は完全オフラインで動作します。Plus はプロジェクト固定 native variant を有効化します。Pro は Plus を含み、サーバー連動ランタイム機能を有効化します。
licenseKeystringPlus キーは OZ-PLS-...、Pro キーは OZ-PRO-... 形式です。空の場合は Standard/serverless として動作します。
requireVariantManifestForBuildboolPlus/Pro ビルドで、プロジェクト固定 native Variant manifest がない、または一致しない場合に Unity ビルドを失敗させます。
variantProjectIdstringダウンロードした manifest に project id がある場合、Variant 事前検証で使う任意のプロジェクト識別子です。
serverBaseUrlstringPro アクティベーションとサーバー機能で使う Base URL です。OZero サポートから専用エンドポイントを案内された場合を除き、既定値のままにしてください。
serverPublicKeyHexstringPro ライセンスと一緒に提供される公開検証キーです。ライセンスサーバーの署名済み応答を検証します。
previousServerPublicKeyHexstring任意の previous public key です。サーバーキー移行時に OZero サポートから案内された場合のみ入力します。
tokenTtlSecondsint成功した Pro entitlement をオフラインで信頼する時間です。期限後は再アクティベーションまで Pro 専用機能が無効になります。
activationTimeoutSecondsfloatPro アクティベーションを待つ最大時間です。超過すると SDK は Standard/serverless として続行します。
enableLogboolOZeroSecLog にライセンスフロー診断ログを出力します。
enableDevicePolicyHeartbeatboolPro 専用。現在のデバイスが引き続き許可されているか定期的に確認します。
enableSecurityLevelCheckboolPro 専用。ビルドが期待されるセキュリティレベルを宣言しているかサーバーで確認します。
enableRemoteSpeedHackConfigboolPro 専用。Speed & Time Hack のしきい値をサーバーポリシーで更新できるようにします。
enableSignedServerTimeboolPro 専用。利用可能な場合、signed server time を主要な信頼時刻ソースとして使用します。
injectionWhitelistEntriesOZeroInjectionWhitelistEntry[]既知の信頼済みモジュール用の任意の hash/signature whitelist エントリです。

プロパティ

static OZeroLicenseConfig RuntimeInstance { get; }

Resources からランタイム設定を読み込みます。null は Standard/serverless として扱います。

bool IsServerlessMode { get; }

Standard、Plus、または空のライセンスキーの場合 true です。Pro アクティベーションが必要な場合のみ false です。

bool IsVariantTier { get; }

Plus と Pro の場合 true です。ビルド事前検証と native Variant バインディングで使われます。

OZeroLicenseRuntime OZeroSDK.Security.License

現在のライセンス状態を扱うランタイム facade です。アプリ起動時に自動初期化されるため、多くのプロジェクトでは状態参照または HasCapability の呼び出しだけで十分です。

プロパティ

名前 説明
EntitlementOZeroLicenseEntitlement現在アクティベート済みの entitlement です。Standard/serverless では null です。
HasEntitlementbool現在 entitlement がある場合 true です。
IsServerlessboolSDK が Pro サーバー機能なしで動作している場合 true です。
Initializedboolライセンスランタイムの初回起動処理が完了すると true です。
IsProDowngradedboolPro アクティベーション失敗または期限切れ後、SDK が Standard として継続した場合 true です。
DowngradeReasonstring直近の graceful downgrade の診断理由です。
DeviceIdProviderFunc<string>アクティベーションに使う device id を任意で上書きできます。独自識別子が必要な場合は初期化前に設定してください。

メソッド

static Task Initialize()

冪等な起動メソッドです。通常は SDK が自動呼び出ししますが、カスタム bootstrap ではライセンス状態を読む前に await できます。

static bool HasCapability(string cap)

有効な entitlement に telemetrysigned_timeattestation_v1 などの capability が含まれるか返します。Standard/serverless では false です。

Standard と Plus はランタイムアクティベーションを必要としません。Pro がアクティベートできない場合もゲームプレイは Standard 機能で継続し、Pro 専用機能のみ利用できません。

ライセンスサーバーのランタイム呼び出し

Pro 機能は /v1 配下の HTTPS JSON 呼び出しを使います。ほとんどの呼び出しは SDK が自動で発行します。ゲームサーバーを持つチームは /v1/validate で OZA トークンを直接検証し、高価値アクションでは consumeToken=true で tokenId の再利用を防げます。持たないチームは Managed Verification で OZero の verdict を利用できます。

エンドポイント 目的
POST /v1/activate現在のデバイスで Pro ライセンスをアクティベートし、ローカル entitlement を更新します。
GET /v1/time有効な場合、Speed & Time Hack 検証用の signed server time を提供します。
POST /v1/attest有効な整合性検査の通過後、一意な token ID を含む Pro build attestation トークンを発行します。nonce は送信されたビルド証拠とアプリ識別情報に紐づきます。
POST /v1/validateゲームサーバーから OZA トークンを検証します。ランキング、決済、報酬付与などの一回限りの高価値アクションでは consumeToken=true により同じ tokenId の再利用を遮断できます。
POST /v1/managed-session自社バックエンドを持たないチーム向けに、OZero Managed Verification が Pro OZA トークンを検証し allow/warn/block verdict と短時間の managed session を返します。SDK は managed session の期限前に自動で再検証を試み、同じ tokenId の再利用は遮断されます。
POST /v1/telemetrytelemetry capability が有効な場合、セキュリティイベントの Pro telemetry を送信します。
ネットワーク障害、メンテナンス、ライセンス期限切れはゲームプレイを停止しません。SDK は Standard/serverless として静かに継続し、次の有効なアクティベーション経路で Pro 機能を再試行します。

OZeroAbortCode とイベントメッセージ

確定したセキュリティ違反が発生すると、SDK は OZeroSecurityEvent を生成します。イベントには ModulationType、安定した公開 OZeroAbortCodeMessageKey、安全な英語 MessageWillAbort が含まれます。

Abort code とメッセージ表

コード OZeroAbortCode ModulationType MessageKey メッセージ
0x01MemoryModulationMemoryModulationmemory_modulationProtected memory value changed unexpectedly.
0x02InjectionInjectioninjectionUnexpected module, hook, or runtime injection signal detected.
0x0ABuildIntegrityBuildIntegritybuild_integrityBuild integrity validation failed.
0x0CSpeedOrTimeHackSpeedHackspeed_hackSuspicious time scale or execution speed change detected.
0x0CSpeedOrTimeHackTimeHacktime_hackSystem clock or trusted time anomaly detected.
0x0EDeviceOrInstallPolicyDeviceBindingModulationdevice_bindingDevice binding policy rejected the current device.
0x0EDeviceOrInstallPolicyInstallSourceinstall_sourceApplication install source is not trusted.
0x0FPhysicsHackPhysicsHackphysics_hackAbnormal physics behavior exceeded the configured policy.
0x10EnvironmentModulationEnvironmentModulationenvironment_modulationUnsupported or unsafe runtime environment detected.
0x13SteamAntiPiracySteamAntiPiracysteam_antipiracySteam ownership or ticket validation failed.

ログや多言語 UI では、OZeroAbortCodeMessageKey を基準値として使ってください。Message は開発者が状況を理解しやすい安全な表現にしているため、開発者向け画面や QA ログにそのまま表示できます。

ランタイムでのセキュリティイベント処理

SDK が abort する前に analytics キューをフラッシュする、開発者向け警告を表示する、graceful save を保存する必要がある場合は OZeroSecurityManager.RegisterUserCallback でハンドラを登録してください。現在の応答ポリシーでアプリを終了するかは evt.WillAbort で確認できます。

using OZeroSDK.Security;

void OnEnable()
{
    OZeroSecurityManager.Instance.RegisterUserCallback(OnHack);
}

void OnHack(OZeroSecurityEvent evt)
{
    Debug.LogWarning(
        $"OZero: {evt.Type} {evt.AbortCodeHex} {evt.MessageKey} - {evt.Message}");

    if (evt.WillAbort)
    {
        // Last chance to flush your own analytics or save state.
    }

    Analytics.FlushSync();
}

Injection Detector API OZeroSDK.Security

Injection Detector silenced -> Add to Whitelist workflow
流れ: 初回検出 -> 信頼モジュール項目を追加 -> 以降のスキャンでそのモジュールを許可できます。

hash + signer-fingerprint ホワイトリストのプログラミング表面です。ランタイムでは OZeroDispatch を使い、ゲームに同梱する信頼項目は OZeroLicenseConfig に設定します。

DTO — OZeroInjectionWhitelistEntry

[Serializable]
public class OZeroInjectionWhitelistEntry
{
    // SHA-256 of the matched module file. Lowercase 64-char hex. Required.
    public string HashHex { get; set; }

    // SHA-256 of the module's signing certificate. Lowercase 64-char hex.
    // Empty ("") means "match by hash only" (only mode for Android .so / Linux ELF).
    public string SignerHex { get; set; }

    // Module file format hint — "pe" | "macho" | "so". Defaults to "so".
    public string Type { get; set; }

    // Optional human-readable note (UI / audit only — never sent to native).
    public string Comment { get; set; }
}

Unityからローカル信頼モジュール項目をシードする必要がある場合に使うDTOです。Pro顧客は通常、同じポリシーをポータルで管理します。

ランタイム API — OZeroDispatch

// Returns true when trusted-module policy support is available.
public static bool HasInjectionV3 { get; }

// Replace trusted module entries atomically. Pass null/empty to clear.
// Returns false when the runtime support is unavailable.
public static bool RegisterInjectionWhitelistHash(OZeroInjectionWhitelistEntry[] entries);

// Trusted-module aware scan. Returns true when a relevant runtime signal is observed.
// Output fields are diagnostic context for your review and may be empty.
public static bool DetectAssemblyInjectionV3(
    out bool   silencedByWhitelist,
    out string hashHex,
    out string signerHex,
    out string matchedModulePath);

3つのメソッドはいずれも static helper です。任意機能の連携面として扱い、まず利用可否を確認し、ローカルの信頼項目は最小限にしてください。

Config — OZeroLicenseConfig

// Inspector array of OZeroInjectionWhitelistEntry — preferred surface.
public OZeroInjectionWhitelistEntry[] InjectionWhitelistEntries { get; }

public string[] InjectionWhitelistKeywords { get; }

InjectionWhitelistEntries は信頼モジュールポリシーのローカルシードです。自分で同梱する、または明示的に信頼するモジュールにのみ使用してください。