OZero Security
API 参考

API 参考

OZero SDK 中所有公共类和方法的完整参考。除非另有说明,所有类都位于 OZeroSDK.Security 命名空间中。

OZeroSecurityManager OZeroSDK.Security

管理所有活动安全模块的中央单例。即使通过 DontDestroyOnLoad 切换场景,它也会被保留。使用静态 Instance 属性访问它。 OZeroBootstrapper[RuntimeInitializeOnLoadMethod] 在运行时启动时自动创建 - 不要自己实例化它。

特性

姓名 类型 解释
Instance OZeroSecurityManager 静态单例访问器。返回活动实例。

方法

void RegisterUserCallback(DelegateSecurityViolation callback)

用户链中注册第三方回调。内置的默认处理程序在单独的链中运行,因此当用户回调被释放时它不会被禁用。回调接收OZeroSecurityEvent,其中包含模块类型、公共Abort Code、消息密钥、安全诊断消息以及是否根据当前策略终止应用程序。

void UnregisterUserCallback(DelegateSecurityViolation callback)

删除先前注册的用户回调。请务必从 OnDisableOnDestroy 调用它,以避免内存泄漏。

代表

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。我们只公开可靠且安全的诊断信息,而不是内部检测详细信息。

姓名 类型 解释
TypeModulationType导致违规的安全模块。
AbortCodeOZeroAbortCode这是一个稳定的公共Abort Code类别。
AbortCodeValueint这是一个非常适合在服务器日志中使用的数字代码值。
AbortCodeHexstring十六进制字符串,如 0x0C
MessageKeystring这是一个稳定的英文消息密钥,可用于本地化和分析分组。
Messagestring这是可以向客户公开的安全英文诊断消息。
WillAbortbool如果当前响应策略是在回调返回后或宽限计时器到期后终止应用程序,则为 true。

ModulationType enum

确定哪个安全模块发出了警报。传递给 OZeroSecurityEvent.Type

价值 解释
MemoryModulation 以可疑方式访问的安全类型变量
SpeedHack 检测到速度黑客或时间操纵
TimeHack 检测系统时钟异常(返回、NTP 不匹配)
Injection 检测内存注入工具(Frida等)或非法DLL
PhysicsHack 不可能的位置变化检测(由 OZeroPhysicsHackDetector 引起 - 需要将组件直接附加到单个玩家对象;不是由 Bootstrapper 自动生成)
DeviceBindingModulation 保存数据是从与其绑定的设备不​​同的设备加载的
InstallSource 从非授权商店安装
BuildIntegrity 程序集哈希不匹配、调试器附件或平台检查失败
EnvironmentModulation 检测模拟器或异常运行环境
SteamAntiPiracy 当 Steam 所有权或票证验证失败时发生。

OZeroBootstrapper OZeroSDK.Security

这是一个自动引导入口点,不需要额外的接线。您不需要直接调用此类。将 SDK 连接到您的 Unity 启动流程,加载经过验证的安全设置,并在游戏开始前自动准备活动探测器。本机运行时保护(如果可用)也会在此过程中初始化。

无公共 API — 不要在调用者中实例化、继承或引用此类型。唯一支持的统一表面是 OZeroSecurityConfig 资产。

OZeroSecurityConfigRuntime OZeroSDK.Security

具有受保护的构建时安全设置的运行时加载程序。验证打包的设置,准备内存中 OZeroSecurityConfig 快照,并在验证失败时应用已建立的威胁响应策略。

特性

姓名 类型 解释
Current OZeroSecurityConfig 斑点中水合设置的快照。首次访问时调用 EnsureLoaded()。在玩家构建中,OZeroSecurityConfig.Instance 通过此属性进行代理。

方法

static void EnsureLoaded()

幂等加载器——可以安全地重复调用。包配置在第一次访问时验证并加载,后续调用重用相同的快照。故障处理遵循全球威胁响应策略。

这种类型是内部加载器。可以在 OZeroSecurityConfig 和 Unity 编辑器窗口中查看支持的互锁表面。

OZero Secure Variables OZeroSDK.Security

它是基本类型的加密替代品。值仅在 Native C++ 堆上存储和加密。每个帧都会应用一个额外的 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仅支持等式运算符。字符串支持 ==!=+。 Buffer可以通过索引操作符直接访问字节数组。

安全类型根本没有 GC 分配。加密是通过 stackalloc 和本机原子计数器执行的,即使对于每帧调用数千次的热传递也是安全的。

OZeroSafePlayerPrefs OZeroSDK.Security

