APIリファレンス
OZero SDKのすべての公開クラスとメソッドの完全なリファレンスです。特に記載がない限り、すべてのクラスはOZeroSDK.Security名前空間に属します。
OZeroSecurityManager OZeroSDK.Security
すべてのアクティブなセキュリティモジュールを管理する中央シングルトンです。DontDestroyOnLoadによりシーン遷移時も維持されます。静的なInstanceプロパティからアクセスしてください。OZeroBootstrapperがランタイム起動時に[RuntimeInitializeOnLoadMethod]経由で自動生成します — 手動でインスタンス化しないでください。
プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
| Instance | OZeroSecurityManager | 静的シングルトンアクセサ。アクティブなインスタンスを返します。 |
メソッド
ユーザーチェーンにサードパーティコールバックを登録します。内蔵デフォルトハンドラは別チェーンで動作するため、ユーザーコールバックを解除しても無効化できません。コールバックは、モジュール種別、公開 abort code、メッセージキー、安全な診断メッセージ、現在のポリシーでアプリを終了するかを含む OZeroSecurityEvent を受け取ります。
以前に登録したユーザーコールバックを削除します。メモリリーク防止のため、OnDisableまたはOnDestroyで必ず呼び出してください。
デリゲート
RegisterUserCallback で使うコールバックシグネチャです。独自 UI、ログ、保存フローの判断には evt.Type、evt.AbortCodeHex、evt.MessageKey、evt.Message、evt.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 です。内部検出の詳細ではなく、安定した安全な診断情報だけを公開します。
| 名前 | 型 | 説明 |
|---|---|---|
| Type | ModulationType | 違反を発生させたセキュリティモジュールです。 |
| AbortCode | OZeroAbortCode | 安定した公開 abort code カテゴリです。 |
| AbortCodeValue | int | サーバーログで使いやすい数値コードです。 |
| AbortCodeHex | string | 0x0C のような16進文字列です。 |
| MessageKey | string | ローカライズや analytics グルーピングに使える安定した英語メッセージキーです。 |
| Message | string | 顧客に表示可能な安全な英語診断メッセージです。 |
| WillAbort | bool | コールバック返却後、または 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ランタイム保護もここで初期化されます。
OZeroSecurityConfigアセットのみです。
OZeroSecurityConfigRuntime OZeroSDK.Security
保護されたビルド時セキュリティ設定のランタイムローダーです。パッケージされた設定を検証し、インメモリのOZeroSecurityConfigスナップショットを準備し、検証失敗時は設定された脅威対応ポリシーを適用します。
プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
| Current | OZeroSecurityConfig | ブロブからハイドレートされた設定スナップショット。初回アクセス時にEnsureLoaded()を呼び出します。プレイヤービルドではOZeroSecurityConfig.Instanceがこのプロパティ経由でプロキシされます。 |
メソッド
冪等なローダー — 繰り返し呼び出しても安全です。初回アクセスでパッケージ設定を検証・読み込み、以降は同じスナップショットを再利用します。失敗時の処理はグローバル脅威対応ポリシーに従います。
OZeroSecurityConfigとUnityエディターウィンドウです。
OZero Secure Variables OZeroSDK.Security
プリミティブ型の暗号化されたドロップイン代替品です。値はNative C++ヒープにのみ保存されOZero proprietary cipherで暗号化されます。フレームごとに48バイトのXORマスクが追加適用されるため、メモリスキャナーにはノイズしか見えません。すべての算術演算子と暗黙的な型変換がサポートされています — 型名の変更だけが必要です。
対応型一覧
| クラス | 置き換え対象 |
|---|---|
| OZeroSV_Int | int |
| OZeroSV_Int64 | long |
| OZeroSV_UInt | uint |
| OZeroSV_UInt64 | ulong |
| OZeroSV_Short | short |
| OZeroSV_UShort | ushort |
| OZeroSV_Byte | byte |
| OZeroSV_Float | float |
| OZeroSV_Double | double |
| OZeroSV_Decimal | decimal |
| OZeroSV_Bool | bool |
| OZeroSV_String | string |
| OZeroSV_Vector2 | Vector2 |
| OZeroSV_Vector3 | Vector3 |
| OZeroSV_Buffer | byte[] |
対応演算子
数値型(Int、Int64、UInt、UInt64、Short、UShort、Byte、Float、Double、Decimal)はすべての算術(+ - * / %)、比較(== != < > <= >=)、複合代入(+= -= *= /=)、インクリメント/デクリメント(++ --)演算子と、対応するプリミティブ型との暗黙的変換をサポートします。Vector2・Vector3は算術および等価演算子をサポートします。Boolは等価演算子のみサポートします。Stringは==、!=、+をサポートします。Bufferはインデックス演算子による生のバイト配列アクセスを提供します。
stackallocとネイティブアトミックカウンターで実行されるため、フレームごとに何千回も呼ばれるホットパスでも安全に使用できます。
OZeroSafePlayerPrefs OZeroSDK.Security
UnityのPlayerPrefsの暗号化されたドロップイン代替品です。キー名はmessage authenticationでハッシュされ、値はkey-derivation functionデバイスバインドキー(10万回反復)を使用したOZero proprietary cipherで暗号化されます。デバイスのレジストリ(Windows)や設定plist(iOS)を参照しても保存データは読めません。
メソッド
すべてのメソッドはPlayerPrefsと機能的に同一です。マイグレーション手順は不要 — クラス名を置き換えるだけです。
OZeroSafePlayerPrefsで書き込まれたデータは標準のPlayerPrefsと互換性がありません。両者を切り替えると既存データが読めなくなります。
OZeroSV_File OZeroSDK.Security
組み込みの整合性検証とともにファイルを暗号化/復号します。キーはアプリレベル(デバイス非バインド)のためSteamクラウドセーブと互換性があります。読み込み時に整合性検証が走り、改ざんされたファイルは破損データを黙って返すのではなく例外を発生させます。
メソッド
contentsを暗号化し、保護されたペイロード(ヘッダ + 暗号文 + 認証タグ)をpathに書き込みます。ディレクトリは事前に存在している必要があります。
pathのファイルを読み込み、整合性を検証してから復号された文字列を返します。ファイルが改ざんされている場合InvalidDataExceptionをスローします。
生のバイト配列を暗号化して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 Attestation | Pro サーバー attestation が有効な場合、ローカル検査通過後にサーバー発行の attestation トークンを要求します。Managed Verification が有効な場合は、同じトークンで OZero の委任 verdict も確認します。 |
公開プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
| Instance | OZeroBuildIntegrityValidator | モジュールが作成されている場合の現在の validator インスタンスです。 |
| LastValidationResult | bool? | 直近のローカル検証結果です。初回実行前は null です。 |
| IsValidating | bool | 検証実行中は true です。 |
| IsIntegrityVerified | bool | 直近の有効なローカル検査が通過した後 true になります。 |
| AttestationToken | OZeroBuildAttestationToken | 直近の Pro attestation トークンです。サーバー attestation が成功または失敗するまでは null です。トークンには再利用/監査追跡用の一意な token ID が含まれます。 |
イベントとメソッド
有効なすべてのローカル検査が通過したときに呼び出されます。
有効なローカル検査または Pro attestation がビルドを拒否したときに呼び出されます。
Pro サーバー attestation が成功し、AttestationToken に有効なトークンが入った後に呼び出されます。
手動検証を開始します。通常はダッシュボードの起動時/定期検証設定を使用します。
OZeroSpeedHackDetector OZeroSDK.Security
5つの独立した検知シグナルを使用してスピードハックと時間操作を検知します。シグナルが互いに確認し合った場合のみ脅威を報告し、誤検知を減らします。
検知シグナル
| シグナル | 説明 |
|---|---|
| TimeScale | UnityのTime.timeScaleの不正な変更を監視 |
| API Clock | OS時間APIをネイティブバックグラウンドタイマーと比較 |
| Thread Drift | Unityランタイム時間と独立したNativeタイミングソース間のドリフトを測定 |
| Time Backward | システム時間の逆行を検知 |
| NTP | 任意 — 絶対時間検証のためNTPサーバーとクロスチェック(ネットワーク必要) |
検知はModulationType.SpeedHackまたはModulationType.TimeHackでOZeroSecurityManagerコールバックを通じて発生します。OZeroSecurityConfigで設定します。
OZeroInjectionDetector OZeroSDK.Security
異常なランタイムモジュール、フック、デバッガー、信頼モジュールポリシーのシグナルを観察します。周期チェックは可能な場合Jitterスケジューリングを使用し、予測しやすいスキャンタイミングを減らします。
検知対象
| Runtime module | 予期しないモジュールまたはフック関連のランタイムシグナル |
| Debugger | デバッガーまたはトレーサー接続シグナル |
| Memory map | 疑わしいランタイムメモリまたはモジュール配置シグナル |
| Illegal DLL | プロセスにロードされた不正な管理アセンブリ(Windows/Unity Editor) |
検知はModulationType.InjectionでOZeroSecurityManagerコールバックを通じて発生します。
OZeroSecurityConfig ScriptableObject
グローバルセキュリティ設定を保存するScriptableObjectアセットです。エディターで作成すると、ビルドパイプラインがプレイヤービルド向けの保護されたランタイム設定としてパッケージします。実際に適用される設定はOZeroSecurityConfig.Instanceから参照します。
フィールド
フィールドはネストされた設定クラス(Response、Integrity、InstallSource、DeviceBinding、SpeedHack、Injection)にグループ化されており、OZeroSecurityConfig.Instanceの同名プロパティでアクセスします。よく調整されるフィールドを以下に列挙しています — 全項目はアセットのインスペクターツールチップを参照してください。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
| — トップレベル — | |||
| developerSecret | string | "" | OZeroSV_FileとOZeroSafePlayerPrefsの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 → 無視。 |
OZeroLicenseConfig OZeroSDK.Security.License
Resources/OZeroLicenseConfig から読み込まれる ScriptableObject です。ライセンスティア、Plus/Pro キー、任意の Pro ランタイム機能を設定します。未作成または空の場合は Standard/serverless として動作します。
フィールド
| フィールド | 型 | 説明 |
|---|---|---|
| tier | OZeroLicenseTier | Standard は完全オフラインで動作します。Plus はプロジェクト固定 native variant を有効化します。Pro は Plus を含み、サーバー連動ランタイム機能を有効化します。 |
| licenseKey | string | Plus キーは OZ-PLS-...、Pro キーは OZ-PRO-... 形式です。空の場合は Standard/serverless として動作します。 |
| requireVariantManifestForBuild | bool | Plus/Pro ビルドで、プロジェクト固定 native Variant manifest がない、または一致しない場合に Unity ビルドを失敗させます。 |
| variantProjectId | string | ダウンロードした manifest に project id がある場合、Variant 事前検証で使う任意のプロジェクト識別子です。 |
| serverBaseUrl | string | Pro アクティベーションとサーバー機能で使う Base URL です。OZero サポートから専用エンドポイントを案内された場合を除き、既定値のままにしてください。 |
| serverPublicKeyHex | string | Pro ライセンスと一緒に提供される公開検証キーです。ライセンスサーバーの署名済み応答を検証します。 |
| previousServerPublicKeyHex | string | 任意の previous public key です。サーバーキー移行時に OZero サポートから案内された場合のみ入力します。 |
| tokenTtlSeconds | int | 成功した Pro entitlement をオフラインで信頼する時間です。期限後は再アクティベーションまで Pro 専用機能が無効になります。 |
| activationTimeoutSeconds | float | Pro アクティベーションを待つ最大時間です。超過すると SDK は Standard/serverless として続行します。 |
| enableLog | bool | OZeroSecLog にライセンスフロー診断ログを出力します。 |
| enableDevicePolicyHeartbeat | bool | Pro 専用。現在のデバイスが引き続き許可されているか定期的に確認します。 |
| enableSecurityLevelCheck | bool | Pro 専用。ビルドが期待されるセキュリティレベルを宣言しているかサーバーで確認します。 |
| enableRemoteSpeedHackConfig | bool | Pro 専用。Speed & Time Hack のしきい値をサーバーポリシーで更新できるようにします。 |
| enableSignedServerTime | bool | Pro 専用。利用可能な場合、signed server time を主要な信頼時刻ソースとして使用します。 |
| injectionWhitelistEntries | OZeroInjectionWhitelistEntry[] | 既知の信頼済みモジュール用の任意の hash/signature whitelist エントリです。 |
プロパティ
Resources からランタイム設定を読み込みます。null は Standard/serverless として扱います。
Standard、Plus、または空のライセンスキーの場合 true です。Pro アクティベーションが必要な場合のみ false です。
Plus と Pro の場合 true です。ビルド事前検証と native Variant バインディングで使われます。
OZeroLicenseRuntime OZeroSDK.Security.License
現在のライセンス状態を扱うランタイム facade です。アプリ起動時に自動初期化されるため、多くのプロジェクトでは状態参照または HasCapability の呼び出しだけで十分です。
プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
| Entitlement | OZeroLicenseEntitlement | 現在アクティベート済みの entitlement です。Standard/serverless では null です。 |
| HasEntitlement | bool | 現在 entitlement がある場合 true です。 |
| IsServerless | bool | SDK が Pro サーバー機能なしで動作している場合 true です。 |
| Initialized | bool | ライセンスランタイムの初回起動処理が完了すると true です。 |
| IsProDowngraded | bool | Pro アクティベーション失敗または期限切れ後、SDK が Standard として継続した場合 true です。 |
| DowngradeReason | string | 直近の graceful downgrade の診断理由です。 |
| DeviceIdProvider | Func<string> | アクティベーションに使う device id を任意で上書きできます。独自識別子が必要な場合は初期化前に設定してください。 |
メソッド
冪等な起動メソッドです。通常は SDK が自動呼び出ししますが、カスタム bootstrap ではライセンス状態を読む前に await できます。
有効な entitlement に telemetry、signed_time、attestation_v1 などの capability が含まれるか返します。Standard/serverless では false です。
ライセンスサーバーのランタイム呼び出し
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/telemetry | telemetry capability が有効な場合、セキュリティイベントの Pro telemetry を送信します。 |
OZeroAbortCode とイベントメッセージ
確定したセキュリティ違反が発生すると、SDK は OZeroSecurityEvent を生成します。イベントには ModulationType、安定した公開 OZeroAbortCode、MessageKey、安全な英語 Message、WillAbort が含まれます。
Abort code とメッセージ表
| コード | OZeroAbortCode | ModulationType | MessageKey | メッセージ |
|---|---|---|---|---|
| 0x01 | MemoryModulation | MemoryModulation | memory_modulation | Protected memory value changed unexpectedly. |
| 0x02 | Injection | Injection | injection | Unexpected module, hook, or runtime injection signal detected. |
| 0x0A | BuildIntegrity | BuildIntegrity | build_integrity | Build integrity validation failed. |
| 0x0C | SpeedOrTimeHack | SpeedHack | speed_hack | Suspicious time scale or execution speed change detected. |
| 0x0C | SpeedOrTimeHack | TimeHack | time_hack | System clock or trusted time anomaly detected. |
| 0x0E | DeviceOrInstallPolicy | DeviceBindingModulation | device_binding | Device binding policy rejected the current device. |
| 0x0E | DeviceOrInstallPolicy | InstallSource | install_source | Application install source is not trusted. |
| 0x0F | PhysicsHack | PhysicsHack | physics_hack | Abnormal physics behavior exceeded the configured policy. |
| 0x10 | EnvironmentModulation | EnvironmentModulation | environment_modulation | Unsupported or unsafe runtime environment detected. |
| 0x13 | SteamAntiPiracy | SteamAntiPiracy | steam_antipiracy | Steam ownership or ticket validation failed. |
ログや多言語 UI では、OZeroAbortCode と MessageKey を基準値として使ってください。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
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 は信頼モジュールポリシーのローカルシードです。自分で同梱する、または明示的に信頼するモジュールにのみ使用してください。