Table of Contents

Class ObscuredPrefs

Namespace
CodeStage.AntiCheat.Storage
Assembly
Build.dll

This is an Obscured analogue of the PlayerPrefs class.

public static class ObscuredPrefs
Inheritance
object
ObscuredPrefs

Remarks

Saves data in encrypted state, optionally locking it to the current device.
Automatically encrypts PlayerPrefs on first read (auto migration), has tampering detection and more.
Check out ObscuredFilePrefs if you wish to save big data amounts.

using CodeStage.AntiCheat.Storage;

// Basic usage - works just like PlayerPrefs
ObscuredPrefs.Set<float>("currentLifeBarObscured", 88.4f);
var currentLifeBar = ObscuredPrefs.Get<float>("currentLifeBarObscured");
Debug.Log("Life bar: " + currentLifeBar); // Will print: "Life bar: 88.4"

// Set different types of values
ObscuredPrefs.Set("coins", 100);
ObscuredPrefs.Set("playerName", "John");
ObscuredPrefs.Set("highScore", 1500.5f);
ObscuredPrefs.Set("isUnlocked", true);
ObscuredPrefs.Set("position", new Vector3(1, 2, 3));

// Read values with default fallback
var coins = ObscuredPrefs.Get("coins", 0);
var playerName = ObscuredPrefs.Get("playerName", "Unknown");
var highScore = ObscuredPrefs.Get("highScore", 0f);

// Listen for tampering detection
ObscuredPrefs.NotGenuineDataDetected += OnDataTampered;
ObscuredPrefs.DataFromAnotherDeviceDetected += OnForeignData;

// Check if key exists
if (ObscuredPrefs.HasKey("coins"))
{
    var existingCoins = ObscuredPrefs.Get("coins", 0);
}

// Delete specific key
ObscuredPrefs.DeleteKey("oldKey");

// Save changes (usually automatic on app quit)
ObscuredPrefs.Save();

private void OnDataTampered()
{
    Debug.LogWarning("Data tampering detected!");
}

private void OnForeignData()
{
    Debug.LogWarning("Data from another device detected!");
}

Fields

preservePlayerPrefs

Allows saving original PlayerPrefs values while migrating to ObscuredPrefs.

public static bool preservePlayerPrefs

Field Value

bool

Remarks

In such case, original value still will be readable after switching from PlayerPrefs to ObscuredPrefs and it should be removed manually as it became unneeded.
Original PlayerPrefs value will be automatically removed after read by default.

Properties

DeviceLockSettings

Controls DeviceLock feature settings. Read more at DeviceLockSettings docs.

public static DeviceLockSettings DeviceLockSettings { get; }

Property Value

DeviceLockSettings

Methods

DeleteAll()

Removes all keys and values from the preferences, including anything saved with regular PlayerPrefs.

public static void DeleteAll()

Remarks

⚠️ Warning: Use with caution! Please use this method to remove all prefs instead of PlayerPrefs.DeleteAll() to properly clear internals and avoid any data loss when saving new obscured prefs after DeleteAll() call.

DeleteCryptoKey()

Removes saved crypto key. Use only when you wish to completely remove all obscured prefs!

public static void DeleteCryptoKey()

Remarks

⚠️ Warning: Any existing obscured prefs will be lost after this action.

DeleteKey(string)

Removes key and its corresponding value from the ObscuredPrefs and regular PlayerPrefs.

public static void DeleteKey(string key)

Parameters

key string

EncryptKeyWithACTkV1Algorithm(string, string)

Use to encrypt ACTkv1's value key for later use with SetRawValue to let it migrate.

public static string EncryptKeyWithACTkV1Algorithm(string key, string cryptoKey = "e806f6")

Parameters

key string

Prefs key.

cryptoKey string

Crypto key you used with ACTk v1, if any.

Returns

string

Prefs key, encrypted with old ACTk v1 encryption.