Unity PlayerPrefs 的加密替代品。密钥名称通过消息认证进行哈希处理,值使用密钥派生功能Device Binding密钥进行加密(重复 100,000 次)。即使直接打开设备注册表(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

使用内置完整性验证来加密和解密文件。关键是应用程序级别(无Device Binding),因此它与 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 Server 证明和 OZero 托管验证。当 OZeroSecurityConfig 中启用构建完整性时,由 OZeroBootstrapper 自动创建。

检查项目

测试 解释
Assembly / Manifest验证从支持的构建目标生成的完整性清单和托管程序集状态。
Debugger / Timing检测附加的调试器、异常定时间隔、断点附近的延迟,并抑制常见的焦点丢失误报。
Platform Native激活后,它会执行特定于平台的检查,例如 Android 包/签名、iOS 越狱和桌面运行时状态。
Pro Attestation如果Pro Server认证开启,本地检查通过后会请求服务器颁发的认证令牌。如果启用托管验证,OZero 委托裁决也会使用相同的令牌进行验证。

公共财产

姓名 类型 解释
InstanceOZeroBuildIntegrityValidator当前验证器实例(如果创建了模块)。
LastValidationResultbool?这些是最新的本地验证结果。在第一次验证之前,它是null
IsValidatingbool如果验证正在运行,则为 true。
IsIntegrityVerifiedbool如果最近激活的本地检查通过,则为 true。
AttestationTokenOZeroBuildAttestationToken这是最新的 Pro 证明令牌。在服务器证明成功或失败之前为空,并且令牌包含用于重用跟踪的唯一 ID。

事件和方法

UnityEvent OnValidationPassed { get; }

当所有启用的本地检查通过时调用。

UnityEvent OnValidationFailed { get; }

当启用的本地检查或 Pro 证明拒绝构建时调用。

UnityEvent OnAttestationPassed { get; }

当 Pro 服务器证明成功并且在 AttestationToken 中收到有效令牌时调用。

void Validate()

开始手动验证。对于一般项目,建议使用仪表板的启动/定期验证设置。

OZeroSpeedHackDetector OZeroSDK.Security

使用五个独立的检测信号检测速度黑客和时间操纵。仅在信号相互确认时才报告威胁,从而减少误报。

检测信号

信号 解释
TimeScale 监视对 Unity 的 Time.timeScale 的未经授权的更改
API Clock 将操作系统时间 API 与本机后台计时器进行比较
Thread Drift 测量 Unity 运行时间和独立本机计时源之间的漂移
Time Backward 检测系统时间向后移动
NTP 可选 — 与 NTP 服务器交叉检查以进行绝对时间验证(需要网络)

检测通过带有 ModulationType.SpeedHackModulationType.TimeHackOZeroSecurityManager 回调进行。设置在 OZeroSecurityConfig 中。

OZeroInjectionDetector OZeroSDK.Security

观察异常运行时模块、挂钩、调试器和信任模块策略信号。定期扫描在适用的情况下使用抖动调度来减少可预测的扫描时序。

检测目标

Runtime module 意外的模块或与挂钩相关的运行时信号
Debugger 调试器或跟踪器连接信号
Memory map 可疑运行时内存或模块放置的信号
Illegal DLL 未经授权的托管程序集加载到进程中(Windows/Unity 编辑器)

检测通过带有 ModulationType.InjectionOZeroSecurityManager 回调进行。

OZeroSecurityConfig ScriptableObject

存储全局安全设置的 ScriptableObject 资产。当您在编辑器中编写时,构建管道会将其打包到受保护的运行时设置中以供播放器构建。实际应用程序设置通过 OZeroSecurityConfig.Instance 进行访问。

场地

这些字段分组为嵌套配置类(ResponseIntegrityInstallSourceDeviceBindingSpeedHackInjection),并通过 OZeroSecurityConfig.Instance 中的同名属性进行访问。下面列出了经常调整的字段,请参阅资产的检查器工具提示以了解完整的详细信息。

场地 类型 默认 解释
- 顶部 -
developerSecret string "" 用于密钥派生的 OZeroSV_FileOZeroSafePlayerPrefs 密码的密钥派生函数。每个游戏的它必须是唯一的,并且在发布后不得更改。
enableLog bool true 启用 SDK 调试日志(在发布版本中始终作为 OZeroSecLog 删除)。
-回复-
response.forceQuitOnDetection bool true 遇到威胁时强制关闭(将 OZeroInternalFallbackReceiver 强制为本机 OZ_AbortProcess)。如果您只想处理用户回调链,请禁用。
- 正直 -
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 运行特定于平台的本机检查(生根、越狱、APK 签名、Authenticode 等)。
integrity.failIfManifestMissing bool false* 将程序集清单丢失/加载失败视为违规。在 * 开发以外的玩家构建中,无论序列化值如何,这都将被强制为 true
integrity.requireManifestSignature bool false* 要求程序集清单使用有效的公钥签名进行签名。使用工具→OZero→生成清单签名密钥生成密钥。 *在发布播放器版本中强制为 true.
integrity.blockEmulator bool true (Android) 将模拟器检测视为完整性违规。
— Install Source (Android) —
installSource.useInstallSource bool true Install Source验证主开关。
installSource.allowGooglePlayStore bool true 允许安装 Google Play(您还可以切换 Galaxy Store、Amazon Appstore、AppGallery、OneStore 等的各个商店标志)。
—Device Binding—
deviceBinding.useDeviceBinding bool true Device Binding验证总开关。
deviceBinding.hardwareChangeTolerance int (0–3) 1 在设备被视为新设备之前允许的硬件指纹组件更改次数。
—速度黑客—
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). 用于循环定时交叉验证的积分器控制端点列表。至少设置两个您控制的项目。仅当此列表为空时,它才会回退到单个已弃用的 webTimeUrl 字段。
speedHack.minSuccessfulEndpoints int 2 webTimeUrls 中必须响应有效 Date 标头才能被视为成功的端点的最小数量。
speedHack.maxConsecutiveFailures int 6 onWebTimeUnavailable 升级发生之前允许的最大连续失败回合数。
speedHack.onWebTimeUnavailable enum WarnOnly 网络时间端点无法访问时的策略:WarnOnly(默认 — 记录并继续运行,适合离线优先的游戏)、Strict(视为敌对环境并触发 SpeedHack 回调)、Silent(无日志/升级 — 不推荐)。
— 注射 —
injection.useInjection bool true 注射/挂钩检测器主开关。每种构建类型的操作:release → 立即终止,development build → 仅输出警告(M-5 安全增强,2026-04-24),editor → 忽略。
developerSecret 必须在首次发布之前设置,此后不得更改。任何更改都会使所有现有的保存数据(PlayerPrefs 和文件)变得不可读。

