Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/build-android-demos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,14 @@ jobs:
cp -f "$demo/data_extraction_rules.xml" MASTestApp-Android/app/src/main/res/xml/data_extraction_rules.xml 2>/dev/null \
&& echo "Copied data_extraction_rules.xml for $demo" \
|| echo "No data_extraction_rules.xml found for $demo"
if [ -f "$demo/build.gradle.kts.libs" ]; then
libs_content=$(cat "$demo/build.gradle.kts.libs")
sed -i "s|// ADD_LIBS_HERE|$libs_content|g" MASTestApp-Android/app/build.gradle.kts
echo "Replaced dependencies in build.gradle.kts for $demo"
else
echo "No build.gradle.kts.libs found for $demo, skipping dependencies replacement"
fi
echo "Building APK for $demo"
cd MASTestApp-Android
Expand Down
43 changes: 41 additions & 2 deletions demos/android/MASVS-STORAGE/MASTG-DEMO-0060/MASTG-DEMO-0060.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,46 @@ id: MASTG-DEMO-0060
code: [kotlin]
test: MASTG-TEST-0287
kind: pass
status: placeholder
note: This demo shows how to store sensitive data securely in the app sandbox using the EncryptedSharedPreferences class.
---

### Sample

The code snippet below shows sample code which stores sensitive data using `String` and `StringSet` from `EncryptedSharedPreferences`.

!!! Warning