Get(string, ObscuredBigInteger)

public static ObscuredBigInteger Get(string key, ObscuredBigInteger defaultValue = default)

Parameters

key string
defaultValue ObscuredBigInteger

Returns

ObscuredBigInteger

Get(string, ObscuredBool)

public static ObscuredBool Get(string key, ObscuredBool defaultValue = default)

Parameters

key string
defaultValue ObscuredBool

Returns

ObscuredBool

Get(string, ObscuredByte)

public static ObscuredByte Get(string key, ObscuredByte defaultValue = default)

Parameters

key string
defaultValue ObscuredByte

Returns

ObscuredByte

Get(string, ObscuredChar)

public static ObscuredChar Get(string key, ObscuredChar defaultValue = default)

Parameters

key string
defaultValue ObscuredChar

Returns

ObscuredChar

Get(string, ObscuredDateTime)

public static ObscuredDateTime Get(string key, ObscuredDateTime defaultValue = default)

Parameters

key string
defaultValue ObscuredDateTime

Returns

ObscuredDateTime

Get(string, ObscuredDateTimeOffset)

public static ObscuredDateTimeOffset Get(string key, ObscuredDateTimeOffset defaultValue = default)

Parameters

key string
defaultValue ObscuredDateTimeOffset

Returns

ObscuredDateTimeOffset

Get(string, ObscuredDecimal)

public static ObscuredDecimal Get(string key, ObscuredDecimal defaultValue = default)

Parameters

key string
defaultValue ObscuredDecimal

Returns

ObscuredDecimal

Get(string, ObscuredDouble)

public static ObscuredDouble Get(string key, ObscuredDouble defaultValue = default)

Parameters

key string
defaultValue ObscuredDouble

Returns

ObscuredDouble

Get(string, ObscuredFloat)

public static ObscuredFloat Get(string key, ObscuredFloat defaultValue = default)

Parameters

key string
defaultValue ObscuredFloat

Returns

ObscuredFloat

Get(string, ObscuredGuid)

public static ObscuredGuid Get(string key, ObscuredGuid defaultValue = default)

Parameters

key string
defaultValue ObscuredGuid

Returns

ObscuredGuid

Get(string, ObscuredInt)

public static ObscuredInt Get(string key, ObscuredInt defaultValue = default)

Parameters

key string
defaultValue ObscuredInt

Returns

ObscuredInt

Get(string, ObscuredLong)

public static ObscuredLong Get(string key, ObscuredLong defaultValue = default)

Parameters

key string
defaultValue ObscuredLong

Returns

ObscuredLong

Get(string, ObscuredQuaternion)

public static ObscuredQuaternion Get(string key, ObscuredQuaternion defaultValue = default)

Parameters

key string
defaultValue ObscuredQuaternion

Returns

ObscuredQuaternion

Get(string, ObscuredSByte)

public static ObscuredSByte Get(string key, ObscuredSByte defaultValue = default)

Parameters

key string
defaultValue ObscuredSByte

Returns

ObscuredSByte

Get(string, ObscuredShort)

public static ObscuredShort Get(string key, ObscuredShort defaultValue = default)

Parameters

key string
defaultValue ObscuredShort

Returns

ObscuredShort

Get(string, ObscuredString)

public static ObscuredString Get(string key, ObscuredString defaultValue = null)

Parameters

key string
defaultValue ObscuredString

Returns

ObscuredString

Get(string, ObscuredUInt)

public static ObscuredUInt Get(string key, ObscuredUInt defaultValue = default)

Parameters

key string
defaultValue ObscuredUInt

Returns

ObscuredUInt

Get(string, ObscuredULong)

public static ObscuredULong Get(string key, ObscuredULong defaultValue = default)

Parameters

key string
defaultValue ObscuredULong

Returns

ObscuredULong

Get(string, ObscuredUShort)

public static ObscuredUShort Get(string key, ObscuredUShort defaultValue = default)