OZeroLicenseConfig OZeroSDK.Security.License

ScriptableObjectResources/OZeroLicenseConfig 加载。选择您的许可证层并设置 Plus/Pro 密钥和可选的 Pro 运行时功能。如果丢失或为空,它将作为标准/无服务器运行。

场地

场地 类型 解释
tierOZeroLicenseTier标准完全离线运行。 Plus 激活项目绑定本机变体。 Pro 包含 Plus 并启用基于服务器的运行时功能。
licenseKeystringPlus 键的格式为 OZ-PLS-...,Pro 键的格式为 OZ-PRO-...。如果为空,则它作为标准/无服务器运行。
requireVariantManifestForBuildbool在 Plus/Pro 构建中,如果项目绑定本机变体清单丢失或不匹配,Unity 将使构建失败。
variantProjectIdstring当下载的清单中存在项目 ID 时,用于变体预验证的可选项目标识符。
serverBaseUrlstring用于 Pro 激活和服务器功能的基本 URL。如果 OZero 支持未指示您使用专用端点,请保留默认值。
serverPublicKeyHexstring这是您的专业版许可证附带的公共验证密钥。用于验证来自许可证服务器的签名响应。
previousServerPublicKeyHexstring可选的旧公钥。仅当 OZero 支持在服务器密钥转换期间指示这样做时才输入。
tokenTtlSecondsint是时候相信您成功的离线 Pro 权利了。过期后,专业版专用功能将被禁用,直到重新激活为止。
activationTimeoutSecondsfloat等待 Pro 激活的最长时间。如果超出,SDK 会继续以标准/无服务器模式运行。
enableLogbool通过 OZeroSecLog 打印许可证流诊断日志。
enableDevicePolicyHeartbeatbool仅限专业版。定期检查您当前的设备是否仍然允许。
enableSecurityLevelCheckbool仅限专业版。允许服务器验证构建是否声明了预期的安全级别。
enableRemoteSpeedHackConfigbool仅限专业版。允许使用服务器策略更新速度和时间黑客阈值。
enableSignedServerTimebool仅限专业版。如果可用,请使用签名服务器时间作为默认可信时间源。
injectionWhitelistEntriesOZeroInjectionWhitelistEntry[]已知可信模块的可选哈希/签名白名单条目。

特性

static OZeroLicenseConfig RuntimeInstance { get; }

从资源加载运行时设置。将 null 视为标准/无服务器。

bool IsServerlessMode { get; }

适用于 Standard、Plus 或空白许可证密钥。仅当需要 Pro 激活时才为 False。

bool IsVariantTier { get; }

在 Plus 和 Pro 上正确。用于构建预验证和本机变体绑定。

OZeroLicenseRuntime OZeroSDK.Security.License

读取当前许可证状态的运行时外观。它会在应用程序启动时自动初始化,因此大多数项目只需要读取状态或调用 HasCapability 即可。

特性