The **Jetpack security crypto library**, including the `EncryptedFile` and `EncryptedSharedPreferences` classes, has been [deprecated](https://developer.android.com/privacy-and-security/cryptography#jetpack_security_crypto_library). However, since an official replacement has not yet been released, we recommend using these classes until one is available.

{{ MastgTest.kt # build.gradle.kts.libs }}

### Steps

1. Install the app on a device (@MASTG-TECH-0005)
2. Make sure you have @MASTG-TOOL-0001 installed on your machine and the frida-server running on the device
3. Run `run.sh` to spawn the app with Frida
4. Click the **Start** button
5. Stop the script by pressing `Ctrl+C` and/or `q` to quit the Frida CLI

{{ hooks.js # run.sh }}

### Observation

The output shows all instances of strings written using `EncryptedSharedPreferences` via `SharedPreferences` that were found at runtime. A backtrace is also provided to help identify the location in the code.

{{ output.json }}

### Evaluation

This test **passes** because sensitive data is stored using `EncryptedSharedPreferences`, which encrypts both keys and values at rest. Even if an attacker gains access to the app's sandbox, the data remains encrypted.

For example, to confirm this, run the following command:

```sh
adb shell cat /data/data/org.owasp.mastestapp/shared_prefs/MasSharedPref_Sensitive_Data.xml
```

Which returns:

{{ MasSharedPref_Sensitive_Data.xml }}

The actual values are not visible in plain text, confirming that encryption is applied.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="AU+z103BuqUQYnpJY8AyhGP4jbkz01jtCY5EQGG4pVwOPhVv">AQoAYPs27SgygktthcLjII2K6yyUMBoY8F59mzWbE1ps2WT5P87ChxB0QF8R4UuBc6WRy+9R0qwpD3WOKw==</string>
<string name="__androidx_security_crypto_encrypted_prefs_key_keyset__">12a901f5a4c43d49ce7ca6c207fb4d3f7711aba5131cbbd7951bd838c6c154e3528704bf527d554ad3facc098ad4645b1d2ed0a707c1c28f12ebf24e5a9ea08c57088e7c1b43ee84272605fe1ecbf9426509054974640b23e273b73d21a1d48029e4ef3787b6b1fc9c31d590b7e37663ea81e3135b3f0d3eb067148fcbb0e37b7d5909ad7a2cfc55bc11b4f8c00e79cebbf5cbeee2aca68f7558a65b86e888aa343caeea9551d82895a0956c1a4408cdaecffd04123c0a30747970652e676f6f676c65617069732e636f6d2f676f6f676c652e63727970746f2e74696e6b2e4165735369764b6579100118cdaecffd042001</string>
<string name="__androidx_security_crypto_encrypted_prefs_value_keyset__">1286013ebf2688905cdc7062581d934cf22d866c35f5b0c3a4617ef00a4b44c2a33bb9f8c49e2a82535763dadee05ed2587811270339d066bc335db019ab60a68108652cd14a90a77b324a90c5d9ce8fae1a2da0f317b10d71e92c49ae9c0a17ec321e6f3a0c4edcb41580f16e93adfea98518127706dfbee4bef3af57f7419fd7216e89efea8b3f3d1a4208fbc18150123b0a30747970652e676f6f676c65617069732e636f6d2f676f6f676c652e63727970746f2e74696e6b2e41657347636d4b6579100118fbc181502001</string>
<string name="AU+z101V35Id7aRshk1QOi8IHsdlvcPXjNA885hbFak=">AQoAYPt6nO+4SoPqUjsZNEYzlPIZn7LtawLzrii1G0XDtQyVJOaSNNwo4OHjYx6CrYcOaSzjr8Fii72fhCSA2KTE5j0BphTnYoc0gz5j3CO/</string>
<string name="AU+z101iVWAe4pyZC7djOC9ugpEv9bxXAahqi4DNvuxcyA==">AQoAYPv4h47i7VnSEOZH5BBhnMHHb7hX8wPucI9srOw3GkBZBATxlaE5DGWP+AFn6uITZMiHZdhGXPuX6YxRr4dipYLV3hD98AlV613qYAY+seweUVfeQ6VJpVeSYmqHMyeQQEDPwqT9QJ5vKE6tWbOW95wGmGgR4D7I+NCEnV9rHoJfO1vjYdJDHzBv2akR5nY/EAWI0yXDt1wdSr1p31t/myCi7UDoknmD5Iq7MSEdzCOzP+J7LGP9Hb4EW1sjgZs5yuY42hzdfZ0QgeK8afeEIu84omuzqn0+icWc6Gkx3/rtBRJbnAGL3rOoV6MISqE5PshiVWzBflt4qPmxcn9S64ru6R9mcixn1MiKG5anG/Q=</string>
</map>
43 changes: 43 additions & 0 deletions demos/android/MASVS-STORAGE/MASTG-DEMO-0060/MastgTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.owasp.mastestapp

import android.content.Context
import androidx.core.content.edit
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey

class MastgTest(private val context: Context) {
// WARNING: In a real application, these keys should NOT be hardcoded. They should be stored securely, for instance, in the Android Keystore.
private val awsKey = "AKIAABCDEFGHIJKLMNOP"
private val githubToken = "ghp_1234567890abcdefghijklmnopqrstuvABCD"
private val preSharedKeys = hashSetOf(
"-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALfX7kbfFv3pc3JjOHQ=\n-----END PRIVATE KEY-----",
"-----BEGIN PRIVATE KEY-----\ngJXS9EwpuzK8U1TOgfplwfKEVngCE2D5FNBQWvNmuHHbigmTCabsA=\n-----END PRIVATE KEY-----"
)
private val sharedPrefsName = "MasSharedPref_Sensitive_Data"

fun mastgTest(): String {
return try {
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()

val encryptedPrefs = EncryptedSharedPreferences.create(
context,
sharedPrefsName,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

encryptedPrefs.edit {
putString("EncryptedAWSKey", awsKey)
putString("GitHubToken", githubToken)
putStringSet("preSharedKeys", preSharedKeys)
}

"Sensitive data has been written and deleted in the sandbox."
} catch (e: Exception) {
"Error during MastgTest: ${e.message ?: "Unknown error"}"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
implementation("androidx.security:security-crypto:1.1.0")
20 changes: 20 additions & 0 deletions demos/android/MASVS-STORAGE/MASTG-DEMO-0060/hooks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
var target = {
category: "STORAGE",
demo: "0060",
hooks: [
{
class: "androidx.security.crypto.EncryptedSharedPreferences$Editor",
methods: [
"putString",
"putStringSet"
]
},
{
class: "android.app.SharedPreferencesImpl$EditorImpl",
methods: [
"putString",
"putStringSet"
]
}
]
}
258 changes: 258 additions & 0 deletions demos/android/MASVS-STORAGE/MASTG-DEMO-0060/output.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
{
"id": "219ea51c-506a-45f0-a295-34febdad2ca5",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.158Z",
"class": "android.app.SharedPreferencesImpl$EditorImpl",
"method": "putString",
"stackTrace": [
"android.app.SharedPreferencesImpl$EditorImpl.putString(Native Method)",
"com.google.crypto.tink.integration.android.SharedPrefKeysetWriter.write(SharedPrefKeysetWriter.java:70)",
"com.google.crypto.tink.KeysetHandle.write(KeysetHandle.java:158)",
"com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:299)",
"com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:238)",
"androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:155)",
"androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:23)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "__androidx_security_crypto_encrypted_prefs_key_keyset__"
},
{
"type": "java.lang.String",
"value": "12a901f5a4c43d49ce7ca6c207fb4d3f7711aba5131cbbd7951bd838c6c154e3528704bf527d554ad3facc098ad4645b1d2ed0a707c1c28f12ebf24e5a9ea08c57088e7c1b43ee84272605fe1ecbf9426509054974640b23e273b73d21a1d48029e4ef3787b6b1fc9c31d590b7e37663ea81e3135b3f0d3eb067148fcbb0e37b7d5909ad7a2cfc55bc11b4f8c00e79cebbf5cbeee2aca68f7558a65b86e888aa343caeea9551d82895a0956c1a4408cdaecffd04123c0a30747970652e676f6f676c65617069732e636f6d2f676f6f676c652e63727970746f2e74696e6b2e4165735369764b6579100118cdaecffd042001"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: android.app.SharedPreferencesImpl$EditorImpl>"
}
]
}
{
"id": "2726948e-87f4-4088-a4fd-b5a3facfe460",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.203Z",
"class": "android.app.SharedPreferencesImpl$EditorImpl",
"method": "putString",
"stackTrace": [
"android.app.SharedPreferencesImpl$EditorImpl.putString(Native Method)",
"com.google.crypto.tink.integration.android.SharedPrefKeysetWriter.write(SharedPrefKeysetWriter.java:70)",
"com.google.crypto.tink.KeysetHandle.write(KeysetHandle.java:158)",
"com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:299)",
"com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:238)",
"androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:160)",
"androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:23)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "__androidx_security_crypto_encrypted_prefs_value_keyset__"
},
{
"type": "java.lang.String",
"value": "1286013ebf2688905cdc7062581d934cf22d866c35f5b0c3a4617ef00a4b44c2a33bb9f8c49e2a82535763dadee05ed2587811270339d066bc335db019ab60a68108652cd14a90a77b324a90c5d9ce8fae1a2da0f317b10d71e92c49ae9c0a17ec321e6f3a0c4edcb41580f16e93adfea98518127706dfbee4bef3af57f7419fd7216e89efea8b3f3d1a4208fbc18150123b0a30747970652e676f6f676c65617069732e636f6d2f676f6f676c652e63727970746f2e74696e6b2e41657347636d4b6579100118fbc181502001"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: android.app.SharedPreferencesImpl$EditorImpl>"
}
]
}
{
"id": "9c495048-f0db-405b-807b-01e0cfbab573",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.220Z",
"class": "android.app.SharedPreferencesImpl$EditorImpl",
"method": "putString",
"stackTrace": [
"android.app.SharedPreferencesImpl$EditorImpl.putString(Native Method)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putEncryptedObject(EncryptedSharedPreferences.java:378)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(EncryptedSharedPreferences.java:244)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:32)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "AU+z103BuqUQYnpJY8AyhGP4jbkz01jtCY5EQGG4pVwOPhVv"
},
{
"type": "java.lang.String",
"value": "AQoAYPs27SgygktthcLjII2K6yyUMBoY8F59mzWbE1ps2WT5P87ChxB0QF8R4UuBc6WRy+9R0qwpD3WOKw=="
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: android.app.SharedPreferencesImpl$EditorImpl>"
}
]
}
{
"id": "60d32d3c-210a-4a44-926f-874e02ed02b0",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.214Z",
"class": "androidx.security.crypto.EncryptedSharedPreferences$Editor",
"method": "putString",
"stackTrace": [
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:32)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)",
"java.lang.Thread.run(Thread.java:1012)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "EncryptedAWSKey"
},
{
"type": "java.lang.String",
"value": "AKIAABCDEFGHIJKLMNOP"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: androidx.security.crypto.EncryptedSharedPreferences$Editor>"
}
]
}
{
"id": "13976db9-4f60-4483-b2e3-46b0399f0222",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.228Z",
"class": "android.app.SharedPreferencesImpl$EditorImpl",
"method": "putString",
"stackTrace": [
"android.app.SharedPreferencesImpl$EditorImpl.putString(Native Method)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putEncryptedObject(EncryptedSharedPreferences.java:378)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(EncryptedSharedPreferences.java:244)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:33)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "AU+z101V35Id7aRshk1QOi8IHsdlvcPXjNA885hbFak="
},
{
"type": "java.lang.String",
"value": "AQoAYPt6nO+4SoPqUjsZNEYzlPIZn7LtawLzrii1G0XDtQyVJOaSNNwo4OHjYx6CrYcOaSzjr8Fii72fhCSA2KTE5j0BphTnYoc0gz5j3CO/"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: android.app.SharedPreferencesImpl$EditorImpl>"
}
]
}
{
"id": "29fc3b94-48ce-4d93-86ba-2a16d88ba1c5",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.222Z",
"class": "androidx.security.crypto.EncryptedSharedPreferences$Editor",
"method": "putString",
"stackTrace": [
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putString(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:33)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)",
"java.lang.Thread.run(Thread.java:1012)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "GitHubToken"
},
{
"type": "java.lang.String",
"value": "ghp_1234567890abcdefghijklmnopqrstuvABCD"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: androidx.security.crypto.EncryptedSharedPreferences$Editor>"
}
]
}
{
"id": "e5aa1f47-435e-458a-93ea-37b8c4d2ef1b",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.236Z",
"class": "android.app.SharedPreferencesImpl$EditorImpl",
"method": "putString",
"stackTrace": [
"android.app.SharedPreferencesImpl$EditorImpl.putString(Native Method)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putEncryptedObject(EncryptedSharedPreferences.java:378)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putStringSet(EncryptedSharedPreferences.java:270)",
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putStringSet(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:34)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "AU+z101iVWAe4pyZC7djOC9ugpEv9bxXAahqi4DNvuxcyA=="
},
{
"type": "java.lang.String",
"value": "AQoAYPv4h47i7VnSEOZH5BBhnMHHb7hX8wPucI9srOw3GkBZBATxlaE5DGWP+AFn6uITZMiHZdhGXPuX6YxRr4dipYLV3hD98AlV613qYAY+seweUVfeQ6VJpVeSYmqHMyeQQEDPwqT9QJ5vKE6tWbOW95wGmGgR4D7I+NCEnV9rHoJfO1vjYdJDHzBv2akR5nY/EAWI0yXDt1wdSr1p31t/myCi7UDoknmD5Iq7MSEdzCOzP+J7LGP9Hb4EW1sjgZs5yuY42hzdfZ0QgeK8afeEIu84omuzqn0+icWc6Gkx3/rtBRJbnAGL3rOoV6MISqE5PshiVWzBflt4qPmxcn9S64ru6R9mcixn1MiKG5anG/Q="
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: android.app.SharedPreferencesImpl$EditorImpl>"
}
]
}
{
"id": "53480382-6252-49e5-8b1a-bbe7cc0540f2",
"category": "STORAGE",
"time": "2025-09-22T20:53:10.230Z",
"class": "androidx.security.crypto.EncryptedSharedPreferences$Editor",
"method": "putStringSet",
"stackTrace": [
"androidx.security.crypto.EncryptedSharedPreferences$Editor.putStringSet(Native Method)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:34)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$6$lambda$5(MainActivity.kt:55)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$PtKdgqcXvbS9cMNZVWq3K3GGQKQ(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)",
"java.lang.Thread.run(Thread.java:1012)"
],
"inputParameters": [
{
"type": "java.lang.String",
"value": "preSharedKeys"
},
{
"type": "java.util.Set",
"value": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALfX7kbfFv3pc3JjOHQ=\n-----END PRIVATE KEY-----,-----BEGIN PRIVATE KEY-----\ngJXS9EwpuzK8U1TOgfplwfKEVngCE2D5FNBQWvNmuHHbigmTCabsA=\n-----END PRIVATE KEY-----"
}
],
"returnValue": [
{
"type": "android.content.SharedPreferences$Editor",
"value": "<instance: android.content.SharedPreferences$Editor, $className: androidx.security.crypto.EncryptedSharedPreferences$Editor>"
}
]
}
Loading
Loading