@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.
Files changed (117) hide show
  1. package/CHANGELOG.md +40 -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 +1157 -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 +338 -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 +333 -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 +767 -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 +959 -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 +370 -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 +699 -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 +134 -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/answers.d.ts +6 -0
  83. package/lib/util/answers.js +16 -0
  84. package/lib/util/bytes.d.ts +18 -0
  85. package/lib/util/bytes.js +207 -0
  86. package/lib/util/native.d.ts +20 -0
  87. package/lib/util/native.js +49 -0
  88. package/lib/util/release.d.ts +2 -0
  89. package/lib/util/release.js +7 -0
  90. package/lib/util/target.d.ts +18 -0
  91. package/lib/util/target.js +128 -0
  92. package/package.json +81 -4
  93. package/src/client.ts +221 -0
  94. package/src/collector.ts +64 -0
  95. package/src/deviceTrust.ts +851 -0
  96. package/src/errors.ts +71 -0
  97. package/src/index.ts +19 -0
  98. package/src/installationKey.ts +223 -0
  99. package/src/installationStore.ts +143 -0
  100. package/src/native/NativeNecessaryInstallationKey.ts +12 -0
  101. package/src/native/NativeNecessaryIntegrity.ts +15 -0
  102. package/src/native/NativeNecessarySecureScreen.ts +9 -0
  103. package/src/native/NativeNecessaryStepUpKey.ts +11 -0
  104. package/src/native/NativeNecessaryStorage.ts +16 -0
  105. package/src/protocol.ts +52 -0
  106. package/src/reinstallHint.ts +69 -0
  107. package/src/report.ts +168 -0
  108. package/src/requestProof.ts +295 -0
  109. package/src/secureScreen.ts +29 -0
  110. package/src/stepUpKey.ts +238 -0
  111. package/src/transport.ts +145 -0
  112. package/src/util/answers.ts +15 -0
  113. package/src/util/bytes.ts +194 -0
  114. package/src/util/native.ts +56 -0
  115. package/src/util/release.ts +6 -0
  116. package/src/util/target.ts +132 -0
  117. package/vectors/client_server.json +264 -0