姓名 类型 解释
EntitlementOZeroLicenseEntitlement当前有效的权利。在标准/无服务器模式下,它为空。
HasEntitlementbool如果存在当前权利,则为 true。
IsServerlessbool如果 SDK 在没有 Pro Server 功能的情况下运行,则为 True。
Initializedbool在许可运行时的首次启动处理完成后为真。
IsProDowngradedbool如果在 Pro 激活失败或过期后 SDK 继续作为 Standard 静静地运行,则为 true。
DowngradeReasonstring这是最近一次优雅降级的诊断原因。
DeviceIdProviderFunc<string>您可以选择更改用于激活的设备 ID。如果您的项目需要使用自己的标识符,请在初始化之前设置。

方法

static Task Initialize()

这是一种幂等启动方法。通常由 SDK 自动调用,自定义引导可以在读取许可证状态之前等待。

static bool HasCapability(string cap)

返回活动权利是否具有以下功能:telemetrysigned_timeattestation_v1。这在标准/无服务器中是错误的。

Standard 和 Plus 不需要运行时激活。即使 Pro 版激活失败,游戏也将继续以标准功能运行,只有 Pro 版功能将不可用。

许可证服务器运行时调用

Pro 功能使用 /v1 下的 HTTPS JSON 调用。大多数调用都是由 SDK 自动进行的。拥有自己的游戏服务器的团队可以直接使用 /v1/validate 验证 OZA 代币,并使用 consumeToken=true 防止 tokenId 重复用于高价值操作。没有服务器的团队可以通过托管验证设置使用 OZero 委托裁决。

终点 使用
POST /v1/activate在当前设备上激活您的专业版许可证并续订您的本地权利。
GET /v1/time启用后,提供签名的服务器时间用于速度和时间黑客验证。
POST /v1/attest通过启用的完整性检查后,我们会颁发包含唯一令牌 ID 的 Pro 构建证明令牌。该随机数与提交的构建证据和应用程序标识信息相关联。
POST /v1/validateOZA 代币在游戏服务器上进行验证。对于排名、支付、商品支付等一次性高价值行为,可以使用 consumeToken=true 阻止重复使用同一个 tokenId。
POST /v1/managed-session对于没有自己后端的团队,OZero 会验证 Pro OZA 代币并返回允许/警告/阻止判决和简短的托管会话。 SDK 会在托管会话过期之前尝试自动重新验证,并且会阻止重复使用具有相同 tokenId 的托管会话。
POST /v1/telemetry如果启用了遥测功能,则发送安全事件的 Pro 遥测数据。
网络中断、维护或许可证到期不会中断游戏。 SDK 将悄悄地继续在标准/无服务器模式下运行,并在下一个有效激活路径上重试 Pro 功能。

OZeroAbortCode 和事件消息

当确认发生安全违规时,SDK 会生成 OZeroSecurityEvent。活动包括ModulationType、稳定公共OZeroAbortCodeMessageKey、安全英语MessageWillAbort

Abort Code和消息表

绳索 OZeroAbortCode ModulationType MessageKey 信息
0x01MemoryModulationMemoryModulationmemory_modulation受保护的内存值意外更改。
0x02InjectionInjectioninjection检测到意外的模块、挂钩或运行时注入信号。
0x0ABuildIntegrityBuildIntegritybuild_integrity构建完整性验证失败。
0x0CSpeedOrTimeHackSpeedHackspeed_hack检测到可疑的时间尺度或执行速度变化。
0x0CSpeedOrTimeHackTimeHacktime_hack检测到系统时钟或可信时间异常。
0x0EDeviceOrInstallPolicyDeviceBindingModulationdevice_bindingDevice Binding策略拒绝了当前设备。
0x0EDeviceOrInstallPolicyInstallSourceinstall_source应用程序Install Source不受信任。
0x0FPhysicsHackPhysicsHackphysics_hack异常物理行为超出了配置的策略。
0x10EnvironmentModulationEnvironmentModulationenvironment_modulation检测到不受支持或不安全的运行时环境。
0x13SteamAntiPiracySteamAntiPiracysteam_antipiracySteam 所有权或票证验证失败。

创建日志或多语言 UI 时,请使用 OZeroAbortCodeMessageKey 作为参考值。 Message 被组织成一个安全的表达式,以便开发人员可以了解情况,因此可以按原样显示在开发人员屏幕或 QA 日志上。

处理运行时的安全事件

如果您需要刷新分析队列、向开发人员显示警告或在 SDK 中止之前正常保存,请使用 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
流程:首次检测 -> 添加可信模块条目 -> 您可以在后续扫描中允许该模块。

哈希+签名者指纹白名单的编程表面。运行时使用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。专业客户通常在门户中管理相同的策略。

运行时 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);

所有三个方法都是静态助手。将其视为可选功能表面,首先检查可用性,并将本地信任条目保持在最低限度。

配置 — OZeroLicenseConfig

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

public string[] InjectionWhitelistKeywords { get; }

InjectionWhitelistEntries 是信任模块策略的本地种子。仅在您自己部署或明确信任的模块中使用。