@necessarysdk/react-native 0.0.0-stage → 0.1.6
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.
- package/CHANGELOG.md +40 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/NecessaryReactNative.podspec +23 -0
- package/README.md +429 -2
- package/android/build.gradle +83 -0
- package/android/src/main/AndroidManifest.xml +41 -0
- package/android/src/main/cpp/CMakeLists.txt +7 -0
- package/android/src/main/cpp/code_integrity.cpp +484 -0
- package/android/src/main/java/com/necessarysdk/reactnative/Causes.kt +49 -0
- package/android/src/main/java/com/necessarysdk/reactnative/InstallationKeyManager.kt +388 -0
- package/android/src/main/java/com/necessarysdk/reactnative/IntegrityProbeManager.kt +1157 -0
- package/android/src/main/java/com/necessarysdk/reactnative/KeyPresence.kt +62 -0
- package/android/src/main/java/com/necessarysdk/reactnative/NecessaryModules.kt +94 -0
- package/android/src/main/java/com/necessarysdk/reactnative/NecessaryNative.kt +338 -0
- package/android/src/main/java/com/necessarysdk/reactnative/NecessaryPackage.kt +38 -0
- package/android/src/main/java/com/necessarysdk/reactnative/ProbeReads.kt +333 -0
- package/android/src/main/java/com/necessarysdk/reactnative/ScreenGuard.kt +56 -0
- package/android/src/main/java/com/necessarysdk/reactnative/SecureStore.kt +127 -0
- package/android/src/main/java/com/necessarysdk/reactnative/StepUpKeyEntry.kt +57 -0
- package/android/src/main/java/com/necessarysdk/reactnative/StepUpKeyManager.kt +767 -0
- package/contract/report-1/android-8-ios-5/RULES.md +149 -0
- package/contract/report-1/android-8-ios-5/report.schema.json +2753 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-complete.json +205 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-incomplete.json +205 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-invalid.json +205 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-location-one-fix.json +228 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-location-two-fixes.json +228 -0
- package/contract/report-1/android-8-ios-5/samples/android-8-refused.json +208 -0
- package/contract/report-1/android-8-ios-5/samples/ios-5-complete.json +106 -0
- package/contract/report-1/android-8-ios-5/samples/ios-5-incomplete.json +105 -0
- package/contract/report-1/android-8-ios-5/samples/ios-5-invalid.json +107 -0
- package/contract/report-1/android-8-ios-5/samples/ios-5-partial.json +110 -0
- package/contract/report-1/android-8-ios-5/samples/ios-5-refused.json +109 -0
- package/doc/integration_guide.md +771 -0
- package/doc/measurements.md +774 -0
- package/ios/InstallationKeyManager.swift +694 -0
- package/ios/IntegrityProbeManager.swift +959 -0
- package/ios/NecessaryModules.h +34 -0
- package/ios/NecessaryModules.mm +208 -0
- package/ios/NecessaryNative.swift +327 -0
- package/ios/PrivacyInfo.xcprivacy +14 -0
- package/ios/ProbeReads.swift +370 -0
- package/lib/client.d.ts +105 -0
- package/lib/client.js +176 -0
- package/lib/collector.d.ts +18 -0
- package/lib/collector.js +49 -0
- package/lib/deviceTrust.d.ts +253 -0
- package/lib/deviceTrust.js +699 -0
- package/lib/errors.d.ts +43 -0
- package/lib/errors.js +56 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.js +34 -0
- package/lib/installationKey.d.ts +62 -0
- package/lib/installationKey.js +185 -0
- package/lib/installationStore.d.ts +49 -0
- package/lib/installationStore.js +127 -0
- package/lib/native/NativeNecessaryInstallationKey.d.ts +10 -0
- package/lib/native/NativeNecessaryInstallationKey.js +4 -0
- package/lib/native/NativeNecessaryIntegrity.d.ts +8 -0
- package/lib/native/NativeNecessaryIntegrity.js +4 -0
- package/lib/native/NativeNecessarySecureScreen.d.ts +7 -0
- package/lib/native/NativeNecessarySecureScreen.js +4 -0
- package/lib/native/NativeNecessaryStepUpKey.d.ts +9 -0
- package/lib/native/NativeNecessaryStepUpKey.js +4 -0
- package/lib/native/NativeNecessaryStorage.d.ts +14 -0
- package/lib/native/NativeNecessaryStorage.js +4 -0
- package/lib/protocol.d.ts +24 -0
- package/lib/protocol.js +50 -0
- package/lib/reinstallHint.d.ts +23 -0
- package/lib/reinstallHint.js +65 -0
- package/lib/report.d.ts +62 -0
- package/lib/report.js +134 -0
- package/lib/requestProof.d.ts +116 -0
- package/lib/requestProof.js +220 -0
- package/lib/secureScreen.d.ts +15 -0
- package/lib/secureScreen.js +32 -0
- package/lib/stepUpKey.d.ts +105 -0
- package/lib/stepUpKey.js +187 -0
- package/lib/transport.d.ts +39 -0
- package/lib/transport.js +117 -0
- package/lib/util/answers.d.ts +6 -0
- package/lib/util/answers.js +16 -0
- package/lib/util/bytes.d.ts +18 -0
- package/lib/util/bytes.js +207 -0
- package/lib/util/native.d.ts +20 -0
- package/lib/util/native.js +49 -0
- package/lib/util/release.d.ts +2 -0
- package/lib/util/release.js +7 -0
- package/lib/util/target.d.ts +18 -0
- package/lib/util/target.js +128 -0
- package/package.json +81 -4
- package/src/client.ts +221 -0
- package/src/collector.ts +64 -0
- package/src/deviceTrust.ts +851 -0
- package/src/errors.ts +71 -0
- package/src/index.ts +19 -0
- package/src/installationKey.ts +223 -0
- package/src/installationStore.ts +143 -0
- package/src/native/NativeNecessaryInstallationKey.ts +12 -0
- package/src/native/NativeNecessaryIntegrity.ts +15 -0
- package/src/native/NativeNecessarySecureScreen.ts +9 -0
- package/src/native/NativeNecessaryStepUpKey.ts +11 -0
- package/src/native/NativeNecessaryStorage.ts +16 -0
- package/src/protocol.ts +52 -0
- package/src/reinstallHint.ts +69 -0
- package/src/report.ts +168 -0
- package/src/requestProof.ts +295 -0
- package/src/secureScreen.ts +29 -0
- package/src/stepUpKey.ts +238 -0
- package/src/transport.ts +145 -0
- package/src/util/answers.ts +15 -0
- package/src/util/bytes.ts +194 -0
- package/src/util/native.ts +56 -0
- package/src/util/release.ts +6 -0
- package/src/util/target.ts +132 -0
- package/vectors/client_server.json +264 -0
|
@@ -0,0 +1,2753 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:devicetrust:integrity-report:1:android-8:ios-5",
|
|
4
|
+
"title": "Necessary integrity report, format 1",
|
|
5
|
+
"description": "The JSON a collector signs (report_payload, decoded) under evidence contracts Android 8 and iOS 5. Well-formedness only: whether a measurement is complete is in the x- annotations and RULES.md.",
|
|
6
|
+
"x-contract": {
|
|
7
|
+
"report_format": 1,
|
|
8
|
+
"android": 8,
|
|
9
|
+
"ios": 5,
|
|
10
|
+
"max_payload_bytes": 65536
|
|
11
|
+
},
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": [
|
|
14
|
+
"version",
|
|
15
|
+
"installation_id",
|
|
16
|
+
"challenge_id",
|
|
17
|
+
"platform",
|
|
18
|
+
"challenge_nonce",
|
|
19
|
+
"collected_at",
|
|
20
|
+
"collector_version",
|
|
21
|
+
"probe_results"
|
|
22
|
+
],
|
|
23
|
+
"additionalProperties": true,
|
|
24
|
+
"properties": {
|
|
25
|
+
"version": {
|
|
26
|
+
"const": 1
|
|
27
|
+
},
|
|
28
|
+
"installation_id": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
|
31
|
+
},
|
|
32
|
+
"challenge_id": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
|
35
|
+
},
|
|
36
|
+
"platform": {
|
|
37
|
+
"enum": [
|
|
38
|
+
"android",
|
|
39
|
+
"ios"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"challenge_nonce": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"pattern": "^[A-Za-z0-9_-]{43}$",
|
|
45
|
+
"description": "the challenge's 32-byte nonce, base64url without padding, exactly as issued"
|
|
46
|
+
},
|
|
47
|
+
"collected_at": {
|
|
48
|
+
"type": "integer",
|
|
49
|
+
"minimum": 0,
|
|
50
|
+
"x-unit": "Unix seconds, UTC"
|
|
51
|
+
},
|
|
52
|
+
"collector_version": {
|
|
53
|
+
"type": "integer",
|
|
54
|
+
"minimum": 1,
|
|
55
|
+
"maximum": 1000,
|
|
56
|
+
"x-unit": "the collector's version on its platform"
|
|
57
|
+
},
|
|
58
|
+
"probe_results": {
|
|
59
|
+
"type": "object"
|
|
60
|
+
},
|
|
61
|
+
"enabled_measurements": {
|
|
62
|
+
"type": "array",
|
|
63
|
+
"maxItems": 7,
|
|
64
|
+
"items": {
|
|
65
|
+
"enum": [
|
|
66
|
+
"local_addresses",
|
|
67
|
+
"accessibility",
|
|
68
|
+
"notification_access",
|
|
69
|
+
"other_access",
|
|
70
|
+
"screen_capture",
|
|
71
|
+
"location",
|
|
72
|
+
"mock_location"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"description": "the personal measurements this app's developers enabled"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"allOf": [
|
|
79
|
+
{
|
|
80
|
+
"if": {
|
|
81
|
+
"properties": {
|
|
82
|
+
"platform": {
|
|
83
|
+
"const": "android"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"then": {
|
|
88
|
+
"properties": {
|
|
89
|
+
"collector_version": {
|
|
90
|
+
"minimum": 8
|
|
91
|
+
},
|
|
92
|
+
"probe_results": {
|
|
93
|
+
"$ref": "#/$defs/android.probe_results"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"if": {
|
|
100
|
+
"properties": {
|
|
101
|
+
"platform": {
|
|
102
|
+
"const": "ios"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"then": {
|
|
107
|
+
"properties": {
|
|
108
|
+
"collector_version": {
|
|
109
|
+
"minimum": 5
|
|
110
|
+
},
|
|
111
|
+
"probe_results": {
|
|
112
|
+
"$ref": "#/$defs/ios.probe_results"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"$defs": {
|
|
119
|
+
"unread": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"maxProperties": 64,
|
|
122
|
+
"propertyNames": {
|
|
123
|
+
"minLength": 1,
|
|
124
|
+
"maxLength": 128
|
|
125
|
+
},
|
|
126
|
+
"additionalProperties": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"minLength": 1,
|
|
129
|
+
"maxLength": 160
|
|
130
|
+
},
|
|
131
|
+
"description": "the parts this probe could not read, each with why: never a clean no"
|
|
132
|
+
},
|
|
133
|
+
"app_entry": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"required": [
|
|
136
|
+
"package"
|
|
137
|
+
],
|
|
138
|
+
"additionalProperties": false,
|
|
139
|
+
"properties": {
|
|
140
|
+
"package": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"maxLength": 128,
|
|
143
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z0-9_]+)*$"
|
|
144
|
+
},
|
|
145
|
+
"service": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"maxLength": 200
|
|
148
|
+
},
|
|
149
|
+
"system": {
|
|
150
|
+
"type": "boolean"
|
|
151
|
+
},
|
|
152
|
+
"installer": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"maxLength": 128
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"android.app_identity": {
|
|
159
|
+
"type": "object",
|
|
160
|
+
"required": [
|
|
161
|
+
"status"
|
|
162
|
+
],
|
|
163
|
+
"properties": {
|
|
164
|
+
"status": {
|
|
165
|
+
"enum": [
|
|
166
|
+
"ok",
|
|
167
|
+
"error",
|
|
168
|
+
"unsupported",
|
|
169
|
+
"not_enabled"
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
"error": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"description": "why the probe could not measure"
|
|
175
|
+
},
|
|
176
|
+
"error_type": {
|
|
177
|
+
"description": "the failure's kind (Android)"
|
|
178
|
+
},
|
|
179
|
+
"reason": {
|
|
180
|
+
"description": "why the probe is unsupported here"
|
|
181
|
+
},
|
|
182
|
+
"unread": {
|
|
183
|
+
"$ref": "#/$defs/unread"
|
|
184
|
+
},
|
|
185
|
+
"package_name": {
|
|
186
|
+
"type": "string"
|
|
187
|
+
},
|
|
188
|
+
"apk_sha256": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
191
|
+
"description": "the SHA-256 of the base APK alone, never its splits"
|
|
192
|
+
},
|
|
193
|
+
"cert_sha256": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"items": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"debuggable": {
|
|
201
|
+
"type": "boolean"
|
|
202
|
+
},
|
|
203
|
+
"allow_backup": {
|
|
204
|
+
"type": "boolean"
|
|
205
|
+
},
|
|
206
|
+
"current_signers": {
|
|
207
|
+
"type": "array",
|
|
208
|
+
"maxItems": 8,
|
|
209
|
+
"items": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"signing_lineage": {
|
|
215
|
+
"type": "array",
|
|
216
|
+
"maxItems": 8,
|
|
217
|
+
"items": {
|
|
218
|
+
"type": "string",
|
|
219
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
"split_apks": {
|
|
223
|
+
"type": "array",
|
|
224
|
+
"maxItems": 64,
|
|
225
|
+
"uniqueItems": true,
|
|
226
|
+
"items": {
|
|
227
|
+
"type": "object",
|
|
228
|
+
"required": [
|
|
229
|
+
"name",
|
|
230
|
+
"sha256"
|
|
231
|
+
],
|
|
232
|
+
"additionalProperties": false,
|
|
233
|
+
"properties": {
|
|
234
|
+
"name": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"minLength": 1,
|
|
237
|
+
"maxLength": 128
|
|
238
|
+
},
|
|
239
|
+
"sha256": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
"description": "the split APKs, apart from apk_sha256 (the base APK's alone), sorted by name; empty without splits"
|
|
246
|
+
},
|
|
247
|
+
"version_name": {
|
|
248
|
+
"description": "the app's version name"
|
|
249
|
+
},
|
|
250
|
+
"version_code": {
|
|
251
|
+
"description": "the app's version code"
|
|
252
|
+
},
|
|
253
|
+
"installer_package": {
|
|
254
|
+
"description": "the package that installed the app; left out or null when none is named"
|
|
255
|
+
},
|
|
256
|
+
"source_dir": {
|
|
257
|
+
"description": "the base APK's path"
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": true,
|
|
261
|
+
"description": "the installed app: package, the base APK's hash, the signing certificates, flags, install source, and the split APKs apart",
|
|
262
|
+
"x-answered": "when the backend requests it",
|
|
263
|
+
"x-complete-when-ok": [
|
|
264
|
+
"allow_backup",
|
|
265
|
+
"apk_sha256",
|
|
266
|
+
"cert_sha256",
|
|
267
|
+
"debuggable",
|
|
268
|
+
"package_name"
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"android.debug_state": {
|
|
272
|
+
"type": "object",
|
|
273
|
+
"required": [
|
|
274
|
+
"status"
|
|
275
|
+
],
|
|
276
|
+
"properties": {
|
|
277
|
+
"status": {
|
|
278
|
+
"enum": [
|
|
279
|
+
"ok",
|
|
280
|
+
"error",
|
|
281
|
+
"unsupported",
|
|
282
|
+
"not_enabled"
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
"error": {
|
|
286
|
+
"type": "string",
|
|
287
|
+
"description": "why the probe could not measure"
|
|
288
|
+
},
|
|
289
|
+
"error_type": {
|
|
290
|
+
"description": "the failure's kind (Android)"
|
|
291
|
+
},
|
|
292
|
+
"reason": {
|
|
293
|
+
"description": "why the probe is unsupported here"
|
|
294
|
+
},
|
|
295
|
+
"unread": {
|
|
296
|
+
"$ref": "#/$defs/unread"
|
|
297
|
+
},
|
|
298
|
+
"debugger_connected": {
|
|
299
|
+
"type": "boolean"
|
|
300
|
+
},
|
|
301
|
+
"waiting_for_debugger": {
|
|
302
|
+
"type": "boolean"
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"additionalProperties": true,
|
|
306
|
+
"description": "a Java debugger attached or awaited",
|
|
307
|
+
"x-answered": "when the backend requests it",
|
|
308
|
+
"x-complete-when-ok": [
|
|
309
|
+
"debugger_connected",
|
|
310
|
+
"waiting_for_debugger"
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
"android.root_files": {
|
|
314
|
+
"type": "object",
|
|
315
|
+
"required": [
|
|
316
|
+
"status"
|
|
317
|
+
],
|
|
318
|
+
"properties": {
|
|
319
|
+
"status": {
|
|
320
|
+
"enum": [
|
|
321
|
+
"ok",
|
|
322
|
+
"error",
|
|
323
|
+
"unsupported",
|
|
324
|
+
"not_enabled"
|
|
325
|
+
]
|
|
326
|
+
},
|
|
327
|
+
"error": {
|
|
328
|
+
"type": "string",
|
|
329
|
+
"description": "why the probe could not measure"
|
|
330
|
+
},
|
|
331
|
+
"error_type": {
|
|
332
|
+
"description": "the failure's kind (Android)"
|
|
333
|
+
},
|
|
334
|
+
"reason": {
|
|
335
|
+
"description": "why the probe is unsupported here"
|
|
336
|
+
},
|
|
337
|
+
"unread": {
|
|
338
|
+
"$ref": "#/$defs/unread"
|
|
339
|
+
},
|
|
340
|
+
"found_paths": {
|
|
341
|
+
"type": "array"
|
|
342
|
+
},
|
|
343
|
+
"test_keys": {
|
|
344
|
+
"type": "boolean"
|
|
345
|
+
},
|
|
346
|
+
"build_tags": {
|
|
347
|
+
"description": "the build's tags, e.g. release-keys"
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"additionalProperties": true,
|
|
351
|
+
"description": "known root, su and framework paths that exist; a test-keys build",
|
|
352
|
+
"x-answered": "when the backend requests it",
|
|
353
|
+
"x-complete-when-ok": [
|
|
354
|
+
"found_paths",
|
|
355
|
+
"test_keys"
|
|
356
|
+
]
|
|
357
|
+
},
|
|
358
|
+
"android.system_properties": {
|
|
359
|
+
"type": "object",
|
|
360
|
+
"required": [
|
|
361
|
+
"status"
|
|
362
|
+
],
|
|
363
|
+
"properties": {
|
|
364
|
+
"status": {
|
|
365
|
+
"enum": [
|
|
366
|
+
"ok",
|
|
367
|
+
"error",
|
|
368
|
+
"unsupported",
|
|
369
|
+
"not_enabled"
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
"error": {
|
|
373
|
+
"type": "string",
|
|
374
|
+
"description": "why the probe could not measure"
|
|
375
|
+
},
|
|
376
|
+
"error_type": {
|
|
377
|
+
"description": "the failure's kind (Android)"
|
|
378
|
+
},
|
|
379
|
+
"reason": {
|
|
380
|
+
"description": "why the probe is unsupported here"
|
|
381
|
+
},
|
|
382
|
+
"unread": {
|
|
383
|
+
"$ref": "#/$defs/unread"
|
|
384
|
+
},
|
|
385
|
+
"properties": {
|
|
386
|
+
"type": "object"
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
"additionalProperties": true,
|
|
390
|
+
"description": "build and boot-security properties",
|
|
391
|
+
"x-answered": "when the backend requests it",
|
|
392
|
+
"x-complete-when-ok": [
|
|
393
|
+
"properties"
|
|
394
|
+
]
|
|
395
|
+
},
|
|
396
|
+
"android.runtime_maps": {
|
|
397
|
+
"type": "object",
|
|
398
|
+
"required": [
|
|
399
|
+
"status"
|
|
400
|
+
],
|
|
401
|
+
"properties": {
|
|
402
|
+
"status": {
|
|
403
|
+
"enum": [
|
|
404
|
+
"ok",
|
|
405
|
+
"error",
|
|
406
|
+
"unsupported",
|
|
407
|
+
"not_enabled"
|
|
408
|
+
]
|
|
409
|
+
},
|
|
410
|
+
"error": {
|
|
411
|
+
"type": "string",
|
|
412
|
+
"description": "why the probe could not measure"
|
|
413
|
+
},
|
|
414
|
+
"error_type": {
|
|
415
|
+
"description": "the failure's kind (Android)"
|
|
416
|
+
},
|
|
417
|
+
"reason": {
|
|
418
|
+
"description": "why the probe is unsupported here"
|
|
419
|
+
},
|
|
420
|
+
"unread": {
|
|
421
|
+
"$ref": "#/$defs/unread"
|
|
422
|
+
},
|
|
423
|
+
"suspicious_tokens": {
|
|
424
|
+
"type": "array"
|
|
425
|
+
},
|
|
426
|
+
"maps_lines": {
|
|
427
|
+
"type": "integer",
|
|
428
|
+
"minimum": 0,
|
|
429
|
+
"maximum": 9007199254740992,
|
|
430
|
+
"x-unit": "count"
|
|
431
|
+
},
|
|
432
|
+
"suspicious_line_count": {
|
|
433
|
+
"type": "integer",
|
|
434
|
+
"minimum": 0,
|
|
435
|
+
"maximum": 9007199254740992,
|
|
436
|
+
"x-unit": "count"
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
"additionalProperties": true,
|
|
440
|
+
"description": "instrumentation and hooking frameworks named in the app's memory map",
|
|
441
|
+
"x-answered": "when the backend requests it",
|
|
442
|
+
"x-complete-when-ok": [
|
|
443
|
+
"maps_lines",
|
|
444
|
+
"suspicious_tokens"
|
|
445
|
+
]
|
|
446
|
+
},
|
|
447
|
+
"android.tracer": {
|
|
448
|
+
"type": "object",
|
|
449
|
+
"required": [
|
|
450
|
+
"status"
|
|
451
|
+
],
|
|
452
|
+
"properties": {
|
|
453
|
+
"status": {
|
|
454
|
+
"enum": [
|
|
455
|
+
"ok",
|
|
456
|
+
"error",
|
|
457
|
+
"unsupported",
|
|
458
|
+
"not_enabled"
|
|
459
|
+
]
|
|
460
|
+
},
|
|
461
|
+
"error": {
|
|
462
|
+
"type": "string",
|
|
463
|
+
"description": "why the probe could not measure"
|
|
464
|
+
},
|
|
465
|
+
"error_type": {
|
|
466
|
+
"description": "the failure's kind (Android)"
|
|
467
|
+
},
|
|
468
|
+
"reason": {
|
|
469
|
+
"description": "why the probe is unsupported here"
|
|
470
|
+
},
|
|
471
|
+
"unread": {
|
|
472
|
+
"$ref": "#/$defs/unread"
|
|
473
|
+
},
|
|
474
|
+
"tracer_pid": {
|
|
475
|
+
"type": "integer",
|
|
476
|
+
"minimum": 0,
|
|
477
|
+
"maximum": 9007199254740992,
|
|
478
|
+
"x-unit": "process ID; 0: none"
|
|
479
|
+
},
|
|
480
|
+
"seccomp": {
|
|
481
|
+
"description": "the Seccomp mode from /proc/self/status; -1 when absent"
|
|
482
|
+
},
|
|
483
|
+
"no_new_privs": {
|
|
484
|
+
"description": "NoNewPrivs from /proc/self/status; -1 when absent"
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
"additionalProperties": true,
|
|
488
|
+
"description": "another process tracing the app",
|
|
489
|
+
"x-answered": "when the backend requests it",
|
|
490
|
+
"x-complete-when-ok": [
|
|
491
|
+
"tracer_pid"
|
|
492
|
+
]
|
|
493
|
+
},
|
|
494
|
+
"android.root_shell": {
|
|
495
|
+
"type": "object",
|
|
496
|
+
"required": [
|
|
497
|
+
"status"
|
|
498
|
+
],
|
|
499
|
+
"properties": {
|
|
500
|
+
"status": {
|
|
501
|
+
"enum": [
|
|
502
|
+
"ok",
|
|
503
|
+
"error",
|
|
504
|
+
"unsupported",
|
|
505
|
+
"not_enabled"
|
|
506
|
+
]
|
|
507
|
+
},
|
|
508
|
+
"error": {
|
|
509
|
+
"type": "string",
|
|
510
|
+
"description": "why the probe could not measure"
|
|
511
|
+
},
|
|
512
|
+
"error_type": {
|
|
513
|
+
"description": "the failure's kind (Android)"
|
|
514
|
+
},
|
|
515
|
+
"reason": {
|
|
516
|
+
"description": "why the probe is unsupported here"
|
|
517
|
+
},
|
|
518
|
+
"unread": {
|
|
519
|
+
"$ref": "#/$defs/unread"
|
|
520
|
+
},
|
|
521
|
+
"su_found": {
|
|
522
|
+
"type": "boolean"
|
|
523
|
+
},
|
|
524
|
+
"su_path": {
|
|
525
|
+
"description": "where su resolved; empty when it did not"
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
"additionalProperties": true,
|
|
529
|
+
"description": "whether su resolves from the app's shell",
|
|
530
|
+
"x-answered": "when the backend requests it",
|
|
531
|
+
"x-complete-when-ok": [
|
|
532
|
+
"su_found"
|
|
533
|
+
]
|
|
534
|
+
},
|
|
535
|
+
"android.selinux": {
|
|
536
|
+
"type": "object",
|
|
537
|
+
"required": [
|
|
538
|
+
"status"
|
|
539
|
+
],
|
|
540
|
+
"properties": {
|
|
541
|
+
"status": {
|
|
542
|
+
"enum": [
|
|
543
|
+
"ok",
|
|
544
|
+
"error",
|
|
545
|
+
"unsupported",
|
|
546
|
+
"not_enabled"
|
|
547
|
+
]
|
|
548
|
+
},
|
|
549
|
+
"error": {
|
|
550
|
+
"type": "string",
|
|
551
|
+
"description": "why the probe could not measure"
|
|
552
|
+
},
|
|
553
|
+
"error_type": {
|
|
554
|
+
"description": "the failure's kind (Android)"
|
|
555
|
+
},
|
|
556
|
+
"reason": {
|
|
557
|
+
"description": "why the probe is unsupported here"
|
|
558
|
+
},
|
|
559
|
+
"unread": {
|
|
560
|
+
"$ref": "#/$defs/unread"
|
|
561
|
+
},
|
|
562
|
+
"mode": {
|
|
563
|
+
"enum": [
|
|
564
|
+
"enforcing",
|
|
565
|
+
"permissive",
|
|
566
|
+
"disabled",
|
|
567
|
+
"unknown"
|
|
568
|
+
],
|
|
569
|
+
"description": "unknown when the app could not read it: not evidence of anything"
|
|
570
|
+
},
|
|
571
|
+
"getenforce": {
|
|
572
|
+
"type": "string"
|
|
573
|
+
},
|
|
574
|
+
"enforce_value": {
|
|
575
|
+
"type": "string"
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"additionalProperties": true,
|
|
579
|
+
"description": "the SELinux mode, read two ways",
|
|
580
|
+
"x-answered": "when the backend requests it",
|
|
581
|
+
"x-complete-when-ok": [
|
|
582
|
+
"enforce_value",
|
|
583
|
+
"getenforce",
|
|
584
|
+
"mode"
|
|
585
|
+
]
|
|
586
|
+
},
|
|
587
|
+
"android.mounts": {
|
|
588
|
+
"type": "object",
|
|
589
|
+
"required": [
|
|
590
|
+
"status"
|
|
591
|
+
],
|
|
592
|
+
"properties": {
|
|
593
|
+
"status": {
|
|
594
|
+
"enum": [
|
|
595
|
+
"ok",
|
|
596
|
+
"error",
|
|
597
|
+
"unsupported",
|
|
598
|
+
"not_enabled"
|
|
599
|
+
]
|
|
600
|
+
},
|
|
601
|
+
"error": {
|
|
602
|
+
"type": "string",
|
|
603
|
+
"description": "why the probe could not measure"
|
|
604
|
+
},
|
|
605
|
+
"error_type": {
|
|
606
|
+
"description": "the failure's kind (Android)"
|
|
607
|
+
},
|
|
608
|
+
"reason": {
|
|
609
|
+
"description": "why the probe is unsupported here"
|
|
610
|
+
},
|
|
611
|
+
"unread": {
|
|
612
|
+
"$ref": "#/$defs/unread"
|
|
613
|
+
},
|
|
614
|
+
"protected_rw_mounts": {
|
|
615
|
+
"type": "array"
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
"additionalProperties": true,
|
|
619
|
+
"description": "system partitions mounted writable",
|
|
620
|
+
"x-answered": "when the backend requests it",
|
|
621
|
+
"x-complete-when-ok": [
|
|
622
|
+
"protected_rw_mounts"
|
|
623
|
+
]
|
|
624
|
+
},
|
|
625
|
+
"android.frida_ports": {
|
|
626
|
+
"type": "object",
|
|
627
|
+
"required": [
|
|
628
|
+
"status"
|
|
629
|
+
],
|
|
630
|
+
"properties": {
|
|
631
|
+
"status": {
|
|
632
|
+
"enum": [
|
|
633
|
+
"ok",
|
|
634
|
+
"error",
|
|
635
|
+
"unsupported",
|
|
636
|
+
"not_enabled"
|
|
637
|
+
]
|
|
638
|
+
},
|
|
639
|
+
"error": {
|
|
640
|
+
"type": "string",
|
|
641
|
+
"description": "why the probe could not measure"
|
|
642
|
+
},
|
|
643
|
+
"error_type": {
|
|
644
|
+
"description": "the failure's kind (Android)"
|
|
645
|
+
},
|
|
646
|
+
"reason": {
|
|
647
|
+
"description": "why the probe is unsupported here"
|
|
648
|
+
},
|
|
649
|
+
"unread": {
|
|
650
|
+
"$ref": "#/$defs/unread"
|
|
651
|
+
},
|
|
652
|
+
"open_ports": {
|
|
653
|
+
"type": "array"
|
|
654
|
+
}
|
|
655
|
+
},
|
|
656
|
+
"additionalProperties": true,
|
|
657
|
+
"description": "Frida's default local ports accepting connections",
|
|
658
|
+
"x-answered": "when the backend requests it",
|
|
659
|
+
"x-complete-when-ok": [
|
|
660
|
+
"open_ports"
|
|
661
|
+
]
|
|
662
|
+
},
|
|
663
|
+
"android.instrumentation_threads": {
|
|
664
|
+
"type": "object",
|
|
665
|
+
"required": [
|
|
666
|
+
"status"
|
|
667
|
+
],
|
|
668
|
+
"properties": {
|
|
669
|
+
"status": {
|
|
670
|
+
"enum": [
|
|
671
|
+
"ok",
|
|
672
|
+
"error",
|
|
673
|
+
"unsupported",
|
|
674
|
+
"not_enabled"
|
|
675
|
+
]
|
|
676
|
+
},
|
|
677
|
+
"error": {
|
|
678
|
+
"type": "string",
|
|
679
|
+
"description": "why the probe could not measure"
|
|
680
|
+
},
|
|
681
|
+
"error_type": {
|
|
682
|
+
"description": "the failure's kind (Android)"
|
|
683
|
+
},
|
|
684
|
+
"reason": {
|
|
685
|
+
"description": "why the probe is unsupported here"
|
|
686
|
+
},
|
|
687
|
+
"unread": {
|
|
688
|
+
"$ref": "#/$defs/unread"
|
|
689
|
+
},
|
|
690
|
+
"frida_threads": {
|
|
691
|
+
"type": "array"
|
|
692
|
+
},
|
|
693
|
+
"token_threads": {
|
|
694
|
+
"type": "array"
|
|
695
|
+
},
|
|
696
|
+
"glib_threads": {
|
|
697
|
+
"type": "array"
|
|
698
|
+
},
|
|
699
|
+
"thread_count": {
|
|
700
|
+
"type": "integer",
|
|
701
|
+
"minimum": 0,
|
|
702
|
+
"maximum": 9007199254740992,
|
|
703
|
+
"x-unit": "count"
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
"additionalProperties": true,
|
|
707
|
+
"description": "threads an instrumentation runtime creates, even renamed",
|
|
708
|
+
"x-answered": "when the backend requests it",
|
|
709
|
+
"x-complete-when-ok": [
|
|
710
|
+
"frida_threads",
|
|
711
|
+
"glib_threads",
|
|
712
|
+
"thread_count",
|
|
713
|
+
"token_threads"
|
|
714
|
+
]
|
|
715
|
+
},
|
|
716
|
+
"android.exec_mappings": {
|
|
717
|
+
"type": "object",
|
|
718
|
+
"required": [
|
|
719
|
+
"status"
|
|
720
|
+
],
|
|
721
|
+
"properties": {
|
|
722
|
+
"status": {
|
|
723
|
+
"enum": [
|
|
724
|
+
"ok",
|
|
725
|
+
"error",
|
|
726
|
+
"unsupported",
|
|
727
|
+
"not_enabled"
|
|
728
|
+
]
|
|
729
|
+
},
|
|
730
|
+
"error": {
|
|
731
|
+
"type": "string",
|
|
732
|
+
"description": "why the probe could not measure"
|
|
733
|
+
},
|
|
734
|
+
"error_type": {
|
|
735
|
+
"description": "the failure's kind (Android)"
|
|
736
|
+
},
|
|
737
|
+
"reason": {
|
|
738
|
+
"description": "why the probe is unsupported here"
|
|
739
|
+
},
|
|
740
|
+
"unread": {
|
|
741
|
+
"$ref": "#/$defs/unread"
|
|
742
|
+
},
|
|
743
|
+
"wx_mappings": {
|
|
744
|
+
"type": "integer",
|
|
745
|
+
"minimum": 0,
|
|
746
|
+
"maximum": 9007199254740992,
|
|
747
|
+
"x-unit": "count"
|
|
748
|
+
},
|
|
749
|
+
"deleted_exec_mappings": {
|
|
750
|
+
"type": "integer",
|
|
751
|
+
"minimum": 0,
|
|
752
|
+
"maximum": 9007199254740992,
|
|
753
|
+
"x-unit": "count"
|
|
754
|
+
},
|
|
755
|
+
"wx_bytes": {
|
|
756
|
+
"type": "integer",
|
|
757
|
+
"minimum": 0,
|
|
758
|
+
"maximum": 9007199254740992,
|
|
759
|
+
"x-unit": "bytes"
|
|
760
|
+
},
|
|
761
|
+
"wx_size_classes": {
|
|
762
|
+
"type": "string"
|
|
763
|
+
},
|
|
764
|
+
"wx_smallest_bytes": {
|
|
765
|
+
"type": "integer",
|
|
766
|
+
"minimum": 0,
|
|
767
|
+
"maximum": 9007199254740992,
|
|
768
|
+
"x-unit": "bytes"
|
|
769
|
+
},
|
|
770
|
+
"wx_largest_bytes": {
|
|
771
|
+
"type": "integer",
|
|
772
|
+
"minimum": 0,
|
|
773
|
+
"maximum": 9007199254740992,
|
|
774
|
+
"x-unit": "bytes"
|
|
775
|
+
},
|
|
776
|
+
"deleted_exec_own_code": {
|
|
777
|
+
"type": "integer",
|
|
778
|
+
"minimum": 0,
|
|
779
|
+
"maximum": 9007199254740992,
|
|
780
|
+
"x-unit": "count"
|
|
781
|
+
},
|
|
782
|
+
"deleted_exec_jit": {
|
|
783
|
+
"type": "integer",
|
|
784
|
+
"minimum": 0,
|
|
785
|
+
"maximum": 9007199254740992,
|
|
786
|
+
"x-unit": "count"
|
|
787
|
+
},
|
|
788
|
+
"anon_exec_labeled": {
|
|
789
|
+
"type": "integer",
|
|
790
|
+
"minimum": 0,
|
|
791
|
+
"maximum": 9007199254740992,
|
|
792
|
+
"x-unit": "count"
|
|
793
|
+
},
|
|
794
|
+
"anon_exec_unlabeled": {
|
|
795
|
+
"type": "integer",
|
|
796
|
+
"minimum": 0,
|
|
797
|
+
"maximum": 9007199254740992,
|
|
798
|
+
"x-unit": "count"
|
|
799
|
+
},
|
|
800
|
+
"anon_exec_unlabeled_bytes": {
|
|
801
|
+
"type": "integer",
|
|
802
|
+
"minimum": 0,
|
|
803
|
+
"maximum": 9007199254740992,
|
|
804
|
+
"x-unit": "bytes"
|
|
805
|
+
},
|
|
806
|
+
"maps_lines": {
|
|
807
|
+
"type": "integer",
|
|
808
|
+
"minimum": 0,
|
|
809
|
+
"maximum": 9007199254740992,
|
|
810
|
+
"x-unit": "count"
|
|
811
|
+
},
|
|
812
|
+
"samples": {
|
|
813
|
+
"type": "array"
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"additionalProperties": true,
|
|
817
|
+
"description": "memory both writable and executable, executable memory from deleted files, unlabelled executable regions",
|
|
818
|
+
"x-answered": "when the backend requests it",
|
|
819
|
+
"x-complete-when-ok": [
|
|
820
|
+
"deleted_exec_mappings",
|
|
821
|
+
"deleted_exec_own_code",
|
|
822
|
+
"maps_lines",
|
|
823
|
+
"wx_mappings"
|
|
824
|
+
]
|
|
825
|
+
},
|
|
826
|
+
"android.code_integrity": {
|
|
827
|
+
"type": "object",
|
|
828
|
+
"required": [
|
|
829
|
+
"status"
|
|
830
|
+
],
|
|
831
|
+
"properties": {
|
|
832
|
+
"status": {
|
|
833
|
+
"enum": [
|
|
834
|
+
"ok",
|
|
835
|
+
"error",
|
|
836
|
+
"unsupported",
|
|
837
|
+
"not_enabled"
|
|
838
|
+
]
|
|
839
|
+
},
|
|
840
|
+
"error": {
|
|
841
|
+
"type": "string",
|
|
842
|
+
"description": "why the probe could not measure"
|
|
843
|
+
},
|
|
844
|
+
"error_type": {
|
|
845
|
+
"description": "the failure's kind (Android)"
|
|
846
|
+
},
|
|
847
|
+
"reason": {
|
|
848
|
+
"description": "why the probe is unsupported here"
|
|
849
|
+
},
|
|
850
|
+
"unread": {
|
|
851
|
+
"$ref": "#/$defs/unread"
|
|
852
|
+
},
|
|
853
|
+
"checked": {
|
|
854
|
+
"type": "boolean"
|
|
855
|
+
},
|
|
856
|
+
"diff_bytes": {
|
|
857
|
+
"type": "integer",
|
|
858
|
+
"minimum": 0,
|
|
859
|
+
"maximum": 9007199254740992,
|
|
860
|
+
"x-unit": "bytes"
|
|
861
|
+
},
|
|
862
|
+
"core_compared_bytes": {
|
|
863
|
+
"type": "integer",
|
|
864
|
+
"minimum": 0,
|
|
865
|
+
"maximum": 9007199254740992,
|
|
866
|
+
"x-unit": "bytes"
|
|
867
|
+
},
|
|
868
|
+
"ext_diff_bytes": {
|
|
869
|
+
"type": "integer",
|
|
870
|
+
"minimum": 0,
|
|
871
|
+
"maximum": 9007199254740992,
|
|
872
|
+
"x-unit": "bytes"
|
|
873
|
+
},
|
|
874
|
+
"ext_compared_bytes": {
|
|
875
|
+
"type": "integer",
|
|
876
|
+
"minimum": 0,
|
|
877
|
+
"maximum": 9007199254740992,
|
|
878
|
+
"x-unit": "bytes"
|
|
879
|
+
},
|
|
880
|
+
"app_diff_bytes": {
|
|
881
|
+
"type": "integer",
|
|
882
|
+
"minimum": 0,
|
|
883
|
+
"maximum": 9007199254740992,
|
|
884
|
+
"x-unit": "bytes"
|
|
885
|
+
},
|
|
886
|
+
"app_compared_bytes": {
|
|
887
|
+
"type": "integer",
|
|
888
|
+
"minimum": 0,
|
|
889
|
+
"maximum": 9007199254740992,
|
|
890
|
+
"x-unit": "bytes"
|
|
891
|
+
},
|
|
892
|
+
"core_expected_bytes": {
|
|
893
|
+
"type": "integer",
|
|
894
|
+
"minimum": 0,
|
|
895
|
+
"maximum": 9007199254740992,
|
|
896
|
+
"x-unit": "bytes"
|
|
897
|
+
},
|
|
898
|
+
"core_skipped_bytes": {
|
|
899
|
+
"type": "integer",
|
|
900
|
+
"minimum": 0,
|
|
901
|
+
"maximum": 9007199254740992,
|
|
902
|
+
"x-unit": "bytes"
|
|
903
|
+
},
|
|
904
|
+
"core_unreadable_bytes": {
|
|
905
|
+
"type": "integer",
|
|
906
|
+
"minimum": 0,
|
|
907
|
+
"maximum": 9007199254740992,
|
|
908
|
+
"x-unit": "bytes"
|
|
909
|
+
},
|
|
910
|
+
"ext_expected_bytes": {
|
|
911
|
+
"type": "integer",
|
|
912
|
+
"minimum": 0,
|
|
913
|
+
"maximum": 9007199254740992,
|
|
914
|
+
"x-unit": "bytes"
|
|
915
|
+
},
|
|
916
|
+
"ext_skipped_bytes": {
|
|
917
|
+
"type": "integer",
|
|
918
|
+
"minimum": 0,
|
|
919
|
+
"maximum": 9007199254740992,
|
|
920
|
+
"x-unit": "bytes"
|
|
921
|
+
},
|
|
922
|
+
"ext_unreadable_bytes": {
|
|
923
|
+
"type": "integer",
|
|
924
|
+
"minimum": 0,
|
|
925
|
+
"maximum": 9007199254740992,
|
|
926
|
+
"x-unit": "bytes"
|
|
927
|
+
},
|
|
928
|
+
"app_expected_bytes": {
|
|
929
|
+
"type": "integer",
|
|
930
|
+
"minimum": 0,
|
|
931
|
+
"maximum": 9007199254740992,
|
|
932
|
+
"x-unit": "bytes"
|
|
933
|
+
},
|
|
934
|
+
"app_skipped_bytes": {
|
|
935
|
+
"type": "integer",
|
|
936
|
+
"minimum": 0,
|
|
937
|
+
"maximum": 9007199254740992,
|
|
938
|
+
"x-unit": "bytes"
|
|
939
|
+
},
|
|
940
|
+
"app_unreadable_bytes": {
|
|
941
|
+
"type": "integer",
|
|
942
|
+
"minimum": 0,
|
|
943
|
+
"maximum": 9007199254740992,
|
|
944
|
+
"x-unit": "bytes"
|
|
945
|
+
},
|
|
946
|
+
"core_complete": {
|
|
947
|
+
"type": "boolean"
|
|
948
|
+
},
|
|
949
|
+
"ext_complete": {
|
|
950
|
+
"type": "boolean"
|
|
951
|
+
},
|
|
952
|
+
"app_complete": {
|
|
953
|
+
"type": "boolean"
|
|
954
|
+
},
|
|
955
|
+
"protect_restore_failures": {
|
|
956
|
+
"type": "integer",
|
|
957
|
+
"minimum": 0,
|
|
958
|
+
"maximum": 9007199254740992,
|
|
959
|
+
"x-unit": "count"
|
|
960
|
+
},
|
|
961
|
+
"xom_regions_unlocked": {
|
|
962
|
+
"type": "integer",
|
|
963
|
+
"minimum": 0,
|
|
964
|
+
"maximum": 9007199254740992,
|
|
965
|
+
"x-unit": "count"
|
|
966
|
+
},
|
|
967
|
+
"xom_regions_unreadable": {
|
|
968
|
+
"type": "integer",
|
|
969
|
+
"minimum": 0,
|
|
970
|
+
"maximum": 9007199254740992,
|
|
971
|
+
"x-unit": "count"
|
|
972
|
+
},
|
|
973
|
+
"elapsed_ms": {
|
|
974
|
+
"type": "integer",
|
|
975
|
+
"minimum": 0,
|
|
976
|
+
"maximum": 9007199254740992,
|
|
977
|
+
"x-unit": "milliseconds"
|
|
978
|
+
},
|
|
979
|
+
"app_outside_count": {
|
|
980
|
+
"type": "integer",
|
|
981
|
+
"minimum": 0,
|
|
982
|
+
"maximum": 9007199254740992,
|
|
983
|
+
"x-unit": "count"
|
|
984
|
+
},
|
|
985
|
+
"app_outside_files": {
|
|
986
|
+
"type": "array",
|
|
987
|
+
"maxItems": 32,
|
|
988
|
+
"uniqueItems": true,
|
|
989
|
+
"items": {
|
|
990
|
+
"type": "string",
|
|
991
|
+
"minLength": 1,
|
|
992
|
+
"maxLength": 128
|
|
993
|
+
},
|
|
994
|
+
"description": "the app's own executable files mapped outside the app region, by file name, sorted, at most 32 (app_outside_count counts them all)"
|
|
995
|
+
},
|
|
996
|
+
"core_diff_bytes": {
|
|
997
|
+
"description": "bytes that differ in the core system libraries"
|
|
998
|
+
},
|
|
999
|
+
"ext_libs_diff": {
|
|
1000
|
+
"description": "extended system libraries with a difference"
|
|
1001
|
+
},
|
|
1002
|
+
"app_libs_diff": {
|
|
1003
|
+
"description": "app libraries with a difference"
|
|
1004
|
+
},
|
|
1005
|
+
"diffed_libs": {
|
|
1006
|
+
"description": "the libraries with a difference, comma-separated"
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
1009
|
+
"additionalProperties": true,
|
|
1010
|
+
"description": "the app's native code and system libraries in memory compared with their files, region by region",
|
|
1011
|
+
"x-answered": "when the backend requests it",
|
|
1012
|
+
"x-complete-when-ok": [
|
|
1013
|
+
"app_compared_bytes",
|
|
1014
|
+
"app_diff_bytes",
|
|
1015
|
+
"checked",
|
|
1016
|
+
"core_compared_bytes",
|
|
1017
|
+
"diff_bytes",
|
|
1018
|
+
"ext_compared_bytes",
|
|
1019
|
+
"ext_diff_bytes"
|
|
1020
|
+
],
|
|
1021
|
+
"x-complete-when-checked": [
|
|
1022
|
+
"app_expected_bytes",
|
|
1023
|
+
"core_expected_bytes",
|
|
1024
|
+
"ext_expected_bytes"
|
|
1025
|
+
]
|
|
1026
|
+
},
|
|
1027
|
+
"android.developer_settings": {
|
|
1028
|
+
"type": "object",
|
|
1029
|
+
"required": [
|
|
1030
|
+
"status"
|
|
1031
|
+
],
|
|
1032
|
+
"properties": {
|
|
1033
|
+
"status": {
|
|
1034
|
+
"enum": [
|
|
1035
|
+
"ok",
|
|
1036
|
+
"error",
|
|
1037
|
+
"unsupported",
|
|
1038
|
+
"not_enabled"
|
|
1039
|
+
]
|
|
1040
|
+
},
|
|
1041
|
+
"error": {
|
|
1042
|
+
"type": "string",
|
|
1043
|
+
"description": "why the probe could not measure"
|
|
1044
|
+
},
|
|
1045
|
+
"error_type": {
|
|
1046
|
+
"description": "the failure's kind (Android)"
|
|
1047
|
+
},
|
|
1048
|
+
"reason": {
|
|
1049
|
+
"description": "why the probe is unsupported here"
|
|
1050
|
+
},
|
|
1051
|
+
"unread": {
|
|
1052
|
+
"$ref": "#/$defs/unread"
|
|
1053
|
+
},
|
|
1054
|
+
"developer_options_enabled": {
|
|
1055
|
+
"type": "boolean"
|
|
1056
|
+
},
|
|
1057
|
+
"adb_enabled": {
|
|
1058
|
+
"type": "boolean"
|
|
1059
|
+
}
|
|
1060
|
+
},
|
|
1061
|
+
"additionalProperties": true,
|
|
1062
|
+
"description": "developer options and USB debugging",
|
|
1063
|
+
"x-answered": "when the backend requests it",
|
|
1064
|
+
"x-complete-when-ok": [
|
|
1065
|
+
"adb_enabled",
|
|
1066
|
+
"developer_options_enabled"
|
|
1067
|
+
]
|
|
1068
|
+
},
|
|
1069
|
+
"android.emulator": {
|
|
1070
|
+
"type": "object",
|
|
1071
|
+
"required": [
|
|
1072
|
+
"status"
|
|
1073
|
+
],
|
|
1074
|
+
"properties": {
|
|
1075
|
+
"status": {
|
|
1076
|
+
"enum": [
|
|
1077
|
+
"ok",
|
|
1078
|
+
"error",
|
|
1079
|
+
"unsupported",
|
|
1080
|
+
"not_enabled"
|
|
1081
|
+
]
|
|
1082
|
+
},
|
|
1083
|
+
"error": {
|
|
1084
|
+
"type": "string",
|
|
1085
|
+
"description": "why the probe could not measure"
|
|
1086
|
+
},
|
|
1087
|
+
"error_type": {
|
|
1088
|
+
"description": "the failure's kind (Android)"
|
|
1089
|
+
},
|
|
1090
|
+
"reason": {
|
|
1091
|
+
"description": "why the probe is unsupported here"
|
|
1092
|
+
},
|
|
1093
|
+
"unread": {
|
|
1094
|
+
"$ref": "#/$defs/unread"
|
|
1095
|
+
},
|
|
1096
|
+
"suspected": {
|
|
1097
|
+
"type": "boolean"
|
|
1098
|
+
},
|
|
1099
|
+
"reasons": {
|
|
1100
|
+
"description": "the build values that looked like an emulator"
|
|
1101
|
+
},
|
|
1102
|
+
"model": {
|
|
1103
|
+
"description": "the build's model"
|
|
1104
|
+
},
|
|
1105
|
+
"manufacturer": {
|
|
1106
|
+
"description": "the build's manufacturer"
|
|
1107
|
+
},
|
|
1108
|
+
"product": {
|
|
1109
|
+
"description": "the build's product"
|
|
1110
|
+
},
|
|
1111
|
+
"hardware": {
|
|
1112
|
+
"description": "the build's hardware"
|
|
1113
|
+
}
|
|
1114
|
+
},
|
|
1115
|
+
"additionalProperties": true,
|
|
1116
|
+
"description": "build values typical of an emulator",
|
|
1117
|
+
"x-answered": "when the backend requests it",
|
|
1118
|
+
"x-complete-when-ok": [
|
|
1119
|
+
"suspected"
|
|
1120
|
+
]
|
|
1121
|
+
},
|
|
1122
|
+
"android.device": {
|
|
1123
|
+
"type": "object",
|
|
1124
|
+
"required": [
|
|
1125
|
+
"status"
|
|
1126
|
+
],
|
|
1127
|
+
"properties": {
|
|
1128
|
+
"status": {
|
|
1129
|
+
"enum": [
|
|
1130
|
+
"ok",
|
|
1131
|
+
"error",
|
|
1132
|
+
"unsupported",
|
|
1133
|
+
"not_enabled"
|
|
1134
|
+
]
|
|
1135
|
+
},
|
|
1136
|
+
"error": {
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"description": "why the probe could not measure"
|
|
1139
|
+
},
|
|
1140
|
+
"error_type": {
|
|
1141
|
+
"description": "the failure's kind (Android)"
|
|
1142
|
+
},
|
|
1143
|
+
"reason": {
|
|
1144
|
+
"description": "why the probe is unsupported here"
|
|
1145
|
+
},
|
|
1146
|
+
"unread": {
|
|
1147
|
+
"$ref": "#/$defs/unread"
|
|
1148
|
+
},
|
|
1149
|
+
"release": {
|
|
1150
|
+
"type": "string"
|
|
1151
|
+
},
|
|
1152
|
+
"sdk_int": {
|
|
1153
|
+
"type": "integer",
|
|
1154
|
+
"minimum": 0,
|
|
1155
|
+
"maximum": 9007199254740992,
|
|
1156
|
+
"x-unit": "Android API level"
|
|
1157
|
+
},
|
|
1158
|
+
"security_patch": {
|
|
1159
|
+
"type": "string"
|
|
1160
|
+
},
|
|
1161
|
+
"manufacturer": {
|
|
1162
|
+
"type": "string"
|
|
1163
|
+
},
|
|
1164
|
+
"brand": {
|
|
1165
|
+
"type": "string"
|
|
1166
|
+
},
|
|
1167
|
+
"model": {
|
|
1168
|
+
"type": "string"
|
|
1169
|
+
},
|
|
1170
|
+
"device": {
|
|
1171
|
+
"type": "string"
|
|
1172
|
+
},
|
|
1173
|
+
"build_id": {
|
|
1174
|
+
"type": "string"
|
|
1175
|
+
},
|
|
1176
|
+
"fingerprint": {
|
|
1177
|
+
"type": "string"
|
|
1178
|
+
},
|
|
1179
|
+
"abi": {
|
|
1180
|
+
"type": "string"
|
|
1181
|
+
},
|
|
1182
|
+
"page_size": {
|
|
1183
|
+
"type": "integer",
|
|
1184
|
+
"minimum": 0,
|
|
1185
|
+
"maximum": 9007199254740992,
|
|
1186
|
+
"x-unit": "bytes"
|
|
1187
|
+
}
|
|
1188
|
+
},
|
|
1189
|
+
"additionalProperties": true,
|
|
1190
|
+
"description": "the OS version, the security patch level, model, build, the app's ABI, memory page size",
|
|
1191
|
+
"x-answered": "volunteered on every scan",
|
|
1192
|
+
"x-parts": [
|
|
1193
|
+
"sdk_int"
|
|
1194
|
+
]
|
|
1195
|
+
},
|
|
1196
|
+
"android.network": {
|
|
1197
|
+
"type": "object",
|
|
1198
|
+
"required": [
|
|
1199
|
+
"status"
|
|
1200
|
+
],
|
|
1201
|
+
"properties": {
|
|
1202
|
+
"status": {
|
|
1203
|
+
"enum": [
|
|
1204
|
+
"ok",
|
|
1205
|
+
"error",
|
|
1206
|
+
"unsupported",
|
|
1207
|
+
"not_enabled"
|
|
1208
|
+
]
|
|
1209
|
+
},
|
|
1210
|
+
"error": {
|
|
1211
|
+
"type": "string",
|
|
1212
|
+
"description": "why the probe could not measure"
|
|
1213
|
+
},
|
|
1214
|
+
"error_type": {
|
|
1215
|
+
"description": "the failure's kind (Android)"
|
|
1216
|
+
},
|
|
1217
|
+
"reason": {
|
|
1218
|
+
"description": "why the probe is unsupported here"
|
|
1219
|
+
},
|
|
1220
|
+
"unread": {
|
|
1221
|
+
"$ref": "#/$defs/unread"
|
|
1222
|
+
},
|
|
1223
|
+
"vpn_active": {
|
|
1224
|
+
"type": "boolean"
|
|
1225
|
+
},
|
|
1226
|
+
"http_proxy_configured": {
|
|
1227
|
+
"type": "boolean"
|
|
1228
|
+
},
|
|
1229
|
+
"transports": {
|
|
1230
|
+
"type": "array"
|
|
1231
|
+
},
|
|
1232
|
+
"interfaces": {
|
|
1233
|
+
"type": "array"
|
|
1234
|
+
}
|
|
1235
|
+
},
|
|
1236
|
+
"additionalProperties": true,
|
|
1237
|
+
"description": "a VPN up on any network; an HTTP proxy set",
|
|
1238
|
+
"x-answered": "volunteered on every scan",
|
|
1239
|
+
"x-parts": [
|
|
1240
|
+
"vpn_active"
|
|
1241
|
+
]
|
|
1242
|
+
},
|
|
1243
|
+
"android.local_addresses": {
|
|
1244
|
+
"type": "object",
|
|
1245
|
+
"required": [
|
|
1246
|
+
"status"
|
|
1247
|
+
],
|
|
1248
|
+
"properties": {
|
|
1249
|
+
"status": {
|
|
1250
|
+
"enum": [
|
|
1251
|
+
"ok",
|
|
1252
|
+
"error",
|
|
1253
|
+
"unsupported",
|
|
1254
|
+
"not_enabled"
|
|
1255
|
+
]
|
|
1256
|
+
},
|
|
1257
|
+
"error": {
|
|
1258
|
+
"type": "string",
|
|
1259
|
+
"description": "why the probe could not measure"
|
|
1260
|
+
},
|
|
1261
|
+
"error_type": {
|
|
1262
|
+
"description": "the failure's kind (Android)"
|
|
1263
|
+
},
|
|
1264
|
+
"reason": {
|
|
1265
|
+
"description": "why the probe is unsupported here"
|
|
1266
|
+
},
|
|
1267
|
+
"unread": {
|
|
1268
|
+
"$ref": "#/$defs/unread"
|
|
1269
|
+
},
|
|
1270
|
+
"addresses": {
|
|
1271
|
+
"type": "array",
|
|
1272
|
+
"maxItems": 64,
|
|
1273
|
+
"items": {
|
|
1274
|
+
"type": "object",
|
|
1275
|
+
"required": [
|
|
1276
|
+
"interface",
|
|
1277
|
+
"address"
|
|
1278
|
+
],
|
|
1279
|
+
"additionalProperties": false,
|
|
1280
|
+
"properties": {
|
|
1281
|
+
"interface": {
|
|
1282
|
+
"type": "string",
|
|
1283
|
+
"maxLength": 64
|
|
1284
|
+
},
|
|
1285
|
+
"address": {
|
|
1286
|
+
"type": "string",
|
|
1287
|
+
"maxLength": 64
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
},
|
|
1292
|
+
"truncated": {
|
|
1293
|
+
"type": "boolean"
|
|
1294
|
+
}
|
|
1295
|
+
},
|
|
1296
|
+
"additionalProperties": true,
|
|
1297
|
+
"description": "the phone's own IP addresses, link-local ones left out",
|
|
1298
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1299
|
+
"x-parts": [
|
|
1300
|
+
"addresses"
|
|
1301
|
+
]
|
|
1302
|
+
},
|
|
1303
|
+
"android.accessibility": {
|
|
1304
|
+
"type": "object",
|
|
1305
|
+
"required": [
|
|
1306
|
+
"status"
|
|
1307
|
+
],
|
|
1308
|
+
"properties": {
|
|
1309
|
+
"status": {
|
|
1310
|
+
"enum": [
|
|
1311
|
+
"ok",
|
|
1312
|
+
"error",
|
|
1313
|
+
"unsupported",
|
|
1314
|
+
"not_enabled"
|
|
1315
|
+
]
|
|
1316
|
+
},
|
|
1317
|
+
"error": {
|
|
1318
|
+
"type": "string",
|
|
1319
|
+
"description": "why the probe could not measure"
|
|
1320
|
+
},
|
|
1321
|
+
"error_type": {
|
|
1322
|
+
"description": "the failure's kind (Android)"
|
|
1323
|
+
},
|
|
1324
|
+
"reason": {
|
|
1325
|
+
"description": "why the probe is unsupported here"
|
|
1326
|
+
},
|
|
1327
|
+
"unread": {
|
|
1328
|
+
"$ref": "#/$defs/unread"
|
|
1329
|
+
},
|
|
1330
|
+
"services": {
|
|
1331
|
+
"type": "array",
|
|
1332
|
+
"maxItems": 64,
|
|
1333
|
+
"items": {
|
|
1334
|
+
"$ref": "#/$defs/app_entry"
|
|
1335
|
+
}
|
|
1336
|
+
},
|
|
1337
|
+
"keyboard": {
|
|
1338
|
+
"$ref": "#/$defs/app_entry"
|
|
1339
|
+
},
|
|
1340
|
+
"settings_only": {
|
|
1341
|
+
"type": "array",
|
|
1342
|
+
"maxItems": 64,
|
|
1343
|
+
"items": {
|
|
1344
|
+
"type": "string",
|
|
1345
|
+
"minLength": 1,
|
|
1346
|
+
"maxLength": 200
|
|
1347
|
+
}
|
|
1348
|
+
},
|
|
1349
|
+
"truncated": {
|
|
1350
|
+
"type": "boolean"
|
|
1351
|
+
}
|
|
1352
|
+
},
|
|
1353
|
+
"additionalProperties": true,
|
|
1354
|
+
"description": "the Accessibility services that are on, and the keyboard in use",
|
|
1355
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1356
|
+
"x-parts": [
|
|
1357
|
+
"services",
|
|
1358
|
+
"settings_only",
|
|
1359
|
+
"truncated: false"
|
|
1360
|
+
]
|
|
1361
|
+
},
|
|
1362
|
+
"android.notification_access": {
|
|
1363
|
+
"type": "object",
|
|
1364
|
+
"required": [
|
|
1365
|
+
"status"
|
|
1366
|
+
],
|
|
1367
|
+
"properties": {
|
|
1368
|
+
"status": {
|
|
1369
|
+
"enum": [
|
|
1370
|
+
"ok",
|
|
1371
|
+
"error",
|
|
1372
|
+
"unsupported",
|
|
1373
|
+
"not_enabled"
|
|
1374
|
+
]
|
|
1375
|
+
},
|
|
1376
|
+
"error": {
|
|
1377
|
+
"type": "string",
|
|
1378
|
+
"description": "why the probe could not measure"
|
|
1379
|
+
},
|
|
1380
|
+
"error_type": {
|
|
1381
|
+
"description": "the failure's kind (Android)"
|
|
1382
|
+
},
|
|
1383
|
+
"reason": {
|
|
1384
|
+
"description": "why the probe is unsupported here"
|
|
1385
|
+
},
|
|
1386
|
+
"unread": {
|
|
1387
|
+
"$ref": "#/$defs/unread"
|
|
1388
|
+
},
|
|
1389
|
+
"listeners": {
|
|
1390
|
+
"type": "array",
|
|
1391
|
+
"maxItems": 64,
|
|
1392
|
+
"items": {
|
|
1393
|
+
"$ref": "#/$defs/app_entry"
|
|
1394
|
+
}
|
|
1395
|
+
},
|
|
1396
|
+
"truncated": {
|
|
1397
|
+
"type": "boolean"
|
|
1398
|
+
}
|
|
1399
|
+
},
|
|
1400
|
+
"additionalProperties": true,
|
|
1401
|
+
"description": "the apps allowed to read notifications",
|
|
1402
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1403
|
+
"x-parts": [
|
|
1404
|
+
"listeners",
|
|
1405
|
+
"truncated: false"
|
|
1406
|
+
]
|
|
1407
|
+
},
|
|
1408
|
+
"android.other_access": {
|
|
1409
|
+
"type": "object",
|
|
1410
|
+
"required": [
|
|
1411
|
+
"status"
|
|
1412
|
+
],
|
|
1413
|
+
"properties": {
|
|
1414
|
+
"status": {
|
|
1415
|
+
"enum": [
|
|
1416
|
+
"ok",
|
|
1417
|
+
"error",
|
|
1418
|
+
"unsupported",
|
|
1419
|
+
"not_enabled"
|
|
1420
|
+
]
|
|
1421
|
+
},
|
|
1422
|
+
"error": {
|
|
1423
|
+
"type": "string",
|
|
1424
|
+
"description": "why the probe could not measure"
|
|
1425
|
+
},
|
|
1426
|
+
"error_type": {
|
|
1427
|
+
"description": "the failure's kind (Android)"
|
|
1428
|
+
},
|
|
1429
|
+
"reason": {
|
|
1430
|
+
"description": "why the probe is unsupported here"
|
|
1431
|
+
},
|
|
1432
|
+
"unread": {
|
|
1433
|
+
"$ref": "#/$defs/unread"
|
|
1434
|
+
},
|
|
1435
|
+
"device_admins": {
|
|
1436
|
+
"type": "array",
|
|
1437
|
+
"maxItems": 64,
|
|
1438
|
+
"items": {
|
|
1439
|
+
"$ref": "#/$defs/app_entry"
|
|
1440
|
+
}
|
|
1441
|
+
},
|
|
1442
|
+
"remote_access_apps": {
|
|
1443
|
+
"type": "array",
|
|
1444
|
+
"maxItems": 64,
|
|
1445
|
+
"items": {
|
|
1446
|
+
"$ref": "#/$defs/app_entry"
|
|
1447
|
+
}
|
|
1448
|
+
},
|
|
1449
|
+
"truncated": {
|
|
1450
|
+
"type": "boolean"
|
|
1451
|
+
}
|
|
1452
|
+
},
|
|
1453
|
+
"additionalProperties": true,
|
|
1454
|
+
"description": "device-administrator apps, and known remote-control apps installed",
|
|
1455
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1456
|
+
"x-parts": [
|
|
1457
|
+
"device_admins",
|
|
1458
|
+
"remote_access_apps",
|
|
1459
|
+
"truncated: false"
|
|
1460
|
+
]
|
|
1461
|
+
},
|
|
1462
|
+
"android.screen_capture": {
|
|
1463
|
+
"type": "object",
|
|
1464
|
+
"required": [
|
|
1465
|
+
"status"
|
|
1466
|
+
],
|
|
1467
|
+
"properties": {
|
|
1468
|
+
"status": {
|
|
1469
|
+
"enum": [
|
|
1470
|
+
"ok",
|
|
1471
|
+
"error",
|
|
1472
|
+
"unsupported",
|
|
1473
|
+
"not_enabled"
|
|
1474
|
+
]
|
|
1475
|
+
},
|
|
1476
|
+
"error": {
|
|
1477
|
+
"type": "string",
|
|
1478
|
+
"description": "why the probe could not measure"
|
|
1479
|
+
},
|
|
1480
|
+
"error_type": {
|
|
1481
|
+
"description": "the failure's kind (Android)"
|
|
1482
|
+
},
|
|
1483
|
+
"reason": {
|
|
1484
|
+
"description": "why the probe is unsupported here"
|
|
1485
|
+
},
|
|
1486
|
+
"unread": {
|
|
1487
|
+
"$ref": "#/$defs/unread"
|
|
1488
|
+
},
|
|
1489
|
+
"recording": {
|
|
1490
|
+
"type": "boolean"
|
|
1491
|
+
},
|
|
1492
|
+
"external_displays": {
|
|
1493
|
+
"type": "integer",
|
|
1494
|
+
"minimum": 0,
|
|
1495
|
+
"maximum": 9007199254740992,
|
|
1496
|
+
"x-unit": "count"
|
|
1497
|
+
},
|
|
1498
|
+
"recording_status": {
|
|
1499
|
+
"enum": [
|
|
1500
|
+
"unsupported",
|
|
1501
|
+
"no_permission",
|
|
1502
|
+
"unavailable"
|
|
1503
|
+
],
|
|
1504
|
+
"description": "why recording was not measured"
|
|
1505
|
+
}
|
|
1506
|
+
},
|
|
1507
|
+
"additionalProperties": true,
|
|
1508
|
+
"description": "the screen being recorded, mirrored or cast",
|
|
1509
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1510
|
+
"x-parts": [
|
|
1511
|
+
"recording",
|
|
1512
|
+
"external_displays"
|
|
1513
|
+
]
|
|
1514
|
+
},
|
|
1515
|
+
"android.location": {
|
|
1516
|
+
"type": "object",
|
|
1517
|
+
"required": [
|
|
1518
|
+
"status"
|
|
1519
|
+
],
|
|
1520
|
+
"properties": {
|
|
1521
|
+
"status": {
|
|
1522
|
+
"enum": [
|
|
1523
|
+
"ok",
|
|
1524
|
+
"error",
|
|
1525
|
+
"unsupported",
|
|
1526
|
+
"not_enabled"
|
|
1527
|
+
]
|
|
1528
|
+
},
|
|
1529
|
+
"error": {
|
|
1530
|
+
"type": "string",
|
|
1531
|
+
"description": "why the probe could not measure"
|
|
1532
|
+
},
|
|
1533
|
+
"error_type": {
|
|
1534
|
+
"description": "the failure's kind (Android)"
|
|
1535
|
+
},
|
|
1536
|
+
"reason": {
|
|
1537
|
+
"description": "why the probe is unsupported here"
|
|
1538
|
+
},
|
|
1539
|
+
"unread": {
|
|
1540
|
+
"$ref": "#/$defs/unread"
|
|
1541
|
+
},
|
|
1542
|
+
"permission": {
|
|
1543
|
+
"enum": [
|
|
1544
|
+
"none",
|
|
1545
|
+
"approximate",
|
|
1546
|
+
"precise"
|
|
1547
|
+
]
|
|
1548
|
+
},
|
|
1549
|
+
"latitude": {
|
|
1550
|
+
"type": "number",
|
|
1551
|
+
"minimum": -90.0,
|
|
1552
|
+
"maximum": 90.0,
|
|
1553
|
+
"x-unit": "degrees, WGS 84"
|
|
1554
|
+
},
|
|
1555
|
+
"longitude": {
|
|
1556
|
+
"type": "number",
|
|
1557
|
+
"minimum": -180.0,
|
|
1558
|
+
"maximum": 180.0,
|
|
1559
|
+
"x-unit": "degrees, WGS 84"
|
|
1560
|
+
},
|
|
1561
|
+
"accuracy_m": {
|
|
1562
|
+
"type": "number",
|
|
1563
|
+
"minimum": 0.0,
|
|
1564
|
+
"maximum": 10000000.0,
|
|
1565
|
+
"x-unit": "metres"
|
|
1566
|
+
},
|
|
1567
|
+
"age_seconds": {
|
|
1568
|
+
"type": "integer",
|
|
1569
|
+
"minimum": 0,
|
|
1570
|
+
"maximum": 9007199254740992,
|
|
1571
|
+
"x-unit": "seconds"
|
|
1572
|
+
},
|
|
1573
|
+
"provider": {
|
|
1574
|
+
"type": "string"
|
|
1575
|
+
},
|
|
1576
|
+
"fix_time": {
|
|
1577
|
+
"type": "integer",
|
|
1578
|
+
"minimum": 0,
|
|
1579
|
+
"maximum": 9007199254740992,
|
|
1580
|
+
"x-unit": "Unix seconds, UTC"
|
|
1581
|
+
}
|
|
1582
|
+
},
|
|
1583
|
+
"additionalProperties": true,
|
|
1584
|
+
"description": "the last location the phone already knows -- never a fresh fix, never a prompt",
|
|
1585
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1586
|
+
"x-parts": [
|
|
1587
|
+
"permission",
|
|
1588
|
+
"latitude",
|
|
1589
|
+
"longitude",
|
|
1590
|
+
"age_seconds"
|
|
1591
|
+
]
|
|
1592
|
+
},
|
|
1593
|
+
"android.mock_location": {
|
|
1594
|
+
"type": "object",
|
|
1595
|
+
"required": [
|
|
1596
|
+
"status"
|
|
1597
|
+
],
|
|
1598
|
+
"properties": {
|
|
1599
|
+
"status": {
|
|
1600
|
+
"enum": [
|
|
1601
|
+
"ok",
|
|
1602
|
+
"error",
|
|
1603
|
+
"unsupported",
|
|
1604
|
+
"not_enabled"
|
|
1605
|
+
]
|
|
1606
|
+
},
|
|
1607
|
+
"error": {
|
|
1608
|
+
"type": "string",
|
|
1609
|
+
"description": "why the probe could not measure"
|
|
1610
|
+
},
|
|
1611
|
+
"error_type": {
|
|
1612
|
+
"description": "the failure's kind (Android)"
|
|
1613
|
+
},
|
|
1614
|
+
"reason": {
|
|
1615
|
+
"description": "why the probe is unsupported here"
|
|
1616
|
+
},
|
|
1617
|
+
"unread": {
|
|
1618
|
+
"$ref": "#/$defs/unread"
|
|
1619
|
+
},
|
|
1620
|
+
"permission": {
|
|
1621
|
+
"enum": [
|
|
1622
|
+
"none",
|
|
1623
|
+
"approximate",
|
|
1624
|
+
"precise"
|
|
1625
|
+
]
|
|
1626
|
+
},
|
|
1627
|
+
"mock": {
|
|
1628
|
+
"type": "boolean"
|
|
1629
|
+
},
|
|
1630
|
+
"age_seconds": {
|
|
1631
|
+
"type": "integer",
|
|
1632
|
+
"minimum": 0,
|
|
1633
|
+
"maximum": 9007199254740992,
|
|
1634
|
+
"x-unit": "seconds"
|
|
1635
|
+
},
|
|
1636
|
+
"fix_time": {
|
|
1637
|
+
"type": "integer",
|
|
1638
|
+
"minimum": 0,
|
|
1639
|
+
"maximum": 9007199254740992,
|
|
1640
|
+
"x-unit": "Unix seconds, UTC"
|
|
1641
|
+
}
|
|
1642
|
+
},
|
|
1643
|
+
"additionalProperties": true,
|
|
1644
|
+
"description": "whether that location was faked; never its coordinates",
|
|
1645
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
1646
|
+
"x-parts": [
|
|
1647
|
+
"permission",
|
|
1648
|
+
"mock",
|
|
1649
|
+
"age_seconds"
|
|
1650
|
+
]
|
|
1651
|
+
},
|
|
1652
|
+
"android.probe_results": {
|
|
1653
|
+
"type": "object",
|
|
1654
|
+
"properties": {
|
|
1655
|
+
"app_identity": {
|
|
1656
|
+
"$ref": "#/$defs/android.app_identity"
|
|
1657
|
+
},
|
|
1658
|
+
"debug_state": {
|
|
1659
|
+
"$ref": "#/$defs/android.debug_state"
|
|
1660
|
+
},
|
|
1661
|
+
"root_files": {
|
|
1662
|
+
"$ref": "#/$defs/android.root_files"
|
|
1663
|
+
},
|
|
1664
|
+
"system_properties": {
|
|
1665
|
+
"$ref": "#/$defs/android.system_properties"
|
|
1666
|
+
},
|
|
1667
|
+
"runtime_maps": {
|
|
1668
|
+
"$ref": "#/$defs/android.runtime_maps"
|
|
1669
|
+
},
|
|
1670
|
+
"tracer": {
|
|
1671
|
+
"$ref": "#/$defs/android.tracer"
|
|
1672
|
+
},
|
|
1673
|
+
"root_shell": {
|
|
1674
|
+
"$ref": "#/$defs/android.root_shell"
|
|
1675
|
+
},
|
|
1676
|
+
"selinux": {
|
|
1677
|
+
"$ref": "#/$defs/android.selinux"
|
|
1678
|
+
},
|
|
1679
|
+
"mounts": {
|
|
1680
|
+
"$ref": "#/$defs/android.mounts"
|
|
1681
|
+
},
|
|
1682
|
+
"frida_ports": {
|
|
1683
|
+
"$ref": "#/$defs/android.frida_ports"
|
|
1684
|
+
},
|
|
1685
|
+
"instrumentation_threads": {
|
|
1686
|
+
"$ref": "#/$defs/android.instrumentation_threads"
|
|
1687
|
+
},
|
|
1688
|
+
"exec_mappings": {
|
|
1689
|
+
"$ref": "#/$defs/android.exec_mappings"
|
|
1690
|
+
},
|
|
1691
|
+
"code_integrity": {
|
|
1692
|
+
"$ref": "#/$defs/android.code_integrity"
|
|
1693
|
+
},
|
|
1694
|
+
"developer_settings": {
|
|
1695
|
+
"$ref": "#/$defs/android.developer_settings"
|
|
1696
|
+
},
|
|
1697
|
+
"emulator": {
|
|
1698
|
+
"$ref": "#/$defs/android.emulator"
|
|
1699
|
+
},
|
|
1700
|
+
"device": {
|
|
1701
|
+
"$ref": "#/$defs/android.device"
|
|
1702
|
+
},
|
|
1703
|
+
"network": {
|
|
1704
|
+
"$ref": "#/$defs/android.network"
|
|
1705
|
+
},
|
|
1706
|
+
"local_addresses": {
|
|
1707
|
+
"$ref": "#/$defs/android.local_addresses"
|
|
1708
|
+
},
|
|
1709
|
+
"accessibility": {
|
|
1710
|
+
"$ref": "#/$defs/android.accessibility"
|
|
1711
|
+
},
|
|
1712
|
+
"notification_access": {
|
|
1713
|
+
"$ref": "#/$defs/android.notification_access"
|
|
1714
|
+
},
|
|
1715
|
+
"other_access": {
|
|
1716
|
+
"$ref": "#/$defs/android.other_access"
|
|
1717
|
+
},
|
|
1718
|
+
"screen_capture": {
|
|
1719
|
+
"$ref": "#/$defs/android.screen_capture"
|
|
1720
|
+
},
|
|
1721
|
+
"location": {
|
|
1722
|
+
"$ref": "#/$defs/android.location"
|
|
1723
|
+
},
|
|
1724
|
+
"mock_location": {
|
|
1725
|
+
"$ref": "#/$defs/android.mock_location"
|
|
1726
|
+
}
|
|
1727
|
+
},
|
|
1728
|
+
"additionalProperties": true,
|
|
1729
|
+
"description": "one object per measurement; a measurement this contract does not know is ignored"
|
|
1730
|
+
},
|
|
1731
|
+
"ios.app_identity": {
|
|
1732
|
+
"type": "object",
|
|
1733
|
+
"required": [
|
|
1734
|
+
"status"
|
|
1735
|
+
],
|
|
1736
|
+
"properties": {
|
|
1737
|
+
"status": {
|
|
1738
|
+
"enum": [
|
|
1739
|
+
"ok",
|
|
1740
|
+
"error",
|
|
1741
|
+
"unsupported",
|
|
1742
|
+
"not_enabled"
|
|
1743
|
+
]
|
|
1744
|
+
},
|
|
1745
|
+
"error": {
|
|
1746
|
+
"type": "string",
|
|
1747
|
+
"description": "why the probe could not measure"
|
|
1748
|
+
},
|
|
1749
|
+
"error_type": {
|
|
1750
|
+
"description": "the failure's kind (Android)"
|
|
1751
|
+
},
|
|
1752
|
+
"reason": {
|
|
1753
|
+
"description": "why the probe is unsupported here"
|
|
1754
|
+
},
|
|
1755
|
+
"unread": {
|
|
1756
|
+
"$ref": "#/$defs/unread"
|
|
1757
|
+
},
|
|
1758
|
+
"bundle_id": {
|
|
1759
|
+
"type": "string"
|
|
1760
|
+
},
|
|
1761
|
+
"executable_sha256": {
|
|
1762
|
+
"type": "string"
|
|
1763
|
+
},
|
|
1764
|
+
"version_name": {
|
|
1765
|
+
"description": "the app's version"
|
|
1766
|
+
},
|
|
1767
|
+
"version_code": {
|
|
1768
|
+
"description": "the app's build number"
|
|
1769
|
+
},
|
|
1770
|
+
"executable_bytes": {
|
|
1771
|
+
"description": "the executable's size in bytes"
|
|
1772
|
+
}
|
|
1773
|
+
},
|
|
1774
|
+
"additionalProperties": true,
|
|
1775
|
+
"description": "the installed app and its executable's hash",
|
|
1776
|
+
"x-answered": "when the backend requests it",
|
|
1777
|
+
"x-complete-when-ok": [
|
|
1778
|
+
"bundle_id",
|
|
1779
|
+
"executable_sha256"
|
|
1780
|
+
]
|
|
1781
|
+
},
|
|
1782
|
+
"ios.code_signing": {
|
|
1783
|
+
"type": "object",
|
|
1784
|
+
"required": [
|
|
1785
|
+
"status"
|
|
1786
|
+
],
|
|
1787
|
+
"properties": {
|
|
1788
|
+
"status": {
|
|
1789
|
+
"enum": [
|
|
1790
|
+
"ok",
|
|
1791
|
+
"error",
|
|
1792
|
+
"unsupported",
|
|
1793
|
+
"not_enabled"
|
|
1794
|
+
]
|
|
1795
|
+
},
|
|
1796
|
+
"error": {
|
|
1797
|
+
"type": "string",
|
|
1798
|
+
"description": "why the probe could not measure"
|
|
1799
|
+
},
|
|
1800
|
+
"error_type": {
|
|
1801
|
+
"description": "the failure's kind (Android)"
|
|
1802
|
+
},
|
|
1803
|
+
"reason": {
|
|
1804
|
+
"description": "why the probe is unsupported here"
|
|
1805
|
+
},
|
|
1806
|
+
"unread": {
|
|
1807
|
+
"$ref": "#/$defs/unread"
|
|
1808
|
+
},
|
|
1809
|
+
"signing_identifier": {
|
|
1810
|
+
"type": "string"
|
|
1811
|
+
},
|
|
1812
|
+
"team_identifier": {
|
|
1813
|
+
"type": "string"
|
|
1814
|
+
},
|
|
1815
|
+
"get_task_allow": {
|
|
1816
|
+
"type": "boolean"
|
|
1817
|
+
},
|
|
1818
|
+
"signed": {
|
|
1819
|
+
"description": "whether the executable carries a signature"
|
|
1820
|
+
},
|
|
1821
|
+
"signature_absent": {
|
|
1822
|
+
"description": "true when it carries none"
|
|
1823
|
+
},
|
|
1824
|
+
"signature_parse_error": {
|
|
1825
|
+
"description": "why the signature could not be read"
|
|
1826
|
+
},
|
|
1827
|
+
"code_directory_flags": {
|
|
1828
|
+
"description": "the code directory's flags"
|
|
1829
|
+
},
|
|
1830
|
+
"entitlement_count": {
|
|
1831
|
+
"description": "how many entitlements the signature grants"
|
|
1832
|
+
}
|
|
1833
|
+
},
|
|
1834
|
+
"additionalProperties": true,
|
|
1835
|
+
"description": "the executable's own code signature",
|
|
1836
|
+
"x-answered": "when the backend requests it",
|
|
1837
|
+
"x-complete-when-ok": [
|
|
1838
|
+
"get_task_allow",
|
|
1839
|
+
"signing_identifier",
|
|
1840
|
+
"team_identifier"
|
|
1841
|
+
]
|
|
1842
|
+
},
|
|
1843
|
+
"ios.debugger": {
|
|
1844
|
+
"type": "object",
|
|
1845
|
+
"required": [
|
|
1846
|
+
"status"
|
|
1847
|
+
],
|
|
1848
|
+
"properties": {
|
|
1849
|
+
"status": {
|
|
1850
|
+
"enum": [
|
|
1851
|
+
"ok",
|
|
1852
|
+
"error",
|
|
1853
|
+
"unsupported",
|
|
1854
|
+
"not_enabled"
|
|
1855
|
+
]
|
|
1856
|
+
},
|
|
1857
|
+
"error": {
|
|
1858
|
+
"type": "string",
|
|
1859
|
+
"description": "why the probe could not measure"
|
|
1860
|
+
},
|
|
1861
|
+
"error_type": {
|
|
1862
|
+
"description": "the failure's kind (Android)"
|
|
1863
|
+
},
|
|
1864
|
+
"reason": {
|
|
1865
|
+
"description": "why the probe is unsupported here"
|
|
1866
|
+
},
|
|
1867
|
+
"unread": {
|
|
1868
|
+
"$ref": "#/$defs/unread"
|
|
1869
|
+
},
|
|
1870
|
+
"traced": {
|
|
1871
|
+
"type": "boolean"
|
|
1872
|
+
}
|
|
1873
|
+
},
|
|
1874
|
+
"additionalProperties": true,
|
|
1875
|
+
"description": "a debugger tracing the process",
|
|
1876
|
+
"x-answered": "when the backend requests it",
|
|
1877
|
+
"x-complete-when-ok": [
|
|
1878
|
+
"traced"
|
|
1879
|
+
]
|
|
1880
|
+
},
|
|
1881
|
+
"ios.jailbreak_files": {
|
|
1882
|
+
"type": "object",
|
|
1883
|
+
"required": [
|
|
1884
|
+
"status"
|
|
1885
|
+
],
|
|
1886
|
+
"properties": {
|
|
1887
|
+
"status": {
|
|
1888
|
+
"enum": [
|
|
1889
|
+
"ok",
|
|
1890
|
+
"error",
|
|
1891
|
+
"unsupported",
|
|
1892
|
+
"not_enabled"
|
|
1893
|
+
]
|
|
1894
|
+
},
|
|
1895
|
+
"error": {
|
|
1896
|
+
"type": "string",
|
|
1897
|
+
"description": "why the probe could not measure"
|
|
1898
|
+
},
|
|
1899
|
+
"error_type": {
|
|
1900
|
+
"description": "the failure's kind (Android)"
|
|
1901
|
+
},
|
|
1902
|
+
"reason": {
|
|
1903
|
+
"description": "why the probe is unsupported here"
|
|
1904
|
+
},
|
|
1905
|
+
"unread": {
|
|
1906
|
+
"$ref": "#/$defs/unread"
|
|
1907
|
+
},
|
|
1908
|
+
"found_paths": {
|
|
1909
|
+
"type": "array"
|
|
1910
|
+
},
|
|
1911
|
+
"checked_count": {
|
|
1912
|
+
"description": "how many paths were checked"
|
|
1913
|
+
}
|
|
1914
|
+
},
|
|
1915
|
+
"additionalProperties": true,
|
|
1916
|
+
"description": "known jailbreak paths that exist",
|
|
1917
|
+
"x-answered": "when the backend requests it",
|
|
1918
|
+
"x-complete-when-ok": [
|
|
1919
|
+
"found_paths"
|
|
1920
|
+
]
|
|
1921
|
+
},
|
|
1922
|
+
"ios.sandbox": {
|
|
1923
|
+
"type": "object",
|
|
1924
|
+
"required": [
|
|
1925
|
+
"status"
|
|
1926
|
+
],
|
|
1927
|
+
"properties": {
|
|
1928
|
+
"status": {
|
|
1929
|
+
"enum": [
|
|
1930
|
+
"ok",
|
|
1931
|
+
"error",
|
|
1932
|
+
"unsupported",
|
|
1933
|
+
"not_enabled"
|
|
1934
|
+
]
|
|
1935
|
+
},
|
|
1936
|
+
"error": {
|
|
1937
|
+
"type": "string",
|
|
1938
|
+
"description": "why the probe could not measure"
|
|
1939
|
+
},
|
|
1940
|
+
"error_type": {
|
|
1941
|
+
"description": "the failure's kind (Android)"
|
|
1942
|
+
},
|
|
1943
|
+
"reason": {
|
|
1944
|
+
"description": "why the probe is unsupported here"
|
|
1945
|
+
},
|
|
1946
|
+
"unread": {
|
|
1947
|
+
"$ref": "#/$defs/unread"
|
|
1948
|
+
},
|
|
1949
|
+
"write_outside_sandbox_succeeded": {
|
|
1950
|
+
"type": "boolean"
|
|
1951
|
+
},
|
|
1952
|
+
"probe_path": {
|
|
1953
|
+
"description": "the path the app tried to write"
|
|
1954
|
+
}
|
|
1955
|
+
},
|
|
1956
|
+
"additionalProperties": true,
|
|
1957
|
+
"description": "whether the app can write outside its sandbox",
|
|
1958
|
+
"x-answered": "when the backend requests it",
|
|
1959
|
+
"x-complete-when-ok": [
|
|
1960
|
+
"write_outside_sandbox_succeeded"
|
|
1961
|
+
]
|
|
1962
|
+
},
|
|
1963
|
+
"ios.dyld_images": {
|
|
1964
|
+
"type": "object",
|
|
1965
|
+
"required": [
|
|
1966
|
+
"status"
|
|
1967
|
+
],
|
|
1968
|
+
"properties": {
|
|
1969
|
+
"status": {
|
|
1970
|
+
"enum": [
|
|
1971
|
+
"ok",
|
|
1972
|
+
"error",
|
|
1973
|
+
"unsupported",
|
|
1974
|
+
"not_enabled"
|
|
1975
|
+
]
|
|
1976
|
+
},
|
|
1977
|
+
"error": {
|
|
1978
|
+
"type": "string",
|
|
1979
|
+
"description": "why the probe could not measure"
|
|
1980
|
+
},
|
|
1981
|
+
"error_type": {
|
|
1982
|
+
"description": "the failure's kind (Android)"
|
|
1983
|
+
},
|
|
1984
|
+
"reason": {
|
|
1985
|
+
"description": "why the probe is unsupported here"
|
|
1986
|
+
},
|
|
1987
|
+
"unread": {
|
|
1988
|
+
"$ref": "#/$defs/unread"
|
|
1989
|
+
},
|
|
1990
|
+
"suspicious_tokens": {
|
|
1991
|
+
"type": "array"
|
|
1992
|
+
},
|
|
1993
|
+
"suspicious_image_count": {
|
|
1994
|
+
"description": "loaded images with a listed name"
|
|
1995
|
+
},
|
|
1996
|
+
"image_count": {
|
|
1997
|
+
"description": "images loaded"
|
|
1998
|
+
}
|
|
1999
|
+
},
|
|
2000
|
+
"additionalProperties": true,
|
|
2001
|
+
"description": "instrumentation and jailbreak names among the loaded libraries",
|
|
2002
|
+
"x-answered": "when the backend requests it",
|
|
2003
|
+
"x-complete-when-ok": [
|
|
2004
|
+
"suspicious_tokens"
|
|
2005
|
+
]
|
|
2006
|
+
},
|
|
2007
|
+
"ios.code_integrity": {
|
|
2008
|
+
"type": "object",
|
|
2009
|
+
"required": [
|
|
2010
|
+
"status"
|
|
2011
|
+
],
|
|
2012
|
+
"properties": {
|
|
2013
|
+
"status": {
|
|
2014
|
+
"enum": [
|
|
2015
|
+
"ok",
|
|
2016
|
+
"error",
|
|
2017
|
+
"unsupported",
|
|
2018
|
+
"not_enabled"
|
|
2019
|
+
]
|
|
2020
|
+
},
|
|
2021
|
+
"error": {
|
|
2022
|
+
"type": "string",
|
|
2023
|
+
"description": "why the probe could not measure"
|
|
2024
|
+
},
|
|
2025
|
+
"error_type": {
|
|
2026
|
+
"description": "the failure's kind (Android)"
|
|
2027
|
+
},
|
|
2028
|
+
"reason": {
|
|
2029
|
+
"description": "why the probe is unsupported here"
|
|
2030
|
+
},
|
|
2031
|
+
"unread": {
|
|
2032
|
+
"$ref": "#/$defs/unread"
|
|
2033
|
+
},
|
|
2034
|
+
"checked": {
|
|
2035
|
+
"type": "boolean"
|
|
2036
|
+
},
|
|
2037
|
+
"app_diff_bytes": {
|
|
2038
|
+
"type": "integer",
|
|
2039
|
+
"minimum": 0,
|
|
2040
|
+
"maximum": 9007199254740992,
|
|
2041
|
+
"x-unit": "bytes"
|
|
2042
|
+
},
|
|
2043
|
+
"app_compared_bytes": {
|
|
2044
|
+
"type": "integer",
|
|
2045
|
+
"minimum": 0,
|
|
2046
|
+
"maximum": 9007199254740992,
|
|
2047
|
+
"x-unit": "bytes"
|
|
2048
|
+
},
|
|
2049
|
+
"app_images_expected": {
|
|
2050
|
+
"type": "integer",
|
|
2051
|
+
"minimum": 0,
|
|
2052
|
+
"maximum": 9007199254740992,
|
|
2053
|
+
"x-unit": "count"
|
|
2054
|
+
},
|
|
2055
|
+
"app_images_compared": {
|
|
2056
|
+
"type": "integer",
|
|
2057
|
+
"minimum": 0,
|
|
2058
|
+
"maximum": 9007199254740992,
|
|
2059
|
+
"x-unit": "count"
|
|
2060
|
+
},
|
|
2061
|
+
"app_images_unreadable": {
|
|
2062
|
+
"type": "integer",
|
|
2063
|
+
"minimum": 0,
|
|
2064
|
+
"maximum": 9007199254740992,
|
|
2065
|
+
"x-unit": "count"
|
|
2066
|
+
},
|
|
2067
|
+
"app_images_skipped": {
|
|
2068
|
+
"type": "integer",
|
|
2069
|
+
"minimum": 0,
|
|
2070
|
+
"maximum": 9007199254740992,
|
|
2071
|
+
"x-unit": "count"
|
|
2072
|
+
},
|
|
2073
|
+
"app_expected_bytes": {
|
|
2074
|
+
"type": "integer",
|
|
2075
|
+
"minimum": 0,
|
|
2076
|
+
"maximum": 9007199254740992,
|
|
2077
|
+
"x-unit": "bytes"
|
|
2078
|
+
},
|
|
2079
|
+
"app_unreadable_bytes": {
|
|
2080
|
+
"type": "integer",
|
|
2081
|
+
"minimum": 0,
|
|
2082
|
+
"maximum": 9007199254740992,
|
|
2083
|
+
"x-unit": "bytes"
|
|
2084
|
+
},
|
|
2085
|
+
"app_skipped_bytes": {
|
|
2086
|
+
"type": "integer",
|
|
2087
|
+
"minimum": 0,
|
|
2088
|
+
"maximum": 9007199254740992,
|
|
2089
|
+
"x-unit": "bytes"
|
|
2090
|
+
},
|
|
2091
|
+
"app_complete": {
|
|
2092
|
+
"type": "boolean"
|
|
2093
|
+
},
|
|
2094
|
+
"main_executable_compared": {
|
|
2095
|
+
"type": "boolean"
|
|
2096
|
+
},
|
|
2097
|
+
"app_images_not_compared": {
|
|
2098
|
+
"type": "object",
|
|
2099
|
+
"maxProperties": 64,
|
|
2100
|
+
"propertyNames": {
|
|
2101
|
+
"minLength": 1,
|
|
2102
|
+
"maxLength": 128
|
|
2103
|
+
},
|
|
2104
|
+
"additionalProperties": {
|
|
2105
|
+
"type": "string",
|
|
2106
|
+
"minLength": 1,
|
|
2107
|
+
"maxLength": 160
|
|
2108
|
+
},
|
|
2109
|
+
"description": "each app image not compared, by its path in the app, with why"
|
|
2110
|
+
},
|
|
2111
|
+
"system_images_unreadable": {
|
|
2112
|
+
"type": "integer",
|
|
2113
|
+
"minimum": 0,
|
|
2114
|
+
"maximum": 9007199254740992,
|
|
2115
|
+
"x-unit": "count"
|
|
2116
|
+
},
|
|
2117
|
+
"app_libs_diff": {
|
|
2118
|
+
"description": "app images with a difference"
|
|
2119
|
+
},
|
|
2120
|
+
"diffed_libs": {
|
|
2121
|
+
"description": "the images with a difference, comma-separated"
|
|
2122
|
+
},
|
|
2123
|
+
"diff_bytes": {
|
|
2124
|
+
"description": "always 0: iOS system libraries cannot be read"
|
|
2125
|
+
},
|
|
2126
|
+
"core_compared_bytes": {
|
|
2127
|
+
"description": "always 0: iOS system libraries cannot be read"
|
|
2128
|
+
},
|
|
2129
|
+
"core_diff_bytes": {
|
|
2130
|
+
"description": "always 0"
|
|
2131
|
+
},
|
|
2132
|
+
"ext_compared_bytes": {
|
|
2133
|
+
"description": "always 0"
|
|
2134
|
+
},
|
|
2135
|
+
"ext_diff_bytes": {
|
|
2136
|
+
"description": "always 0"
|
|
2137
|
+
},
|
|
2138
|
+
"ext_libs_diff": {
|
|
2139
|
+
"description": "always 0"
|
|
2140
|
+
},
|
|
2141
|
+
"system_bucket_reason": {
|
|
2142
|
+
"description": "why the system figures are 0"
|
|
2143
|
+
},
|
|
2144
|
+
"app_segment_compared_bytes": {
|
|
2145
|
+
"description": "the whole __TEXT segments compared, in bytes (telemetry)"
|
|
2146
|
+
},
|
|
2147
|
+
"app_segment_diff_bytes": {
|
|
2148
|
+
"description": "bytes that differ across those segments (telemetry)"
|
|
2149
|
+
}
|
|
2150
|
+
},
|
|
2151
|
+
"additionalProperties": true,
|
|
2152
|
+
"description": "the app's own code in memory compared with its files, image by image",
|
|
2153
|
+
"x-answered": "volunteered on every scan",
|
|
2154
|
+
"x-complete-when-ok": [
|
|
2155
|
+
"app_compared_bytes",
|
|
2156
|
+
"app_diff_bytes",
|
|
2157
|
+
"checked"
|
|
2158
|
+
],
|
|
2159
|
+
"x-complete-when-checked": [
|
|
2160
|
+
"app_compared_bytes",
|
|
2161
|
+
"app_complete",
|
|
2162
|
+
"app_expected_bytes",
|
|
2163
|
+
"app_images_compared",
|
|
2164
|
+
"app_images_expected",
|
|
2165
|
+
"app_images_skipped",
|
|
2166
|
+
"app_images_unreadable",
|
|
2167
|
+
"app_skipped_bytes",
|
|
2168
|
+
"app_unreadable_bytes",
|
|
2169
|
+
"main_executable_compared"
|
|
2170
|
+
]
|
|
2171
|
+
},
|
|
2172
|
+
"ios.environment": {
|
|
2173
|
+
"type": "object",
|
|
2174
|
+
"required": [
|
|
2175
|
+
"status"
|
|
2176
|
+
],
|
|
2177
|
+
"properties": {
|
|
2178
|
+
"status": {
|
|
2179
|
+
"enum": [
|
|
2180
|
+
"ok",
|
|
2181
|
+
"error",
|
|
2182
|
+
"unsupported",
|
|
2183
|
+
"not_enabled"
|
|
2184
|
+
]
|
|
2185
|
+
},
|
|
2186
|
+
"error": {
|
|
2187
|
+
"type": "string",
|
|
2188
|
+
"description": "why the probe could not measure"
|
|
2189
|
+
},
|
|
2190
|
+
"error_type": {
|
|
2191
|
+
"description": "the failure's kind (Android)"
|
|
2192
|
+
},
|
|
2193
|
+
"reason": {
|
|
2194
|
+
"description": "why the probe is unsupported here"
|
|
2195
|
+
},
|
|
2196
|
+
"unread": {
|
|
2197
|
+
"$ref": "#/$defs/unread"
|
|
2198
|
+
},
|
|
2199
|
+
"dyld_insert_libraries": {
|
|
2200
|
+
"type": "string"
|
|
2201
|
+
}
|
|
2202
|
+
},
|
|
2203
|
+
"additionalProperties": true,
|
|
2204
|
+
"description": "libraries injected through the environment",
|
|
2205
|
+
"x-answered": "when the backend requests it",
|
|
2206
|
+
"x-complete-when-ok": [
|
|
2207
|
+
"dyld_insert_libraries"
|
|
2208
|
+
]
|
|
2209
|
+
},
|
|
2210
|
+
"ios.simulator": {
|
|
2211
|
+
"type": "object",
|
|
2212
|
+
"required": [
|
|
2213
|
+
"status"
|
|
2214
|
+
],
|
|
2215
|
+
"properties": {
|
|
2216
|
+
"status": {
|
|
2217
|
+
"enum": [
|
|
2218
|
+
"ok",
|
|
2219
|
+
"error",
|
|
2220
|
+
"unsupported",
|
|
2221
|
+
"not_enabled"
|
|
2222
|
+
]
|
|
2223
|
+
},
|
|
2224
|
+
"error": {
|
|
2225
|
+
"type": "string",
|
|
2226
|
+
"description": "why the probe could not measure"
|
|
2227
|
+
},
|
|
2228
|
+
"error_type": {
|
|
2229
|
+
"description": "the failure's kind (Android)"
|
|
2230
|
+
},
|
|
2231
|
+
"reason": {
|
|
2232
|
+
"description": "why the probe is unsupported here"
|
|
2233
|
+
},
|
|
2234
|
+
"unread": {
|
|
2235
|
+
"$ref": "#/$defs/unread"
|
|
2236
|
+
},
|
|
2237
|
+
"is_simulator": {
|
|
2238
|
+
"type": "boolean"
|
|
2239
|
+
},
|
|
2240
|
+
"model": {
|
|
2241
|
+
"description": "the hardware model identifier"
|
|
2242
|
+
}
|
|
2243
|
+
},
|
|
2244
|
+
"additionalProperties": true,
|
|
2245
|
+
"description": "the simulator, and the hardware model",
|
|
2246
|
+
"x-answered": "when the backend requests it",
|
|
2247
|
+
"x-complete-when-ok": [
|
|
2248
|
+
"is_simulator"
|
|
2249
|
+
]
|
|
2250
|
+
},
|
|
2251
|
+
"ios.device": {
|
|
2252
|
+
"type": "object",
|
|
2253
|
+
"required": [
|
|
2254
|
+
"status"
|
|
2255
|
+
],
|
|
2256
|
+
"properties": {
|
|
2257
|
+
"status": {
|
|
2258
|
+
"enum": [
|
|
2259
|
+
"ok",
|
|
2260
|
+
"error",
|
|
2261
|
+
"unsupported",
|
|
2262
|
+
"not_enabled"
|
|
2263
|
+
]
|
|
2264
|
+
},
|
|
2265
|
+
"error": {
|
|
2266
|
+
"type": "string",
|
|
2267
|
+
"description": "why the probe could not measure"
|
|
2268
|
+
},
|
|
2269
|
+
"error_type": {
|
|
2270
|
+
"description": "the failure's kind (Android)"
|
|
2271
|
+
},
|
|
2272
|
+
"reason": {
|
|
2273
|
+
"description": "why the probe is unsupported here"
|
|
2274
|
+
},
|
|
2275
|
+
"unread": {
|
|
2276
|
+
"$ref": "#/$defs/unread"
|
|
2277
|
+
},
|
|
2278
|
+
"os_version": {
|
|
2279
|
+
"type": "string"
|
|
2280
|
+
},
|
|
2281
|
+
"os_build": {
|
|
2282
|
+
"type": "string"
|
|
2283
|
+
},
|
|
2284
|
+
"model_identifier": {
|
|
2285
|
+
"type": "string"
|
|
2286
|
+
},
|
|
2287
|
+
"page_size": {
|
|
2288
|
+
"type": "integer",
|
|
2289
|
+
"minimum": 0,
|
|
2290
|
+
"maximum": 9007199254740992,
|
|
2291
|
+
"x-unit": "bytes"
|
|
2292
|
+
}
|
|
2293
|
+
},
|
|
2294
|
+
"additionalProperties": true,
|
|
2295
|
+
"description": "the OS version and build, and the model",
|
|
2296
|
+
"x-answered": "volunteered on every scan",
|
|
2297
|
+
"x-parts": [
|
|
2298
|
+
"os_version"
|
|
2299
|
+
]
|
|
2300
|
+
},
|
|
2301
|
+
"ios.network": {
|
|
2302
|
+
"type": "object",
|
|
2303
|
+
"required": [
|
|
2304
|
+
"status"
|
|
2305
|
+
],
|
|
2306
|
+
"properties": {
|
|
2307
|
+
"status": {
|
|
2308
|
+
"enum": [
|
|
2309
|
+
"ok",
|
|
2310
|
+
"error",
|
|
2311
|
+
"unsupported",
|
|
2312
|
+
"not_enabled"
|
|
2313
|
+
]
|
|
2314
|
+
},
|
|
2315
|
+
"error": {
|
|
2316
|
+
"type": "string",
|
|
2317
|
+
"description": "why the probe could not measure"
|
|
2318
|
+
},
|
|
2319
|
+
"error_type": {
|
|
2320
|
+
"description": "the failure's kind (Android)"
|
|
2321
|
+
},
|
|
2322
|
+
"reason": {
|
|
2323
|
+
"description": "why the probe is unsupported here"
|
|
2324
|
+
},
|
|
2325
|
+
"unread": {
|
|
2326
|
+
"$ref": "#/$defs/unread"
|
|
2327
|
+
},
|
|
2328
|
+
"vpn_active": {
|
|
2329
|
+
"type": "boolean"
|
|
2330
|
+
},
|
|
2331
|
+
"http_proxy_configured": {
|
|
2332
|
+
"type": "boolean"
|
|
2333
|
+
},
|
|
2334
|
+
"scoped_interfaces": {
|
|
2335
|
+
"type": "array"
|
|
2336
|
+
}
|
|
2337
|
+
},
|
|
2338
|
+
"additionalProperties": true,
|
|
2339
|
+
"description": "a VPN, inferred from the interfaces the proxy settings are scoped to -- a heuristic, so the names come with it; an HTTP proxy",
|
|
2340
|
+
"x-answered": "volunteered on every scan",
|
|
2341
|
+
"x-parts": [
|
|
2342
|
+
"vpn_active"
|
|
2343
|
+
]
|
|
2344
|
+
},
|
|
2345
|
+
"ios.local_addresses": {
|
|
2346
|
+
"type": "object",
|
|
2347
|
+
"required": [
|
|
2348
|
+
"status"
|
|
2349
|
+
],
|
|
2350
|
+
"properties": {
|
|
2351
|
+
"status": {
|
|
2352
|
+
"enum": [
|
|
2353
|
+
"ok",
|
|
2354
|
+
"error",
|
|
2355
|
+
"unsupported",
|
|
2356
|
+
"not_enabled"
|
|
2357
|
+
]
|
|
2358
|
+
},
|
|
2359
|
+
"error": {
|
|
2360
|
+
"type": "string",
|
|
2361
|
+
"description": "why the probe could not measure"
|
|
2362
|
+
},
|
|
2363
|
+
"error_type": {
|
|
2364
|
+
"description": "the failure's kind (Android)"
|
|
2365
|
+
},
|
|
2366
|
+
"reason": {
|
|
2367
|
+
"description": "why the probe is unsupported here"
|
|
2368
|
+
},
|
|
2369
|
+
"unread": {
|
|
2370
|
+
"$ref": "#/$defs/unread"
|
|
2371
|
+
},
|
|
2372
|
+
"addresses": {
|
|
2373
|
+
"type": "array",
|
|
2374
|
+
"maxItems": 64,
|
|
2375
|
+
"items": {
|
|
2376
|
+
"type": "object",
|
|
2377
|
+
"required": [
|
|
2378
|
+
"interface",
|
|
2379
|
+
"address"
|
|
2380
|
+
],
|
|
2381
|
+
"additionalProperties": false,
|
|
2382
|
+
"properties": {
|
|
2383
|
+
"interface": {
|
|
2384
|
+
"type": "string",
|
|
2385
|
+
"maxLength": 64
|
|
2386
|
+
},
|
|
2387
|
+
"address": {
|
|
2388
|
+
"type": "string",
|
|
2389
|
+
"maxLength": 64
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
},
|
|
2394
|
+
"truncated": {
|
|
2395
|
+
"type": "boolean"
|
|
2396
|
+
}
|
|
2397
|
+
},
|
|
2398
|
+
"additionalProperties": true,
|
|
2399
|
+
"description": "the phone's own IP addresses, link-local ones left out",
|
|
2400
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
2401
|
+
"x-parts": [
|
|
2402
|
+
"addresses"
|
|
2403
|
+
]
|
|
2404
|
+
},
|
|
2405
|
+
"ios.accessibility": {
|
|
2406
|
+
"type": "object",
|
|
2407
|
+
"required": [
|
|
2408
|
+
"status"
|
|
2409
|
+
],
|
|
2410
|
+
"properties": {
|
|
2411
|
+
"status": {
|
|
2412
|
+
"enum": [
|
|
2413
|
+
"ok",
|
|
2414
|
+
"error",
|
|
2415
|
+
"unsupported",
|
|
2416
|
+
"not_enabled"
|
|
2417
|
+
]
|
|
2418
|
+
},
|
|
2419
|
+
"error": {
|
|
2420
|
+
"type": "string",
|
|
2421
|
+
"description": "why the probe could not measure"
|
|
2422
|
+
},
|
|
2423
|
+
"error_type": {
|
|
2424
|
+
"description": "the failure's kind (Android)"
|
|
2425
|
+
},
|
|
2426
|
+
"reason": {
|
|
2427
|
+
"description": "why the probe is unsupported here"
|
|
2428
|
+
},
|
|
2429
|
+
"unread": {
|
|
2430
|
+
"$ref": "#/$defs/unread"
|
|
2431
|
+
}
|
|
2432
|
+
},
|
|
2433
|
+
"additionalProperties": true,
|
|
2434
|
+
"description": "the Accessibility services that are on, and the keyboard in use; iOS shows an app no other app, so it answers unsupported",
|
|
2435
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it"
|
|
2436
|
+
},
|
|
2437
|
+
"ios.notification_access": {
|
|
2438
|
+
"type": "object",
|
|
2439
|
+
"required": [
|
|
2440
|
+
"status"
|
|
2441
|
+
],
|
|
2442
|
+
"properties": {
|
|
2443
|
+
"status": {
|
|
2444
|
+
"enum": [
|
|
2445
|
+
"ok",
|
|
2446
|
+
"error",
|
|
2447
|
+
"unsupported",
|
|
2448
|
+
"not_enabled"
|
|
2449
|
+
]
|
|
2450
|
+
},
|
|
2451
|
+
"error": {
|
|
2452
|
+
"type": "string",
|
|
2453
|
+
"description": "why the probe could not measure"
|
|
2454
|
+
},
|
|
2455
|
+
"error_type": {
|
|
2456
|
+
"description": "the failure's kind (Android)"
|
|
2457
|
+
},
|
|
2458
|
+
"reason": {
|
|
2459
|
+
"description": "why the probe is unsupported here"
|
|
2460
|
+
},
|
|
2461
|
+
"unread": {
|
|
2462
|
+
"$ref": "#/$defs/unread"
|
|
2463
|
+
}
|
|
2464
|
+
},
|
|
2465
|
+
"additionalProperties": true,
|
|
2466
|
+
"description": "the apps allowed to read notifications; iOS shows an app no other app, so it answers unsupported",
|
|
2467
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it"
|
|
2468
|
+
},
|
|
2469
|
+
"ios.other_access": {
|
|
2470
|
+
"type": "object",
|
|
2471
|
+
"required": [
|
|
2472
|
+
"status"
|
|
2473
|
+
],
|
|
2474
|
+
"properties": {
|
|
2475
|
+
"status": {
|
|
2476
|
+
"enum": [
|
|
2477
|
+
"ok",
|
|
2478
|
+
"error",
|
|
2479
|
+
"unsupported",
|
|
2480
|
+
"not_enabled"
|
|
2481
|
+
]
|
|
2482
|
+
},
|
|
2483
|
+
"error": {
|
|
2484
|
+
"type": "string",
|
|
2485
|
+
"description": "why the probe could not measure"
|
|
2486
|
+
},
|
|
2487
|
+
"error_type": {
|
|
2488
|
+
"description": "the failure's kind (Android)"
|
|
2489
|
+
},
|
|
2490
|
+
"reason": {
|
|
2491
|
+
"description": "why the probe is unsupported here"
|
|
2492
|
+
},
|
|
2493
|
+
"unread": {
|
|
2494
|
+
"$ref": "#/$defs/unread"
|
|
2495
|
+
}
|
|
2496
|
+
},
|
|
2497
|
+
"additionalProperties": true,
|
|
2498
|
+
"description": "device-administrator apps, and known remote-control apps installed; iOS shows an app no other app, so it answers unsupported",
|
|
2499
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it"
|
|
2500
|
+
},
|
|
2501
|
+
"ios.screen_capture": {
|
|
2502
|
+
"type": "object",
|
|
2503
|
+
"required": [
|
|
2504
|
+
"status"
|
|
2505
|
+
],
|
|
2506
|
+
"properties": {
|
|
2507
|
+
"status": {
|
|
2508
|
+
"enum": [
|
|
2509
|
+
"ok",
|
|
2510
|
+
"error",
|
|
2511
|
+
"unsupported",
|
|
2512
|
+
"not_enabled"
|
|
2513
|
+
]
|
|
2514
|
+
},
|
|
2515
|
+
"error": {
|
|
2516
|
+
"type": "string",
|
|
2517
|
+
"description": "why the probe could not measure"
|
|
2518
|
+
},
|
|
2519
|
+
"error_type": {
|
|
2520
|
+
"description": "the failure's kind (Android)"
|
|
2521
|
+
},
|
|
2522
|
+
"reason": {
|
|
2523
|
+
"description": "why the probe is unsupported here"
|
|
2524
|
+
},
|
|
2525
|
+
"unread": {
|
|
2526
|
+
"$ref": "#/$defs/unread"
|
|
2527
|
+
},
|
|
2528
|
+
"recording": {
|
|
2529
|
+
"type": "boolean"
|
|
2530
|
+
},
|
|
2531
|
+
"external_displays": {
|
|
2532
|
+
"type": "integer",
|
|
2533
|
+
"minimum": 0,
|
|
2534
|
+
"maximum": 9007199254740992,
|
|
2535
|
+
"x-unit": "count"
|
|
2536
|
+
},
|
|
2537
|
+
"recording_status": {
|
|
2538
|
+
"enum": [
|
|
2539
|
+
"unsupported",
|
|
2540
|
+
"no_permission",
|
|
2541
|
+
"unavailable"
|
|
2542
|
+
],
|
|
2543
|
+
"description": "why recording was not measured"
|
|
2544
|
+
}
|
|
2545
|
+
},
|
|
2546
|
+
"additionalProperties": true,
|
|
2547
|
+
"description": "the screen being recorded, mirrored or cast",
|
|
2548
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
2549
|
+
"x-parts": [
|
|
2550
|
+
"recording",
|
|
2551
|
+
"external_displays"
|
|
2552
|
+
]
|
|
2553
|
+
},
|
|
2554
|
+
"ios.location": {
|
|
2555
|
+
"type": "object",
|
|
2556
|
+
"required": [
|
|
2557
|
+
"status"
|
|
2558
|
+
],
|
|
2559
|
+
"properties": {
|
|
2560
|
+
"status": {
|
|
2561
|
+
"enum": [
|
|
2562
|
+
"ok",
|
|
2563
|
+
"error",
|
|
2564
|
+
"unsupported",
|
|
2565
|
+
"not_enabled"
|
|
2566
|
+
]
|
|
2567
|
+
},
|
|
2568
|
+
"error": {
|
|
2569
|
+
"type": "string",
|
|
2570
|
+
"description": "why the probe could not measure"
|
|
2571
|
+
},
|
|
2572
|
+
"error_type": {
|
|
2573
|
+
"description": "the failure's kind (Android)"
|
|
2574
|
+
},
|
|
2575
|
+
"reason": {
|
|
2576
|
+
"description": "why the probe is unsupported here"
|
|
2577
|
+
},
|
|
2578
|
+
"unread": {
|
|
2579
|
+
"$ref": "#/$defs/unread"
|
|
2580
|
+
},
|
|
2581
|
+
"permission": {
|
|
2582
|
+
"enum": [
|
|
2583
|
+
"none",
|
|
2584
|
+
"approximate",
|
|
2585
|
+
"precise"
|
|
2586
|
+
]
|
|
2587
|
+
},
|
|
2588
|
+
"latitude": {
|
|
2589
|
+
"type": "number",
|
|
2590
|
+
"minimum": -90.0,
|
|
2591
|
+
"maximum": 90.0,
|
|
2592
|
+
"x-unit": "degrees, WGS 84"
|
|
2593
|
+
},
|
|
2594
|
+
"longitude": {
|
|
2595
|
+
"type": "number",
|
|
2596
|
+
"minimum": -180.0,
|
|
2597
|
+
"maximum": 180.0,
|
|
2598
|
+
"x-unit": "degrees, WGS 84"
|
|
2599
|
+
},
|
|
2600
|
+
"accuracy_m": {
|
|
2601
|
+
"type": "number",
|
|
2602
|
+
"minimum": 0.0,
|
|
2603
|
+
"maximum": 10000000.0,
|
|
2604
|
+
"x-unit": "metres"
|
|
2605
|
+
},
|
|
2606
|
+
"age_seconds": {
|
|
2607
|
+
"type": "integer",
|
|
2608
|
+
"minimum": 0,
|
|
2609
|
+
"maximum": 9007199254740992,
|
|
2610
|
+
"x-unit": "seconds"
|
|
2611
|
+
},
|
|
2612
|
+
"fix_time": {
|
|
2613
|
+
"type": "integer",
|
|
2614
|
+
"minimum": 0,
|
|
2615
|
+
"maximum": 9007199254740992,
|
|
2616
|
+
"x-unit": "Unix seconds, UTC"
|
|
2617
|
+
}
|
|
2618
|
+
},
|
|
2619
|
+
"additionalProperties": true,
|
|
2620
|
+
"description": "the last location the phone already knows -- never a fresh fix, never a prompt",
|
|
2621
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
2622
|
+
"x-parts": [
|
|
2623
|
+
"permission",
|
|
2624
|
+
"latitude",
|
|
2625
|
+
"longitude",
|
|
2626
|
+
"age_seconds"
|
|
2627
|
+
]
|
|
2628
|
+
},
|
|
2629
|
+
"ios.mock_location": {
|
|
2630
|
+
"type": "object",
|
|
2631
|
+
"required": [
|
|
2632
|
+
"status"
|
|
2633
|
+
],
|
|
2634
|
+
"properties": {
|
|
2635
|
+
"status": {
|
|
2636
|
+
"enum": [
|
|
2637
|
+
"ok",
|
|
2638
|
+
"error",
|
|
2639
|
+
"unsupported",
|
|
2640
|
+
"not_enabled"
|
|
2641
|
+
]
|
|
2642
|
+
},
|
|
2643
|
+
"error": {
|
|
2644
|
+
"type": "string",
|
|
2645
|
+
"description": "why the probe could not measure"
|
|
2646
|
+
},
|
|
2647
|
+
"error_type": {
|
|
2648
|
+
"description": "the failure's kind (Android)"
|
|
2649
|
+
},
|
|
2650
|
+
"reason": {
|
|
2651
|
+
"description": "why the probe is unsupported here"
|
|
2652
|
+
},
|
|
2653
|
+
"unread": {
|
|
2654
|
+
"$ref": "#/$defs/unread"
|
|
2655
|
+
},
|
|
2656
|
+
"permission": {
|
|
2657
|
+
"enum": [
|
|
2658
|
+
"none",
|
|
2659
|
+
"approximate",
|
|
2660
|
+
"precise"
|
|
2661
|
+
]
|
|
2662
|
+
},
|
|
2663
|
+
"mock": {
|
|
2664
|
+
"type": "boolean"
|
|
2665
|
+
},
|
|
2666
|
+
"accessory": {
|
|
2667
|
+
"type": "boolean"
|
|
2668
|
+
},
|
|
2669
|
+
"age_seconds": {
|
|
2670
|
+
"type": "integer",
|
|
2671
|
+
"minimum": 0,
|
|
2672
|
+
"maximum": 9007199254740992,
|
|
2673
|
+
"x-unit": "seconds"
|
|
2674
|
+
},
|
|
2675
|
+
"fix_time": {
|
|
2676
|
+
"type": "integer",
|
|
2677
|
+
"minimum": 0,
|
|
2678
|
+
"maximum": 9007199254740992,
|
|
2679
|
+
"x-unit": "Unix seconds, UTC"
|
|
2680
|
+
}
|
|
2681
|
+
},
|
|
2682
|
+
"additionalProperties": true,
|
|
2683
|
+
"description": "whether that location was faked; never its coordinates",
|
|
2684
|
+
"x-answered": "personal: only when the backend requests it and the app enabled it",
|
|
2685
|
+
"x-parts": [
|
|
2686
|
+
"permission",
|
|
2687
|
+
"mock",
|
|
2688
|
+
"age_seconds"
|
|
2689
|
+
]
|
|
2690
|
+
},
|
|
2691
|
+
"ios.probe_results": {
|
|
2692
|
+
"type": "object",
|
|
2693
|
+
"properties": {
|
|
2694
|
+
"app_identity": {
|
|
2695
|
+
"$ref": "#/$defs/ios.app_identity"
|
|
2696
|
+
},
|
|
2697
|
+
"code_signing": {
|
|
2698
|
+
"$ref": "#/$defs/ios.code_signing"
|
|
2699
|
+
},
|
|
2700
|
+
"debugger": {
|
|
2701
|
+
"$ref": "#/$defs/ios.debugger"
|
|
2702
|
+
},
|
|
2703
|
+
"jailbreak_files": {
|
|
2704
|
+
"$ref": "#/$defs/ios.jailbreak_files"
|
|
2705
|
+
},
|
|
2706
|
+
"sandbox": {
|
|
2707
|
+
"$ref": "#/$defs/ios.sandbox"
|
|
2708
|
+
},
|
|
2709
|
+
"dyld_images": {
|
|
2710
|
+
"$ref": "#/$defs/ios.dyld_images"
|
|
2711
|
+
},
|
|
2712
|
+
"code_integrity": {
|
|
2713
|
+
"$ref": "#/$defs/ios.code_integrity"
|
|
2714
|
+
},
|
|
2715
|
+
"environment": {
|
|
2716
|
+
"$ref": "#/$defs/ios.environment"
|
|
2717
|
+
},
|
|
2718
|
+
"simulator": {
|
|
2719
|
+
"$ref": "#/$defs/ios.simulator"
|
|
2720
|
+
},
|
|
2721
|
+
"device": {
|
|
2722
|
+
"$ref": "#/$defs/ios.device"
|
|
2723
|
+
},
|
|
2724
|
+
"network": {
|
|
2725
|
+
"$ref": "#/$defs/ios.network"
|
|
2726
|
+
},
|
|
2727
|
+
"local_addresses": {
|
|
2728
|
+
"$ref": "#/$defs/ios.local_addresses"
|
|
2729
|
+
},
|
|
2730
|
+
"accessibility": {
|
|
2731
|
+
"$ref": "#/$defs/ios.accessibility"
|
|
2732
|
+
},
|
|
2733
|
+
"notification_access": {
|
|
2734
|
+
"$ref": "#/$defs/ios.notification_access"
|
|
2735
|
+
},
|
|
2736
|
+
"other_access": {
|
|
2737
|
+
"$ref": "#/$defs/ios.other_access"
|
|
2738
|
+
},
|
|
2739
|
+
"screen_capture": {
|
|
2740
|
+
"$ref": "#/$defs/ios.screen_capture"
|
|
2741
|
+
},
|
|
2742
|
+
"location": {
|
|
2743
|
+
"$ref": "#/$defs/ios.location"
|
|
2744
|
+
},
|
|
2745
|
+
"mock_location": {
|
|
2746
|
+
"$ref": "#/$defs/ios.mock_location"
|
|
2747
|
+
}
|
|
2748
|
+
},
|
|
2749
|
+
"additionalProperties": true,
|
|
2750
|
+
"description": "one object per measurement; a measurement this contract does not know is ignored"
|
|
2751
|
+
}
|
|
2752
|
+
}
|
|
2753
|
+
}
|