@necessarysdk/react-native 0.0.0-stage → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +2 -0
  4. package/NecessaryReactNative.podspec +23 -0
  5. package/README.md +429 -2
  6. package/android/build.gradle +83 -0
  7. package/android/src/main/AndroidManifest.xml +41 -0
  8. package/android/src/main/cpp/CMakeLists.txt +7 -0
  9. package/android/src/main/cpp/code_integrity.cpp +484 -0
  10. package/android/src/main/java/com/necessarysdk/reactnative/Causes.kt +49 -0
  11. package/android/src/main/java/com/necessarysdk/reactnative/InstallationKeyManager.kt +388 -0
  12. package/android/src/main/java/com/necessarysdk/reactnative/IntegrityProbeManager.kt +1152 -0
  13. package/android/src/main/java/com/necessarysdk/reactnative/KeyPresence.kt +62 -0
  14. package/android/src/main/java/com/necessarysdk/reactnative/NecessaryModules.kt +94 -0
  15. package/android/src/main/java/com/necessarysdk/reactnative/NecessaryNative.kt +323 -0
  16. package/android/src/main/java/com/necessarysdk/reactnative/NecessaryPackage.kt +38 -0
  17. package/android/src/main/java/com/necessarysdk/reactnative/ProbeReads.kt +314 -0
  18. package/android/src/main/java/com/necessarysdk/reactnative/ScreenGuard.kt +56 -0
  19. package/android/src/main/java/com/necessarysdk/reactnative/SecureStore.kt +127 -0
  20. package/android/src/main/java/com/necessarysdk/reactnative/StepUpKeyEntry.kt +57 -0
  21. package/android/src/main/java/com/necessarysdk/reactnative/StepUpKeyManager.kt +762 -0
  22. package/contract/report-1/android-8-ios-5/RULES.md +149 -0
  23. package/contract/report-1/android-8-ios-5/report.schema.json +2753 -0
  24. package/contract/report-1/android-8-ios-5/samples/android-8-complete.json +205 -0
  25. package/contract/report-1/android-8-ios-5/samples/android-8-incomplete.json +205 -0
  26. package/contract/report-1/android-8-ios-5/samples/android-8-invalid.json +205 -0
  27. package/contract/report-1/android-8-ios-5/samples/android-8-location-one-fix.json +228 -0
  28. package/contract/report-1/android-8-ios-5/samples/android-8-location-two-fixes.json +228 -0
  29. package/contract/report-1/android-8-ios-5/samples/android-8-refused.json +208 -0
  30. package/contract/report-1/android-8-ios-5/samples/ios-5-complete.json +106 -0
  31. package/contract/report-1/android-8-ios-5/samples/ios-5-incomplete.json +105 -0
  32. package/contract/report-1/android-8-ios-5/samples/ios-5-invalid.json +107 -0
  33. package/contract/report-1/android-8-ios-5/samples/ios-5-partial.json +110 -0
  34. package/contract/report-1/android-8-ios-5/samples/ios-5-refused.json +109 -0
  35. package/doc/integration_guide.md +771 -0
  36. package/doc/measurements.md +774 -0
  37. package/ios/InstallationKeyManager.swift +694 -0
  38. package/ios/IntegrityProbeManager.swift +960 -0
  39. package/ios/NecessaryModules.h +34 -0
  40. package/ios/NecessaryModules.mm +208 -0
  41. package/ios/NecessaryNative.swift +327 -0
  42. package/ios/PrivacyInfo.xcprivacy +14 -0
  43. package/ios/ProbeReads.swift +353 -0
  44. package/lib/client.d.ts +105 -0
  45. package/lib/client.js +176 -0
  46. package/lib/collector.d.ts +18 -0
  47. package/lib/collector.js +49 -0
  48. package/lib/deviceTrust.d.ts +253 -0
  49. package/lib/deviceTrust.js +690 -0
  50. package/lib/errors.d.ts +43 -0
  51. package/lib/errors.js +56 -0
  52. package/lib/index.d.ts +18 -0
  53. package/lib/index.js +34 -0
  54. package/lib/installationKey.d.ts +62 -0
  55. package/lib/installationKey.js +185 -0
  56. package/lib/installationStore.d.ts +49 -0
  57. package/lib/installationStore.js +127 -0
  58. package/lib/native/NativeNecessaryInstallationKey.d.ts +10 -0
  59. package/lib/native/NativeNecessaryInstallationKey.js +4 -0
  60. package/lib/native/NativeNecessaryIntegrity.d.ts +8 -0
  61. package/lib/native/NativeNecessaryIntegrity.js +4 -0
  62. package/lib/native/NativeNecessarySecureScreen.d.ts +7 -0
  63. package/lib/native/NativeNecessarySecureScreen.js +4 -0
  64. package/lib/native/NativeNecessaryStepUpKey.d.ts +9 -0
  65. package/lib/native/NativeNecessaryStepUpKey.js +4 -0
  66. package/lib/native/NativeNecessaryStorage.d.ts +14 -0
  67. package/lib/native/NativeNecessaryStorage.js +4 -0
  68. package/lib/protocol.d.ts +24 -0
  69. package/lib/protocol.js +50 -0
  70. package/lib/reinstallHint.d.ts +23 -0
  71. package/lib/reinstallHint.js +65 -0
  72. package/lib/report.d.ts +62 -0
  73. package/lib/report.js +140 -0
  74. package/lib/requestProof.d.ts +116 -0
  75. package/lib/requestProof.js +220 -0
  76. package/lib/secureScreen.d.ts +15 -0
  77. package/lib/secureScreen.js +32 -0
  78. package/lib/stepUpKey.d.ts +105 -0
  79. package/lib/stepUpKey.js +187 -0
  80. package/lib/transport.d.ts +39 -0
  81. package/lib/transport.js +117 -0
  82. package/lib/util/bytes.d.ts +18 -0
  83. package/lib/util/bytes.js +207 -0
  84. package/lib/util/native.d.ts +20 -0
  85. package/lib/util/native.js +49 -0
  86. package/lib/util/release.d.ts +2 -0
  87. package/lib/util/release.js +7 -0
  88. package/lib/util/target.d.ts +18 -0
  89. package/lib/util/target.js +128 -0
  90. package/package.json +81 -4
  91. package/src/client.ts +221 -0
  92. package/src/collector.ts +64 -0
  93. package/src/deviceTrust.ts +842 -0
  94. package/src/errors.ts +71 -0
  95. package/src/index.ts +19 -0
  96. package/src/installationKey.ts +223 -0
  97. package/src/installationStore.ts +143 -0
  98. package/src/native/NativeNecessaryInstallationKey.ts +12 -0
  99. package/src/native/NativeNecessaryIntegrity.ts +15 -0
  100. package/src/native/NativeNecessarySecureScreen.ts +9 -0
  101. package/src/native/NativeNecessaryStepUpKey.ts +11 -0
  102. package/src/native/NativeNecessaryStorage.ts +16 -0
  103. package/src/protocol.ts +52 -0
  104. package/src/reinstallHint.ts +69 -0
  105. package/src/report.ts +174 -0
  106. package/src/requestProof.ts +295 -0
  107. package/src/secureScreen.ts +29 -0
  108. package/src/stepUpKey.ts +238 -0
  109. package/src/transport.ts +145 -0
  110. package/src/util/bytes.ts +194 -0
  111. package/src/util/native.ts +56 -0
  112. package/src/util/release.ts +6 -0
  113. package/src/util/target.ts +132 -0
  114. package/vectors/client_server.json +264 -0