Parameters

key string
defaultValue ObscuredUShort

Returns

ObscuredUShort

Get(string, ObscuredVector2)

public static ObscuredVector2 Get(string key, ObscuredVector2 defaultValue = default)

Parameters

key string
defaultValue ObscuredVector2

Returns

ObscuredVector2

Get(string, ObscuredVector2Int)

public static ObscuredVector2Int Get(string key, ObscuredVector2Int defaultValue = default)

Parameters

key string
defaultValue ObscuredVector2Int

Returns

ObscuredVector2Int

Get(string, ObscuredVector3)

public static ObscuredVector3 Get(string key, ObscuredVector3 defaultValue = default)

Parameters

key string
defaultValue ObscuredVector3

Returns

ObscuredVector3

Get(string, ObscuredVector3Int)

public static ObscuredVector3Int Get(string key, ObscuredVector3Int defaultValue = default)

Parameters

key string
defaultValue ObscuredVector3Int

Returns

ObscuredVector3Int

GetFloat(string, float)

public static float GetFloat(string key, float defaultValue = 0)

Parameters

key string
defaultValue float

Returns

float

GetInt(string, int)

public static int GetInt(string key, int defaultValue = 0)

Parameters

key string
defaultValue int

Returns

int

GetRawValue(string, out string, out string)

Allows to get the raw encrypted key and value for the specified key.

public static bool GetRawValue(string key, out string encryptedKey, out string encryptedValue)

Parameters

key string
encryptedKey string
encryptedValue string

Returns

bool

True if key was found and false otherwise.

GetString(string, string)

public static string GetString(string key, string defaultValue = "")

Parameters

key string
defaultValue string

Returns

string

Get<T>(string, T)

Returns the value corresponding to key in the preference file if it exists. If it doesn't exist, it will return defaultValue.

public static T Get<T>(string key, T defaultValue = default)

Parameters

key string
defaultValue T

Returns

T

Type Parameters

T

Remarks

⚠️ Warning: Not all types are supported, see StorageDataType for list of supported types.

// Read values with default fallback
var coins = ObscuredPrefs.Get("coins", 0);
var playerName = ObscuredPrefs.Get("playerName", "Unknown");

// Read with explicit type specification
var coinsTyped = ObscuredPrefs.Get<int>("coins");
var playerNameTyped = ObscuredPrefs.Get<string>("playerName");

HasKey(string)

Returns true if key exists in the ObscuredPrefs or in regular PlayerPrefs.

public static bool HasKey(string key)

Parameters

key string

Returns

bool

MigrateFromACTkV1(string, string)

Use to migrate ACTk v1.* prefs to the newer format.

public static bool MigrateFromACTkV1(string key, string cryptoKey = "e806f6")

Parameters

key string

Prefs key you wish to migrate.

cryptoKey string

Custom crypto key you used for ObscuredPrefs, if any. Don't use this argument to utilize default key from ACTk v1.

Returns

bool

True if migration was successful, false otherwise.

Save()

Writes all modified preferences to disk.

public static void Save()

Remarks

By default, Unity writes preferences to disk on Application Quit.
In case when the game crashes or otherwise prematurely exits, you might want to write the preferences at sensible 'checkpoints' in your game.
This function will write to disk potentially causing a small hiccup, therefore it is not recommended to call during actual game play.

Set(string, ObscuredBigInteger)

public static void Set(string key, ObscuredBigInteger value)

Parameters

key string
value ObscuredBigInteger

Set(string, ObscuredBool)

public static void Set(string key, ObscuredBool value)

Parameters

key string
value ObscuredBool

Set(string, ObscuredByte)

public static void Set(string key, ObscuredByte value)

Parameters

key string
value ObscuredByte

Set(string, ObscuredChar)

public static void Set(string key, ObscuredChar value)

Parameters

key string
value ObscuredChar

Set(string, ObscuredDateTime)