@@ -0,0 +1,106 @@
1
+ {
2
+ "description": "A clean iPhone, iOS collector 5.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "code_signing",
7
+ "debugger",
8
+ "jailbreak_files",
9
+ "sandbox",
10
+ "dyld_images"
11
+ ],
12
+ "optional_probes": []
13
+ },
14
+ "expect": "complete",
15
+ "why": "Every requested measurement answered ok with its fields; code_integrity volunteered with every app image compared, the main executable among them.",
16
+ "report": {
17
+ "installation_id": "00000000-0000-4000-8000-000000000001",
18
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
19
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
20
+ "collected_at": 1792857600,
21
+ "version": 1,
22
+ "platform": "ios",
23
+ "collector_version": 5,
24
+ "probe_results": {
25
+ "app_identity": {
26
+ "status": "ok",
27
+ "bundle_id": "com.example.app",
28
+ "executable_sha256": "8e1f0a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7",
29
+ "version_name": "2.4.1",
30
+ "version_code": "241",
31
+ "executable_bytes": 487032
32
+ },
33
+ "code_signing": {
34
+ "status": "ok",
35
+ "signing_identifier": "com.example.app",
36
+ "team_identifier": "ABCDE12345",
37
+ "get_task_allow": false,
38
+ "signed": true,
39
+ "entitlement_count": 4
40
+ },
41
+ "debugger": {
42
+ "status": "ok",
43
+ "traced": false
44
+ },
45
+ "jailbreak_files": {
46
+ "status": "ok",
47
+ "found_paths": [],
48
+ "checked_count": 20
49
+ },
50
+ "sandbox": {
51
+ "status": "ok",
52
+ "write_outside_sandbox_succeeded": false
53
+ },
54
+ "dyld_images": {
55
+ "status": "ok",
56
+ "suspicious_tokens": [],
57
+ "suspicious_image_count": 0,
58
+ "image_count": 438
59
+ },
60
+ "code_integrity": {
61
+ "status": "ok",
62
+ "checked": true,
63
+ "app_compared_bytes": 10645480,
64
+ "app_diff_bytes": 0,
65
+ "app_libs_diff": 0,
66
+ "diffed_libs": "",
67
+ "app_images_expected": 3,
68
+ "app_images_compared": 3,
69
+ "app_images_unreadable": 0,
70
+ "app_images_skipped": 0,
71
+ "app_expected_bytes": 10645480,
72
+ "app_unreadable_bytes": 0,
73
+ "app_skipped_bytes": 0,
74
+ "app_complete": true,
75
+ "main_executable_compared": true,
76
+ "system_images_unreadable": 435,
77
+ "core_compared_bytes": 0,
78
+ "core_diff_bytes": 0,
79
+ "diff_bytes": 0,
80
+ "ext_compared_bytes": 0,
81
+ "ext_diff_bytes": 0,
82
+ "ext_libs_diff": 0,
83
+ "system_bucket_reason": "dyld_shared_cache_has_no_backing_files",
84
+ "app_segment_compared_bytes": 15040512,
85
+ "app_segment_diff_bytes": 0
86
+ },
87
+ "device": {
88
+ "status": "ok",
89
+ "os_version": "17.6.1",
90
+ "os_build": "21G93",
91
+ "model_identifier": "iPhone15,2",
92
+ "page_size": 16384
93
+ },
94
+ "network": {
95
+ "status": "ok",
96
+ "vpn_active": false,
97
+ "http_proxy_configured": false,
98
+ "scoped_interfaces": [
99
+ "en0",
100
+ "pdp_ip0"
101
+ ]
102
+ }
103
+ },
104
+ "enabled_measurements": []
105
+ }
106
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "description": "The same iPhone, a requested measurement answering ok without its fields.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "code_signing",
7
+ "debugger",
8
+ "jailbreak_files",
9
+ "sandbox",
10
+ "dyld_images"
11
+ ],
12
+ "optional_probes": []
13
+ },
14
+ "expect": "incomplete",
15
+ "why": "ok is a claim, not a measurement: jailbreak_files carries no found_paths.",
16
+ "report": {
17
+ "installation_id": "00000000-0000-4000-8000-000000000001",
18
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
19
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
20
+ "collected_at": 1792857600,
21
+ "version": 1,
22
+ "platform": "ios",
23
+ "collector_version": 5,
24
+ "probe_results": {
25
+ "app_identity": {
26
+ "status": "ok",
27
+ "bundle_id": "com.example.app",
28
+ "executable_sha256": "8e1f0a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7",
29
+ "version_name": "2.4.1",
30
+ "version_code": "241",
31
+ "executable_bytes": 487032
32
+ },
33
+ "code_signing": {
34
+ "status": "ok",
35
+ "signing_identifier": "com.example.app",
36
+ "team_identifier": "ABCDE12345",
37
+ "get_task_allow": false,
38
+ "signed": true,
39
+ "entitlement_count": 4
40
+ },
41
+ "debugger": {
42
+ "status": "ok",
43
+ "traced": false
44
+ },
45
+ "jailbreak_files": {
46
+ "status": "ok",
47
+ "checked_count": 20
48
+ },
49
+ "sandbox": {
50
+ "status": "ok",
51
+ "write_outside_sandbox_succeeded": false
52
+ },
53
+ "dyld_images": {
54
+ "status": "ok",
55
+ "suspicious_tokens": [],
56
+ "suspicious_image_count": 0,
57
+ "image_count": 438
58
+ },
59
+ "code_integrity": {
60
+ "status": "ok",
61
+ "checked": true,
62
+ "app_compared_bytes": 10645480,
63
+ "app_diff_bytes": 0,
64
+ "app_libs_diff": 0,
65
+ "diffed_libs": "",
66
+ "app_images_expected": 3,
67
+ "app_images_compared": 3,
68
+ "app_images_unreadable": 0,
69
+ "app_images_skipped": 0,
70
+ "app_expected_bytes": 10645480,
71
+ "app_unreadable_bytes": 0,
72
+ "app_skipped_bytes": 0,
73
+ "app_complete": true,
74
+ "main_executable_compared": true,
75
+ "system_images_unreadable": 435,
76
+ "core_compared_bytes": 0,
77
+ "core_diff_bytes": 0,
78
+ "diff_bytes": 0,
79
+ "ext_compared_bytes": 0,
80
+ "ext_diff_bytes": 0,
81
+ "ext_libs_diff": 0,
82
+ "system_bucket_reason": "dyld_shared_cache_has_no_backing_files",
83
+ "app_segment_compared_bytes": 15040512,
84
+ "app_segment_diff_bytes": 0
85
+ },
86
+ "device": {
87
+ "status": "ok",
88
+ "os_version": "17.6.1",
89
+ "os_build": "21G93",
90
+ "model_identifier": "iPhone15,2",
91
+ "page_size": 16384
92
+ },
93
+ "network": {
94
+ "status": "ok",
95
+ "vpn_active": false,
96
+ "http_proxy_configured": false,
97
+ "scoped_interfaces": [
98
+ "en0",
99
+ "pdp_ip0"
100
+ ]
101
+ }
102
+ },
103
+ "enabled_measurements": []
104
+ }
105
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "description": "The same iPhone with the app-code comparison requested, images that do not add up.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "code_signing",
7
+ "debugger",
8
+ "jailbreak_files",
9
+ "sandbox",
10
+ "dyld_images",
11
+ "code_integrity"
12
+ ],
13
+ "optional_probes": []
14
+ },
15
+ "expect": "invalid",
16
+ "why": "Four images expected, three compared and none unreadable or skipped: figures that contradict each other.",
17
+ "report": {
18
+ "installation_id": "00000000-0000-4000-8000-000000000001",
19
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
20
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
21
+ "collected_at": 1792857600,
22
+ "version": 1,
23
+ "platform": "ios",
24
+ "collector_version": 5,
25
+ "probe_results": {
26
+ "app_identity": {
27
+ "status": "ok",
28
+ "bundle_id": "com.example.app",
29
+ "executable_sha256": "8e1f0a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7",
30
+ "version_name": "2.4.1",
31
+ "version_code": "241",
32
+ "executable_bytes": 487032
33
+ },
34
+ "code_signing": {
35
+ "status": "ok",
36
+ "signing_identifier": "com.example.app",
37
+ "team_identifier": "ABCDE12345",
38
+ "get_task_allow": false,
39
+ "signed": true,
40
+ "entitlement_count": 4
41
+ },
42
+ "debugger": {
43
+ "status": "ok",
44
+ "traced": false
45
+ },
46
+ "jailbreak_files": {
47
+ "status": "ok",
48
+ "found_paths": [],
49
+ "checked_count": 20
50
+ },
51
+ "sandbox": {
52
+ "status": "ok",
53
+ "write_outside_sandbox_succeeded": false
54
+ },
55
+ "dyld_images": {
56
+ "status": "ok",
57
+ "suspicious_tokens": [],
58
+ "suspicious_image_count": 0,
59
+ "image_count": 438
60
+ },
61
+ "code_integrity": {
62
+ "status": "ok",
63
+ "checked": true,
64
+ "app_compared_bytes": 10645480,
65
+ "app_diff_bytes": 0,
66
+ "app_libs_diff": 0,
67
+ "diffed_libs": "",
68
+ "app_images_expected": 4,
69
+ "app_images_compared": 3,
70
+ "app_images_unreadable": 0,
71
+ "app_images_skipped": 0,
72
+ "app_expected_bytes": 10645480,
73
+ "app_unreadable_bytes": 0,
74
+ "app_skipped_bytes": 0,
75
+ "app_complete": true,
76
+ "main_executable_compared": true,
77
+ "system_images_unreadable": 435,
78
+ "core_compared_bytes": 0,
79
+ "core_diff_bytes": 0,
80
+ "diff_bytes": 0,
81
+ "ext_compared_bytes": 0,
82
+ "ext_diff_bytes": 0,
83
+ "ext_libs_diff": 0,
84
+ "system_bucket_reason": "dyld_shared_cache_has_no_backing_files",
85
+ "app_segment_compared_bytes": 15040512,
86
+ "app_segment_diff_bytes": 0
87
+ },
88
+ "device": {
89
+ "status": "ok",
90
+ "os_version": "17.6.1",
91
+ "os_build": "21G93",
92
+ "model_identifier": "iPhone15,2",
93
+ "page_size": 16384
94
+ },
95
+ "network": {
96
+ "status": "ok",
97
+ "vpn_active": false,
98
+ "http_proxy_configured": false,
99
+ "scoped_interfaces": [
100
+ "en0",
101
+ "pdp_ip0"
102
+ ]
103
+ }
104
+ },
105
+ "enabled_measurements": []
106
+ }
107
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "description": "The same iPhone with the app-code comparison requested, one image unreadable.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "code_signing",
7
+ "debugger",
8
+ "jailbreak_files",
9
+ "sandbox",
10
+ "dyld_images",
11
+ "code_integrity"
12
+ ],
13
+ "optional_probes": []
14
+ },
15
+ "expect": "partial",
16
+ "why": "Two of three app images were compared: a comparison of part of the app's code, never a complete clean one.",
17
+ "report": {
18
+ "installation_id": "00000000-0000-4000-8000-000000000001",
19
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
20
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
21
+ "collected_at": 1792857600,
22
+ "version": 1,
23
+ "platform": "ios",
24
+ "collector_version": 5,
25
+ "probe_results": {
26
+ "app_identity": {
27
+ "status": "ok",
28
+ "bundle_id": "com.example.app",
29
+ "executable_sha256": "8e1f0a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7",
30
+ "version_name": "2.4.1",
31
+ "version_code": "241",
32
+ "executable_bytes": 487032
33
+ },
34
+ "code_signing": {
35
+ "status": "ok",
36
+ "signing_identifier": "com.example.app",
37
+ "team_identifier": "ABCDE12345",
38
+ "get_task_allow": false,
39
+ "signed": true,
40
+ "entitlement_count": 4
41
+ },
42
+ "debugger": {
43
+ "status": "ok",
44
+ "traced": false
45
+ },
46
+ "jailbreak_files": {
47
+ "status": "ok",
48
+ "found_paths": [],
49
+ "checked_count": 20
50
+ },
51
+ "sandbox": {
52
+ "status": "ok",
53
+ "write_outside_sandbox_succeeded": false
54
+ },
55
+ "dyld_images": {
56
+ "status": "ok",
57
+ "suspicious_tokens": [],
58
+ "suspicious_image_count": 0,
59
+ "image_count": 438
60
+ },
61
+ "code_integrity": {
62
+ "status": "ok",
63
+ "checked": true,
64
+ "app_compared_bytes": 4743968,
65
+ "app_diff_bytes": 0,
66
+ "app_libs_diff": 0,
67
+ "diffed_libs": "",
68
+ "app_images_expected": 3,
69
+ "app_images_compared": 2,
70
+ "app_images_unreadable": 1,
71
+ "app_images_skipped": 0,
72
+ "app_expected_bytes": 10645480,
73
+ "app_unreadable_bytes": 5901512,
74
+ "app_skipped_bytes": 0,
75
+ "app_complete": false,
76
+ "main_executable_compared": true,
77
+ "system_images_unreadable": 435,
78
+ "core_compared_bytes": 0,
79
+ "core_diff_bytes": 0,
80
+ "diff_bytes": 0,
81
+ "ext_compared_bytes": 0,
82
+ "ext_diff_bytes": 0,
83
+ "ext_libs_diff": 0,
84
+ "system_bucket_reason": "dyld_shared_cache_has_no_backing_files",
85
+ "app_segment_compared_bytes": 15040512,
86
+ "app_segment_diff_bytes": 0,
87
+ "app_images_not_compared": {
88
+ "Frameworks/App.framework/App": "unreadable: 4096 of 5914624 bytes read"
89
+ }
90
+ },
91
+ "device": {
92
+ "status": "ok",
93
+ "os_version": "17.6.1",
94
+ "os_build": "21G93",
95
+ "model_identifier": "iPhone15,2",
96
+ "page_size": 16384
97
+ },
98
+ "network": {
99
+ "status": "ok",
100
+ "vpn_active": false,
101
+ "http_proxy_configured": false,
102
+ "scoped_interfaces": [
103
+ "en0",
104
+ "pdp_ip0"
105
+ ]
106
+ }
107
+ },
108
+ "enabled_measurements": []
109
+ }
110
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "description": "A malformed report.",
3
+ "plan": {
4
+ "required_probes": [
5
+ "app_identity",
6
+ "code_signing",
7
+ "debugger",
8
+ "jailbreak_files",
9
+ "sandbox",
10
+ "dyld_images"
11
+ ],
12
+ "optional_probes": []
13
+ },
14
+ "expect": "refused",
15
+ "why": "app_images_not_compared must name each image with why; a list is malformed.",
16
+ "report": {
17
+ "installation_id": "00000000-0000-4000-8000-000000000001",
18
+ "challenge_id": "00000000-0000-4000-8000-000000000002",
19
+ "challenge_nonce": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
20
+ "collected_at": 1792857600,
21
+ "version": 1,
22
+ "platform": "ios",
23
+ "collector_version": 5,
24
+ "probe_results": {
25
+ "app_identity": {
26
+ "status": "ok",
27
+ "bundle_id": "com.example.app",
28
+ "executable_sha256": "8e1f0a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7",
29
+ "version_name": "2.4.1",
30
+ "version_code": "241",
31
+ "executable_bytes": 487032
32
+ },
33
+ "code_signing": {
34
+ "status": "ok",
35
+ "signing_identifier": "com.example.app",
36
+ "team_identifier": "ABCDE12345",
37
+ "get_task_allow": false,
38
+ "signed": true,
39
+ "entitlement_count": 4
40
+ },
41
+ "debugger": {
42
+ "status": "ok",
43
+ "traced": false
44
+ },
45
+ "jailbreak_files": {
46
+ "status": "ok",
47
+ "found_paths": [],
48
+ "checked_count": 20
49
+ },
50
+ "sandbox": {
51
+ "status": "ok",
52
+ "write_outside_sandbox_succeeded": false
53
+ },
54
+ "dyld_images": {
55
+ "status": "ok",
56
+ "suspicious_tokens": [],
57
+ "suspicious_image_count": 0,
58
+ "image_count": 438
59
+ },
60
+ "code_integrity": {
61
+ "status": "ok",
62
+ "checked": true,
63
+ "app_compared_bytes": 10645480,
64
+ "app_diff_bytes": 0,
65
+ "app_libs_diff": 0,
66
+ "diffed_libs": "",
67
+ "app_images_expected": 3,
68
+ "app_images_compared": 3,
69
+ "app_images_unreadable": 0,
70
+ "app_images_skipped": 0,
71
+ "app_expected_bytes": 10645480,
72
+ "app_unreadable_bytes": 0,
73
+ "app_skipped_bytes": 0,
74
+ "app_complete": true,
75
+ "main_executable_compared": true,
76
+ "system_images_unreadable": 435,
77
+ "core_compared_bytes": 0,
78
+ "core_diff_bytes": 0,
79
+ "diff_bytes": 0,
80
+ "ext_compared_bytes": 0,
81
+ "ext_diff_bytes": 0,
82
+ "ext_libs_diff": 0,
83
+ "system_bucket_reason": "dyld_shared_cache_has_no_backing_files",
84
+ "app_segment_compared_bytes": 15040512,
85
+ "app_segment_diff_bytes": 0,
86
+ "app_images_not_compared": [
87
+ "App"
88
+ ]
89
+ },
90
+ "device": {
91
+ "status": "ok",
92
+ "os_version": "17.6.1",
93
+ "os_build": "21G93",
94
+ "model_identifier": "iPhone15,2",
95
+ "page_size": 16384
96
+ },
97
+ "network": {
98
+ "status": "ok",
99
+ "vpn_active": false,
100
+ "http_proxy_configured": false,
101
+ "scoped_interfaces": [
102
+ "en0",
103
+ "pdp_ip0"
104
+ ]
105
+ }
106
+ },
107
+ "enabled_measurements": []
108
+ }
109
+ }