@@ -0,0 +1,205 @@
1
+ {
2
+ "description": "A clean Android phone, Android collector 8, installed with one ABI split.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "debug_state",
7
+ "root_files",
8
+ "system_properties",
9
+ "runtime_maps",
10
+ "tracer",
11
+ "root_shell",
12
+ "selinux",
13
+ "mounts",
14
+ "frida_ports",
15
+ "instrumentation_threads",
16
+ "exec_mappings",
17
+ "code_integrity",
18
+ "developer_settings",
19
+ "emulator"
20
+ ],
21
+ "optional_probes": []
22
+ },
23
+ "expect": "complete",
24
+ "why": "Every requested measurement answered ok with all its fields; device and network volunteered; the split APK listed apart from the base APK's hash.",
25
+ "report": {
26
+ "installation_id": "00000000-0000-4000-8000-000000000001",
27
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
28
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
29
+ "collected_at": 1792857600,
30
+ "version": 1,
31
+ "platform": "android",
32
+ "collector_version": 8,
33
+ "probe_results": {
34
+ "app_identity": {
35
+ "status": "ok",
36
+ "package_name": "com.example.app",
37
+ "version_name": "2.4.1",
38
+ "version_code": 241,
39
+ "debuggable": false,
40
+ "allow_backup": false,
41
+ "cert_sha256": [
42
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
43
+ ],
44
+ "current_signers": [
45
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
46
+ ],
47
+ "signing_lineage": [
48
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
49
+ ],
50
+ "apk_sha256": "6f0c1d2e3a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f",
51
+ "split_apks": [
52
+ {
53
+ "name": "split_config.arm64_v8a.apk",
54
+ "sha256": "c6c44c7bcd69f06b7a7a3e3c93f4f1869abb38ca56a1bede8ec309250a574036"
55
+ }
56
+ ],
57
+ "installer_package": "com.android.vending",
58
+ "source_dir": "/data/app/com.example.app-1/base.apk"
59
+ },
60
+ "debug_state": {
61
+ "status": "ok",
62
+ "debugger_connected": false,
63
+ "waiting_for_debugger": false
64
+ },
65
+ "root_files": {
66
+ "status": "ok",
67
+ "found_paths": [],
68
+ "build_tags": "release-keys",
69
+ "test_keys": false
70
+ },
71
+ "system_properties": {
72
+ "status": "ok",
73
+ "properties": {
74
+ "ro.secure": "1",
75
+ "ro.debuggable": "0",
76
+ "ro.build.type": "user",
77
+ "ro.build.tags": "release-keys",
78
+ "ro.boot.verifiedbootstate": "green",
79
+ "ro.boot.flash.locked": "1",
80
+ "ro.boot.vbmeta.device_state": "locked",
81
+ "ro.boot.veritymode": "enforcing"
82
+ }
83
+ },
84
+ "runtime_maps": {
85
+ "status": "ok",
86
+ "suspicious_tokens": [],
87
+ "suspicious_line_count": 0,
88
+ "maps_lines": 412
89
+ },
90
+ "tracer": {
91
+ "status": "ok",
92
+ "tracer_pid": 0,
93
+ "seccomp": 2,
94
+ "no_new_privs": 0
95
+ },
96
+ "root_shell": {
97
+ "status": "ok",
98
+ "su_path": "",
99
+ "su_found": false
100
+ },
101
+ "selinux": {
102
+ "status": "ok",
103
+ "mode": "enforcing",
104
+ "getenforce": "Enforcing",
105
+ "enforce_value": "1"
106
+ },
107
+ "mounts": {
108
+ "status": "ok",
109
+ "protected_rw_mounts": []
110
+ },
111
+ "frida_ports": {
112
+ "status": "ok",
113
+ "open_ports": []
114
+ },
115
+ "instrumentation_threads": {
116
+ "status": "ok",
117
+ "frida_threads": [],
118
+ "glib_threads": [],
119
+ "token_threads": [],
120
+ "thread_count": 42
121
+ },
122
+ "exec_mappings": {
123
+ "status": "ok",
124
+ "wx_mappings": 0,
125
+ "wx_bytes": 0,
126
+ "deleted_exec_mappings": 0,
127
+ "deleted_exec_own_code": 0,
128
+ "deleted_exec_jit": 1,
129
+ "anon_exec_labeled": 1,
130
+ "anon_exec_unlabeled": 0,
131
+ "anon_exec_unlabeled_bytes": 0,
132
+ "maps_lines": 412,
133
+ "samples": []
134
+ },
135
+ "code_integrity": {
136
+ "status": "ok",
137
+ "checked": true,
138
+ "diff_bytes": 0,
139
+ "core_diff_bytes": 0,
140
+ "ext_diff_bytes": 0,
141
+ "ext_libs_diff": 0,
142
+ "app_diff_bytes": 0,
143
+ "app_libs_diff": 0,
144
+ "diffed_libs": "",
145
+ "protect_restore_failures": 0,
146
+ "elapsed_ms": 180,
147
+ "core_compared_bytes": 614400,
148
+ "core_expected_bytes": 614400,
149
+ "core_skipped_bytes": 0,
150
+ "core_unreadable_bytes": 0,
151
+ "core_complete": true,
152
+ "ext_compared_bytes": 2097152,
153
+ "ext_expected_bytes": 2097152,
154
+ "ext_skipped_bytes": 0,
155
+ "ext_unreadable_bytes": 0,
156
+ "ext_complete": true,
157
+ "app_compared_bytes": 4194304,
158
+ "app_expected_bytes": 4194304,
159
+ "app_skipped_bytes": 0,
160
+ "app_unreadable_bytes": 0,
161
+ "app_complete": true
162
+ },
163
+ "developer_settings": {
164
+ "status": "ok",
165
+ "developer_options_enabled": false,
166
+ "adb_enabled": false
167
+ },
168
+ "emulator": {
169
+ "status": "ok",
170
+ "suspected": false,
171
+ "reasons": [],
172
+ "model": "Pixel 8",
173
+ "manufacturer": "Google",
174
+ "product": "shiba",
175
+ "hardware": "shiba"
176
+ },
177
+ "device": {
178
+ "status": "ok",
179
+ "release": "14",
180
+ "sdk_int": 34,
181
+ "security_patch": "2026-10-01",
182
+ "manufacturer": "Google",
183
+ "brand": "google",
184
+ "model": "Pixel 8",
185
+ "device": "shiba",
186
+ "build_id": "AP2A.240905.003",
187
+ "fingerprint": "google/shiba/shiba:14/AP2A.240905.003/12231197:user/release-keys",
188
+ "abi": "arm64-v8a",
189
+ "page_size": 4096
190
+ },
191
+ "network": {
192
+ "status": "ok",
193
+ "vpn_active": false,
194
+ "http_proxy_configured": false,
195
+ "transports": [
196
+ "wifi"
197
+ ],
198
+ "interfaces": [
199
+ "wlan0"
200
+ ]
201
+ }
202
+ },
203
+ "enabled_measurements": []
204
+ }
205
+ }
@@ -0,0 +1,205 @@
1
+ {
2
+ "description": "The same phone, two reads failing.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "debug_state",
7
+ "root_files",
8
+ "system_properties",
9
+ "runtime_maps",
10
+ "tracer",
11
+ "root_shell",
12
+ "selinux",
13
+ "mounts",
14
+ "frida_ports",
15
+ "instrumentation_threads",
16
+ "exec_mappings",
17
+ "code_integrity",
18
+ "developer_settings",
19
+ "emulator"
20
+ ],
21
+ "optional_probes": []
22
+ },
23
+ "expect": "incomplete",
24
+ "why": "developer_settings could not read adb_enabled and names it in unread -- never a clean false; tracer could read nothing and answers error. Both were requested, so the evidence is incomplete, not clean and not an attack.",
25
+ "report": {
26
+ "installation_id": "00000000-0000-4000-8000-000000000001",
27
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
28
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
29
+ "collected_at": 1792857600,
30
+ "version": 1,
31
+ "platform": "android",
32
+ "collector_version": 8,
33
+ "probe_results": {
34
+ "app_identity": {
35
+ "status": "ok",
36
+ "package_name": "com.example.app",
37
+ "version_name": "2.4.1",
38
+ "version_code": 241,
39
+ "debuggable": false,
40
+ "allow_backup": false,
41
+ "cert_sha256": [
42
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
43
+ ],
44
+ "current_signers": [
45
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
46
+ ],
47
+ "signing_lineage": [
48
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
49
+ ],
50
+ "apk_sha256": "6f0c1d2e3a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f",
51
+ "split_apks": [
52
+ {
53
+ "name": "split_config.arm64_v8a.apk",
54
+ "sha256": "c6c44c7bcd69f06b7a7a3e3c93f4f1869abb38ca56a1bede8ec309250a574036"
55
+ }
56
+ ],
57
+ "installer_package": "com.android.vending",
58
+ "source_dir": "/data/app/com.example.app-1/base.apk"
59
+ },
60
+ "debug_state": {
61
+ "status": "ok",
62
+ "debugger_connected": false,
63
+ "waiting_for_debugger": false
64
+ },
65
+ "root_files": {
66
+ "status": "ok",
67
+ "found_paths": [],
68
+ "build_tags": "release-keys",
69
+ "test_keys": false
70
+ },
71
+ "system_properties": {
72
+ "status": "ok",
73
+ "properties": {
74
+ "ro.secure": "1",
75
+ "ro.debuggable": "0",
76
+ "ro.build.type": "user",
77
+ "ro.build.tags": "release-keys",
78
+ "ro.boot.verifiedbootstate": "green",
79
+ "ro.boot.flash.locked": "1",
80
+ "ro.boot.vbmeta.device_state": "locked",
81
+ "ro.boot.veritymode": "enforcing"
82
+ }
83
+ },
84
+ "runtime_maps": {
85
+ "status": "ok",
86
+ "suspicious_tokens": [],
87
+ "suspicious_line_count": 0,
88
+ "maps_lines": 412
89
+ },
90
+ "tracer": {
91
+ "status": "error",
92
+ "error": "/proc/self/status is not readable"
93
+ },
94
+ "root_shell": {
95
+ "status": "ok",
96
+ "su_path": "",
97
+ "su_found": false
98
+ },
99
+ "selinux": {
100
+ "status": "ok",
101
+ "mode": "enforcing",
102
+ "getenforce": "Enforcing",
103
+ "enforce_value": "1"
104
+ },
105
+ "mounts": {
106
+ "status": "ok",
107
+ "protected_rw_mounts": []
108
+ },
109
+ "frida_ports": {
110
+ "status": "ok",
111
+ "open_ports": []
112
+ },
113
+ "instrumentation_threads": {
114
+ "status": "ok",
115
+ "frida_threads": [],
116
+ "glib_threads": [],
117
+ "token_threads": [],
118
+ "thread_count": 42
119
+ },
120
+ "exec_mappings": {
121
+ "status": "ok",
122
+ "wx_mappings": 0,
123
+ "wx_bytes": 0,
124
+ "deleted_exec_mappings": 0,
125
+ "deleted_exec_own_code": 0,
126
+ "deleted_exec_jit": 1,
127
+ "anon_exec_labeled": 1,
128
+ "anon_exec_unlabeled": 0,
129
+ "anon_exec_unlabeled_bytes": 0,
130
+ "maps_lines": 412,
131
+ "samples": []
132
+ },
133
+ "code_integrity": {
134
+ "status": "ok",
135
+ "checked": true,
136
+ "diff_bytes": 0,
137
+ "core_diff_bytes": 0,
138
+ "ext_diff_bytes": 0,
139
+ "ext_libs_diff": 0,
140
+ "app_diff_bytes": 0,
141
+ "app_libs_diff": 0,
142
+ "diffed_libs": "",
143
+ "protect_restore_failures": 0,
144
+ "elapsed_ms": 180,
145
+ "core_compared_bytes": 614400,
146
+ "core_expected_bytes": 614400,
147
+ "core_skipped_bytes": 0,
148
+ "core_unreadable_bytes": 0,
149
+ "core_complete": true,
150
+ "ext_compared_bytes": 2097152,
151
+ "ext_expected_bytes": 2097152,
152
+ "ext_skipped_bytes": 0,
153
+ "ext_unreadable_bytes": 0,
154
+ "ext_complete": true,
155
+ "app_compared_bytes": 4194304,
156
+ "app_expected_bytes": 4194304,
157
+ "app_skipped_bytes": 0,
158
+ "app_unreadable_bytes": 0,
159
+ "app_complete": true
160
+ },
161
+ "developer_settings": {
162
+ "status": "ok",
163
+ "developer_options_enabled": false,
164
+ "unread": {
165
+ "adb_enabled": "SecurityException: denied"
166
+ }
167
+ },
168
+ "emulator": {
169
+ "status": "ok",
170
+ "suspected": false,
171
+ "reasons": [],
172
+ "model": "Pixel 8",
173
+ "manufacturer": "Google",
174
+ "product": "shiba",
175
+ "hardware": "shiba"
176
+ },
177
+ "device": {
178
+ "status": "ok",
179
+ "release": "14",
180
+ "sdk_int": 34,
181
+ "security_patch": "2026-10-01",
182
+ "manufacturer": "Google",
183
+ "brand": "google",
184
+ "model": "Pixel 8",
185
+ "device": "shiba",
186
+ "build_id": "AP2A.240905.003",
187
+ "fingerprint": "google/shiba/shiba:14/AP2A.240905.003/12231197:user/release-keys",
188
+ "abi": "arm64-v8a",
189
+ "page_size": 4096
190
+ },
191
+ "network": {
192
+ "status": "ok",
193
+ "vpn_active": false,
194
+ "http_proxy_configured": false,
195
+ "transports": [
196
+ "wifi"
197
+ ],
198
+ "interfaces": [
199
+ "wlan0"
200
+ ]
201
+ }
202
+ },
203
+ "enabled_measurements": []
204
+ }
205
+ }
@@ -0,0 +1,205 @@
1
+ {
2
+ "description": "The same phone, coverage figures that cannot all be true.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "debug_state",
7
+ "root_files",
8
+ "system_properties",
9
+ "runtime_maps",
10
+ "tracer",
11
+ "root_shell",
12
+ "selinux",
13
+ "mounts",
14
+ "frida_ports",
15
+ "instrumentation_threads",
16
+ "exec_mappings",
17
+ "code_integrity",
18
+ "developer_settings",
19
+ "emulator"
20
+ ],
21
+ "optional_probes": []
22
+ },
23
+ "expect": "invalid",
24
+ "why": "The app region's expected bytes are not compared + skipped + unreadable: figures that contradict each other are a report to distrust, not a measurement.",
25
+ "report": {
26
+ "installation_id": "00000000-0000-4000-8000-000000000001",
27
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
28
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
29
+ "collected_at": 1792857600,
30
+ "version": 1,
31
+ "platform": "android",
32
+ "collector_version": 8,
33
+ "probe_results": {
34
+ "app_identity": {
35
+ "status": "ok",
36
+ "package_name": "com.example.app",
37
+ "version_name": "2.4.1",
38
+ "version_code": 241,
39
+ "debuggable": false,
40
+ "allow_backup": false,
41
+ "cert_sha256": [
42
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
43
+ ],
44
+ "current_signers": [
45
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
46
+ ],
47
+ "signing_lineage": [
48
+ "1b38e2a5a1b0a2a8c6a5b04a8a7c5b7fbfc1c6f0d6a7a7d1bd2c5fa2b1d0a3c4"
49
+ ],
50
+ "apk_sha256": "6f0c1d2e3a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f",
51
+ "split_apks": [
52
+ {
53
+ "name": "split_config.arm64_v8a.apk",
54
+ "sha256": "c6c44c7bcd69f06b7a7a3e3c93f4f1869abb38ca56a1bede8ec309250a574036"
55
+ }
56
+ ],
57
+ "installer_package": "com.android.vending",
58
+ "source_dir": "/data/app/com.example.app-1/base.apk"
59
+ },
60
+ "debug_state": {
61
+ "status": "ok",
62
+ "debugger_connected": false,
63
+ "waiting_for_debugger": false
64
+ },
65
+ "root_files": {
66
+ "status": "ok",
67
+ "found_paths": [],
68
+ "build_tags": "release-keys",
69
+ "test_keys": false
70
+ },
71
+ "system_properties": {
72
+ "status": "ok",
73
+ "properties": {
74
+ "ro.secure": "1",
75
+ "ro.debuggable": "0",
76
+ "ro.build.type": "user",
77
+ "ro.build.tags": "release-keys",
78
+ "ro.boot.verifiedbootstate": "green",
79
+ "ro.boot.flash.locked": "1",
80
+ "ro.boot.vbmeta.device_state": "locked",
81
+ "ro.boot.veritymode": "enforcing"
82
+ }
83
+ },
84
+ "runtime_maps": {
85
+ "status": "ok",
86
+ "suspicious_tokens": [],
87
+ "suspicious_line_count": 0,
88
+ "maps_lines": 412
89
+ },
90
+ "tracer": {
91
+ "status": "ok",
92
+ "tracer_pid": 0,
93
+ "seccomp": 2,
94
+ "no_new_privs": 0
95
+ },
96
+ "root_shell": {
97
+ "status": "ok",
98
+ "su_path": "",
99
+ "su_found": false
100
+ },
101
+ "selinux": {
102
+ "status": "ok",
103
+ "mode": "enforcing",
104
+ "getenforce": "Enforcing",
105
+ "enforce_value": "1"
106
+ },
107
+ "mounts": {
108
+ "status": "ok",
109
+ "protected_rw_mounts": []
110
+ },
111
+ "frida_ports": {
112
+ "status": "ok",
113
+ "open_ports": []
114
+ },
115
+ "instrumentation_threads": {
116
+ "status": "ok",
117
+ "frida_threads": [],
118
+ "glib_threads": [],
119
+ "token_threads": [],
120
+ "thread_count": 42
121
+ },
122
+ "exec_mappings": {
123
+ "status": "ok",
124
+ "wx_mappings": 0,
125
+ "wx_bytes": 0,
126
+ "deleted_exec_mappings": 0,
127
+ "deleted_exec_own_code": 0,
128
+ "deleted_exec_jit": 1,
129
+ "anon_exec_labeled": 1,
130
+ "anon_exec_unlabeled": 0,
131
+ "anon_exec_unlabeled_bytes": 0,
132
+ "maps_lines": 412,
133
+ "samples": []
134
+ },
135
+ "code_integrity": {
136
+ "status": "ok",
137
+ "checked": true,
138
+ "diff_bytes": 0,
139
+ "core_diff_bytes": 0,
140
+ "ext_diff_bytes": 0,
141
+ "ext_libs_diff": 0,
142
+ "app_diff_bytes": 0,
143
+ "app_libs_diff": 0,
144
+ "diffed_libs": "",
145
+ "protect_restore_failures": 0,
146
+ "elapsed_ms": 180,
147
+ "core_compared_bytes": 614400,
148
+ "core_expected_bytes": 614400,
149
+ "core_skipped_bytes": 0,
150
+ "core_unreadable_bytes": 0,
151
+ "core_complete": true,
152
+ "ext_compared_bytes": 2097152,
153
+ "ext_expected_bytes": 2097152,
154
+ "ext_skipped_bytes": 0,
155
+ "ext_unreadable_bytes": 0,
156
+ "ext_complete": true,
157
+ "app_compared_bytes": 4194304,
158
+ "app_expected_bytes": 8388608,
159
+ "app_skipped_bytes": 0,
160
+ "app_unreadable_bytes": 0,
161
+ "app_complete": true
162
+ },
163
+ "developer_settings": {
164
+ "status": "ok",
165
+ "developer_options_enabled": false,
166
+ "adb_enabled": false
167
+ },
168
+ "emulator": {
169
+ "status": "ok",
170
+ "suspected": false,
171
+ "reasons": [],
172
+ "model": "Pixel 8",
173
+ "manufacturer": "Google",
174
+ "product": "shiba",
175
+ "hardware": "shiba"
176
+ },
177
+ "device": {
178
+ "status": "ok",
179
+ "release": "14",
180
+ "sdk_int": 34,
181
+ "security_patch": "2026-10-01",
182
+ "manufacturer": "Google",
183
+ "brand": "google",
184
+ "model": "Pixel 8",
185
+ "device": "shiba",
186
+ "build_id": "AP2A.240905.003",
187
+ "fingerprint": "google/shiba/shiba:14/AP2A.240905.003/12231197:user/release-keys",
188
+ "abi": "arm64-v8a",
189
+ "page_size": 4096
190
+ },
191
+ "network": {
192
+ "status": "ok",
193
+ "vpn_active": false,
194
+ "http_proxy_configured": false,
195
+ "transports": [
196
+ "wifi"
197
+ ],
198
+ "interfaces": [
199
+ "wlan0"
200
+ ]
201
+ }
202
+ },
203
+ "enabled_measurements": []
204
+ }
205
+ }