public static void Set(string key, ObscuredDateTime value)

Parameters

key string
value ObscuredDateTime

Set(string, ObscuredDateTimeOffset)

public static void Set(string key, ObscuredDateTimeOffset value)

Parameters

key string
value ObscuredDateTimeOffset

Set(string, ObscuredDecimal)

public static void Set(string key, ObscuredDecimal value)

Parameters

key string
value ObscuredDecimal

Set(string, ObscuredDouble)

public static void Set(string key, ObscuredDouble value)

Parameters

key string
value ObscuredDouble

Set(string, ObscuredFloat)

public static void Set(string key, ObscuredFloat value)

Parameters

key string
value ObscuredFloat

Set(string, ObscuredGuid)

public static void Set(string key, ObscuredGuid value)

Parameters

key string
value ObscuredGuid

Set(string, ObscuredInt)

public static void Set(string key, ObscuredInt value)

Parameters

key string
value ObscuredInt

Set(string, ObscuredLong)

public static void Set(string key, ObscuredLong value)

Parameters

key string
value ObscuredLong

Set(string, ObscuredQuaternion)

public static void Set(string key, ObscuredQuaternion value)

Parameters

key string
value ObscuredQuaternion

Set(string, ObscuredSByte)

public static void Set(string key, ObscuredSByte value)

Parameters

key string
value ObscuredSByte

Set(string, ObscuredShort)

public static void Set(string key, ObscuredShort value)

Parameters

key string
value ObscuredShort

Set(string, ObscuredString)

public static void Set(string key, ObscuredString value)

Parameters

key string
value ObscuredString

Set(string, ObscuredUInt)

public static void Set(string key, ObscuredUInt value)

Parameters

key string
value ObscuredUInt

Set(string, ObscuredULong)

public static void Set(string key, ObscuredULong value)

Parameters

key string
value ObscuredULong

Set(string, ObscuredUShort)

public static void Set(string key, ObscuredUShort value)

Parameters

key string
value ObscuredUShort

Set(string, ObscuredVector2)

public static void Set(string key, ObscuredVector2 value)

Parameters

key string
value ObscuredVector2

Set(string, ObscuredVector2Int)

public static void Set(string key, ObscuredVector2Int value)

Parameters

key string
value ObscuredVector2Int

Set(string, ObscuredVector3)

public static void Set(string key, ObscuredVector3 value)

Parameters

key string
value ObscuredVector3

Set(string, ObscuredVector3Int)

public static void Set(string key, ObscuredVector3Int value)

Parameters

key string
value ObscuredVector3Int

SetFloat(string, float)

public static void SetFloat(string key, float value)

Parameters

key string
value float

SetInt(string, int)

public static void SetInt(string key, int value)

Parameters

key string
value int

SetRawValue(string, string)

Allows to set the raw encrypted key and value.

public static void SetRawValue(string encryptedKey, string encryptedValue)

Parameters

encryptedKey string
encryptedValue string

SetString(string, string)

public static void SetString(string key, string value)

Parameters

key string
value string

Set<T>(string, T)

Sets the value of the preference identified by key.

public static void Set<T>(string key, T value)

Parameters

key string
value T

Type Parameters

T

Remarks

⚠️ Warning: Not all types are supported, see StorageDataType for list of supported types.

Events

DataFromAnotherDeviceDetected

Allows reacting on detection of possible saves from some other device.

public static event Action DataFromAnotherDeviceDetected

Event Type

Action

Remarks

May be helpful to ban potential cheaters, trying to use someone's purchased in-app goods for example.
May fire on same device in case cheater manipulates saved data in some special way.
Fires only once.

📝 Note: May be called if same device ID was changed (pretty rare case though).

NotGenuineDataDetected

Allows reacting on saves alteration. May be helpful for banning potential cheaters.

public static event Action NotGenuineDataDetected

Event Type

Action

Remarks

Fires only once.