bla-agents 1.1.0 → 1.6.0

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 (279) hide show
  1. package/.agents/skills/blind-llm-agents/SKILL.md +20 -14
  2. package/DISCLAIMER.md +15 -7
  3. package/README.md +153 -198
  4. package/dist/bundler/index.d.ts +19 -2
  5. package/dist/bundler/index.d.ts.map +1 -1
  6. package/dist/bundler/index.js +47 -4
  7. package/dist/bundler/index.js.map +1 -1
  8. package/dist/cli.d.ts +5 -0
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +123 -18
  11. package/dist/cli.js.map +1 -1
  12. package/dist/core/config.d.ts +54 -0
  13. package/dist/core/config.d.ts.map +1 -0
  14. package/dist/core/config.js +160 -0
  15. package/dist/core/config.js.map +1 -0
  16. package/dist/core/coverage-contract.d.ts +97 -0
  17. package/dist/core/coverage-contract.d.ts.map +1 -0
  18. package/dist/core/coverage-contract.js +164 -0
  19. package/dist/core/coverage-contract.js.map +1 -0
  20. package/dist/core/debug-posture.d.ts +40 -0
  21. package/dist/core/debug-posture.d.ts.map +1 -0
  22. package/dist/core/debug-posture.js +197 -0
  23. package/dist/core/debug-posture.js.map +1 -0
  24. package/dist/core/detector.d.ts.map +1 -1
  25. package/dist/core/detector.js +58 -6
  26. package/dist/core/detector.js.map +1 -1
  27. package/dist/core/identifiers.d.ts +32 -0
  28. package/dist/core/identifiers.d.ts.map +1 -0
  29. package/dist/core/identifiers.js +263 -0
  30. package/dist/core/identifiers.js.map +1 -0
  31. package/dist/core/llm-directives.d.ts +12 -0
  32. package/dist/core/llm-directives.d.ts.map +1 -0
  33. package/dist/core/llm-directives.js +23 -0
  34. package/dist/core/llm-directives.js.map +1 -0
  35. package/dist/core/prng.d.ts +10 -1
  36. package/dist/core/prng.d.ts.map +1 -1
  37. package/dist/core/prng.js +27 -2
  38. package/dist/core/prng.js.map +1 -1
  39. package/dist/core/release-exposure.d.ts.map +1 -1
  40. package/dist/core/release-exposure.js +13 -2
  41. package/dist/core/release-exposure.js.map +1 -1
  42. package/dist/core/release-plan.d.ts +68 -0
  43. package/dist/core/release-plan.d.ts.map +1 -0
  44. package/dist/core/release-plan.js +244 -0
  45. package/dist/core/release-plan.js.map +1 -0
  46. package/dist/core/sarif.d.ts +53 -0
  47. package/dist/core/sarif.d.ts.map +1 -0
  48. package/dist/core/sarif.js +95 -0
  49. package/dist/core/sarif.js.map +1 -0
  50. package/dist/core/sqlite-runtime.d.ts +13 -0
  51. package/dist/core/sqlite-runtime.d.ts.map +1 -1
  52. package/dist/core/sqlite-runtime.js +38 -8
  53. package/dist/core/sqlite-runtime.js.map +1 -1
  54. package/dist/core/types.d.ts +7 -2
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/engine/auditor.d.ts.map +1 -1
  57. package/dist/engine/auditor.js +380 -19
  58. package/dist/engine/auditor.js.map +1 -1
  59. package/dist/engine/benchmark.d.ts +1 -1
  60. package/dist/engine/benchmark.d.ts.map +1 -1
  61. package/dist/engine/benchmark.js +121 -41
  62. package/dist/engine/benchmark.js.map +1 -1
  63. package/dist/engine/defender.d.ts +1 -0
  64. package/dist/engine/defender.d.ts.map +1 -1
  65. package/dist/engine/defender.js +7 -1
  66. package/dist/engine/defender.js.map +1 -1
  67. package/dist/engine/harden.d.ts +61 -0
  68. package/dist/engine/harden.d.ts.map +1 -0
  69. package/dist/engine/harden.js +294 -0
  70. package/dist/engine/harden.js.map +1 -0
  71. package/dist/engine/protector.d.ts.map +1 -1
  72. package/dist/engine/protector.js +242 -26
  73. package/dist/engine/protector.js.map +1 -1
  74. package/dist/identity.d.ts +112 -2
  75. package/dist/identity.d.ts.map +1 -1
  76. package/dist/identity.js +112 -2
  77. package/dist/identity.js.map +1 -1
  78. package/dist/index.d.ts +26 -9
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +26 -9
  81. package/dist/index.js.map +1 -1
  82. package/dist/mcp/server.d.ts +59 -152
  83. package/dist/mcp/server.d.ts.map +1 -1
  84. package/dist/mcp/server.js +466 -50
  85. package/dist/mcp/server.js.map +1 -1
  86. package/dist/setup/clients.d.ts +49 -1
  87. package/dist/setup/clients.d.ts.map +1 -1
  88. package/dist/setup/clients.js +1193 -20
  89. package/dist/setup/clients.js.map +1 -1
  90. package/dist/setup/doctor.d.ts +58 -14
  91. package/dist/setup/doctor.d.ts.map +1 -1
  92. package/dist/setup/doctor.js +316 -22
  93. package/dist/setup/doctor.js.map +1 -1
  94. package/dist/setup/setup.d.ts +77 -7
  95. package/dist/setup/setup.d.ts.map +1 -1
  96. package/dist/setup/setup.js +591 -62
  97. package/dist/setup/setup.js.map +1 -1
  98. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
  99. package/dist/shields/chaff/chaff-generator.js +12 -3
  100. package/dist/shields/chaff/chaff-generator.js.map +1 -1
  101. package/dist/shields/deception/architecture-mirage.js +1 -1
  102. package/dist/shields/deception/architecture-mirage.js.map +1 -1
  103. package/dist/shields/deception/canary-honeypot.d.ts +33 -0
  104. package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
  105. package/dist/shields/deception/canary-honeypot.js +95 -0
  106. package/dist/shields/deception/canary-honeypot.js.map +1 -0
  107. package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
  108. package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
  109. package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
  110. package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
  111. package/dist/shields/deception/crash-trace-decoy.js +1 -1
  112. package/dist/shields/deception/crash-trace-decoy.js.map +1 -1
  113. package/dist/shields/deception/decompiler-illusion.js +1 -1
  114. package/dist/shields/deception/decompiler-illusion.js.map +1 -1
  115. package/dist/shields/deception/diff-noise-injector.js +1 -1
  116. package/dist/shields/deception/diff-noise-injector.js.map +1 -1
  117. package/dist/shields/deception/evidence-contract-poison.js +5 -5
  118. package/dist/shields/deception/evidence-contract-poison.js.map +1 -1
  119. package/dist/shields/deception/format-payloads.d.ts +21 -0
  120. package/dist/shields/deception/format-payloads.d.ts.map +1 -0
  121. package/dist/shields/deception/format-payloads.js +24 -0
  122. package/dist/shields/deception/format-payloads.js.map +1 -0
  123. package/dist/shields/deception/index.d.ts +10 -2
  124. package/dist/shields/deception/index.d.ts.map +1 -1
  125. package/dist/shields/deception/index.js +20 -3
  126. package/dist/shields/deception/index.js.map +1 -1
  127. package/dist/shields/deception/prompt-completion-poison.d.ts +3 -2
  128. package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -1
  129. package/dist/shields/deception/prompt-completion-poison.js +6 -3
  130. package/dist/shields/deception/prompt-completion-poison.js.map +1 -1
  131. package/dist/shields/deception/shadow-business-logic.js +4 -4
  132. package/dist/shields/deception/shadow-business-logic.js.map +1 -1
  133. package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
  134. package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
  135. package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
  136. package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
  137. package/dist/shields/exhaustion/asar-header-amplifier.d.ts +12 -3
  138. package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -1
  139. package/dist/shields/exhaustion/asar-header-amplifier.js +30 -8
  140. package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -1
  141. package/dist/shields/exhaustion/bpe-token-amplifier.js +2 -2
  142. package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -1
  143. package/dist/shields/exhaustion/callgraph-labyrinth.js +2 -2
  144. package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -1
  145. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +1 -1
  146. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -1
  147. package/dist/shields/exhaustion/frida-capture-saturation.d.ts +10 -5
  148. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
  149. package/dist/shields/exhaustion/frida-capture-saturation.js +21 -8
  150. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
  151. package/dist/shields/exhaustion/index.d.ts +2 -2
  152. package/dist/shields/exhaustion/index.d.ts.map +1 -1
  153. package/dist/shields/exhaustion/index.js +2 -2
  154. package/dist/shields/exhaustion/index.js.map +1 -1
  155. package/dist/shields/exhaustion/obligation-flooder.d.ts +23 -6
  156. package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -1
  157. package/dist/shields/exhaustion/obligation-flooder.js +29 -12
  158. package/dist/shields/exhaustion/obligation-flooder.js.map +1 -1
  159. package/dist/shields/exhaustion/rea-budget-matrix.d.ts +8 -2
  160. package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -1
  161. package/dist/shields/exhaustion/rea-budget-matrix.js +139 -16
  162. package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -1
  163. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -1
  164. package/dist/shields/exhaustion/regex-worker-tarpit.js +2 -1
  165. package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -1
  166. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +7 -4
  167. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -1
  168. package/dist/shields/exhaustion/wasm-interface-exhaustion.js +16 -7
  169. package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -1
  170. package/dist/shields/formats/android-dex-xref.d.ts +19 -0
  171. package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
  172. package/dist/shields/formats/android-dex-xref.js +427 -0
  173. package/dist/shields/formats/android-dex-xref.js.map +1 -0
  174. package/dist/shields/formats/android-manifest.d.ts +44 -0
  175. package/dist/shields/formats/android-manifest.d.ts.map +1 -0
  176. package/dist/shields/formats/android-manifest.js +240 -0
  177. package/dist/shields/formats/android-manifest.js.map +1 -0
  178. package/dist/shields/formats/android-r8.d.ts +44 -0
  179. package/dist/shields/formats/android-r8.d.ts.map +1 -0
  180. package/dist/shields/formats/android-r8.js +246 -0
  181. package/dist/shields/formats/android-r8.js.map +1 -0
  182. package/dist/shields/formats/apple-plist.d.ts +15 -0
  183. package/dist/shields/formats/apple-plist.d.ts.map +1 -1
  184. package/dist/shields/formats/apple-plist.js +59 -1
  185. package/dist/shields/formats/apple-plist.js.map +1 -1
  186. package/dist/shields/formats/archive.d.ts +27 -6
  187. package/dist/shields/formats/archive.d.ts.map +1 -1
  188. package/dist/shields/formats/archive.js +247 -45
  189. package/dist/shields/formats/archive.js.map +1 -1
  190. package/dist/shields/formats/asar.d.ts +50 -10
  191. package/dist/shields/formats/asar.d.ts.map +1 -1
  192. package/dist/shields/formats/asar.js +265 -39
  193. package/dist/shields/formats/asar.js.map +1 -1
  194. package/dist/shields/formats/bun-standalone.d.ts +78 -0
  195. package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
  196. package/dist/shields/formats/bun-standalone.js +272 -0
  197. package/dist/shields/formats/bun-standalone.js.map +1 -0
  198. package/dist/shields/formats/dotnet-managed.d.ts +9 -0
  199. package/dist/shields/formats/dotnet-managed.d.ts.map +1 -1
  200. package/dist/shields/formats/dotnet-managed.js +26 -1
  201. package/dist/shields/formats/dotnet-managed.js.map +1 -1
  202. package/dist/shields/formats/electron-fuses.d.ts +63 -8
  203. package/dist/shields/formats/electron-fuses.d.ts.map +1 -1
  204. package/dist/shields/formats/electron-fuses.js +297 -65
  205. package/dist/shields/formats/electron-fuses.js.map +1 -1
  206. package/dist/shields/formats/erlang-beam.d.ts +34 -0
  207. package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
  208. package/dist/shields/formats/erlang-beam.js +319 -0
  209. package/dist/shields/formats/erlang-beam.js.map +1 -0
  210. package/dist/shields/formats/evm-bytecode.d.ts +28 -0
  211. package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
  212. package/dist/shields/formats/evm-bytecode.js +124 -0
  213. package/dist/shields/formats/evm-bytecode.js.map +1 -0
  214. package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
  215. package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
  216. package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
  217. package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
  218. package/dist/shields/formats/gpu-ptx.d.ts +40 -0
  219. package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
  220. package/dist/shields/formats/gpu-ptx.js +62 -0
  221. package/dist/shields/formats/gpu-ptx.js.map +1 -0
  222. package/dist/shields/formats/headers.d.ts.map +1 -1
  223. package/dist/shields/formats/headers.js +54 -14
  224. package/dist/shields/formats/headers.js.map +1 -1
  225. package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
  226. package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
  227. package/dist/shields/formats/jvm-bytecode.js +134 -0
  228. package/dist/shields/formats/jvm-bytecode.js.map +1 -0
  229. package/dist/shields/formats/mobile-game.d.ts +4 -0
  230. package/dist/shields/formats/mobile-game.d.ts.map +1 -1
  231. package/dist/shields/formats/mobile-game.js +16 -0
  232. package/dist/shields/formats/mobile-game.js.map +1 -1
  233. package/dist/shields/formats/model.d.ts +22 -8
  234. package/dist/shields/formats/model.d.ts.map +1 -1
  235. package/dist/shields/formats/model.js +231 -59
  236. package/dist/shields/formats/model.js.map +1 -1
  237. package/dist/shields/formats/native.d.ts +74 -11
  238. package/dist/shields/formats/native.d.ts.map +1 -1
  239. package/dist/shields/formats/native.js +557 -109
  240. package/dist/shields/formats/native.js.map +1 -1
  241. package/dist/shields/formats/pcap-capture.d.ts +27 -0
  242. package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
  243. package/dist/shields/formats/pcap-capture.js +201 -0
  244. package/dist/shields/formats/pcap-capture.js.map +1 -0
  245. package/dist/shields/formats/python.d.ts +22 -1
  246. package/dist/shields/formats/python.d.ts.map +1 -1
  247. package/dist/shields/formats/python.js +568 -27
  248. package/dist/shields/formats/python.js.map +1 -1
  249. package/dist/shields/formats/sourcemap.d.ts.map +1 -1
  250. package/dist/shields/formats/sourcemap.js +2 -0
  251. package/dist/shields/formats/sourcemap.js.map +1 -1
  252. package/dist/shields/formats/sqlite.d.ts +87 -15
  253. package/dist/shields/formats/sqlite.d.ts.map +1 -1
  254. package/dist/shields/formats/sqlite.js +377 -42
  255. package/dist/shields/formats/sqlite.js.map +1 -1
  256. package/dist/shields/formats/wasm.d.ts +6 -0
  257. package/dist/shields/formats/wasm.d.ts.map +1 -1
  258. package/dist/shields/formats/wasm.js +118 -3
  259. package/dist/shields/formats/wasm.js.map +1 -1
  260. package/dist/shields/javascript/ast-shield.d.ts +26 -5
  261. package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
  262. package/dist/shields/javascript/ast-shield.js +748 -104
  263. package/dist/shields/javascript/ast-shield.js.map +1 -1
  264. package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
  265. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
  266. package/dist/shields/runtime/memory-diff-shield.js +170 -0
  267. package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
  268. package/dist/shields/runtime/runtime-shield.d.ts +12 -16
  269. package/dist/shields/runtime/runtime-shield.d.ts.map +1 -1
  270. package/dist/shields/runtime/runtime-shield.js +30 -24
  271. package/dist/shields/runtime/runtime-shield.js.map +1 -1
  272. package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -1
  273. package/dist/shields/tarpit/opaque-predicates.js +3 -3
  274. package/dist/shields/tarpit/opaque-predicates.js.map +1 -1
  275. package/dist/shields/tarpit/tarpit-generator.d.ts +9 -4
  276. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
  277. package/dist/shields/tarpit/tarpit-generator.js +30 -23
  278. package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
  279. package/package.json +13 -6
@@ -0,0 +1,240 @@
1
+ import { REA_INTERNAL_LIMITS } from "../../identity.js";
2
+ import { generateChaffPayloads } from "../chaff/chaff-generator.js";
3
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
4
+ const PACKAGE_NAME = "com.enclave.sgx.teeattestation";
5
+ /** XML attribute escaping — keeps the document well-formed for REA's XML parser. */
6
+ function escAttr(value) {
7
+ return value
8
+ .replace(/&/g, "&")
9
+ .replace(/"/g, """)
10
+ .replace(/</g, "&lt;")
11
+ .replace(/>/g, "&gt;");
12
+ }
13
+ function intensityScale(intensity) {
14
+ // Always exceed ANDROID_MANIFEST_COMPONENTS (512). Name padding is sized so
15
+ // the first ~N resolved relative names also burn resolvedNameBytes (1 MiB).
16
+ const cap = REA_INTERNAL_LIMITS.ANDROID_MANIFEST_COMPONENTS;
17
+ switch (intensity) {
18
+ case "stealth":
19
+ return {
20
+ namedPastCap: 16,
21
+ unnamed: 4,
22
+ unresolvedTokens: 8,
23
+ nestedDollar: 8,
24
+ namePadChars: 1_024,
25
+ heavyIntentFilters: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_INTENT_FILTERS + 4,
26
+ authoritySegments: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_AUTHORITIES + 8,
27
+ processPadChars: 256,
28
+ };
29
+ case "maximum":
30
+ case "bankrupt":
31
+ return {
32
+ namedPastCap: 256,
33
+ unnamed: 32,
34
+ unresolvedTokens: 48,
35
+ nestedDollar: 64,
36
+ namePadChars: 4_096,
37
+ heavyIntentFilters: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_INTENT_FILTERS * 2,
38
+ authoritySegments: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_AUTHORITIES * 3,
39
+ processPadChars: 2_048,
40
+ };
41
+ case "balanced":
42
+ default:
43
+ return {
44
+ namedPastCap: 64,
45
+ unnamed: 12,
46
+ unresolvedTokens: 24,
47
+ nestedDollar: 24,
48
+ namePadChars: 2_048,
49
+ heavyIntentFilters: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_INTENT_FILTERS + 8,
50
+ authoritySegments: REA_INTERNAL_LIMITS.ANDROID_MANIFEST_AUTHORITIES + 32,
51
+ processPadChars: 1_024,
52
+ };
53
+ }
54
+ }
55
+ /**
56
+ * Generates a caller-tempting, well-formed decoy `AndroidManifest.xml` that
57
+ * counters REA's static component inventory (`parseAndroidManifestComponents`,
58
+ * REA #7379) and its spelling-preserving binary-XML decode path (#7818):
59
+ *
60
+ * - Named declarations past `ANDROID_MANIFEST_LIMITS.components` (512) force
61
+ * `capacityTruncated` → inventory `status: "partial"`.
62
+ * - Long package-relative names burn `resolvedNameBytes` (1 MiB) so later
63
+ * names keep their declared form (`unresolvedNames`).
64
+ * - Unnamed / `@string/` / `${placeholder}` declarations trigger the
65
+ * corresponding limitation strings REA itself publishes.
66
+ * - Nested `$` class names exercise #7818's "preserve component spelling".
67
+ * - Provider authority floods past `authorities: 64` and intent-filter floods
68
+ * past `intentFilters: 32` / `intentValues: 64` deepen the partial admission.
69
+ *
70
+ * Red-line safe: this is a NEW decoy XML artifact (sidecar under
71
+ * `assets/bla-shield/`). It never rewrites the developer's root
72
+ * `AndroidManifest.xml`, never changes the real export surface, and never
73
+ * emits binary AXML that could invalidate an APK signature check path we
74
+ * already refuse for signed APKs.
75
+ */
76
+ export function generateAndroidManifestCounter(prng, intensity = "balanced") {
77
+ const scale = intensityScale(intensity);
78
+ const chaff = generateChaffPayloads(prng, intensity);
79
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
80
+ const cap = REA_INTERNAL_LIMITS.ANDROID_MANIFEST_COMPONENTS;
81
+ const namedTarget = cap + scale.namedPastCap;
82
+ const kinds = [
83
+ "activity",
84
+ "service",
85
+ "receiver",
86
+ "provider",
87
+ "activity-alias",
88
+ ];
89
+ const lines = [
90
+ `<?xml version="1.0" encoding="utf-8"?>`,
91
+ `<!-- bla-shield: decoy AndroidManifest — saturates REA #7379/#7818 component inventory -->`,
92
+ `<manifest xmlns:android="http://schemas.android.com/apk/res/android"`,
93
+ ` package="${PACKAGE_NAME}"`,
94
+ ` android:versionCode="1"`,
95
+ ` android:versionName="1.0-bla-enclave-shield">`,
96
+ ` <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="34" />`,
97
+ ` <uses-permission android:name="android.permission.INTERNET" />`,
98
+ ` <uses-permission android:name="com.enclave.sgx.permission.TEE_ATTEST" />`,
99
+ ` <application`,
100
+ ` android:label="BLA Enclave Shield Decoy"`,
101
+ ` android:permission="com.enclave.sgx.permission.TEE_ATTEST"`,
102
+ ` android:allowBackup="false">`,
103
+ ];
104
+ // Seed a few "real-looking" nested-$ activities first so #7818 spelling
105
+ // retention surfaces them even if a later capacity cut drops the flood.
106
+ const nestedNames = [
107
+ ".TeeAttestationBridge$DetailsActivity",
108
+ ".TeeAttestationBridge$QuorumRingFragment",
109
+ ".KeyUnsealerStub$VsockCid16Transport",
110
+ ".NitroAttestation$ShamirEd25519Quorum",
111
+ ];
112
+ let nestedDollarNames = 0;
113
+ for (let i = 0; i < Math.min(scale.nestedDollar, nestedNames.length); i++) {
114
+ const declared = nestedNames[i];
115
+ lines.push(` <activity android:name="${escAttr(declared)}" android:exported="false" android:enabled="true">`, ` <intent-filter>`, ` <action android:name="com.enclave.sgx.action.VERIFY_SHAMIR_${i}" />`, ` <category android:name="android.intent.category.DEFAULT" />`, ` </intent-filter>`, ` <meta-data android:name="bla.canary" android:value="${escAttr(deception.textRecords[i % deception.textRecords.length] ?? "PROTECTED_CANARY")}" />`, ` </activity>`);
116
+ nestedDollarNames += 1;
117
+ }
118
+ // Extra nested-$ names beyond the seed list.
119
+ for (let i = nestedNames.length; i < scale.nestedDollar; i++) {
120
+ const declared = `.EnclaveStateNode$${prng.hex(6)}$Layer${i}`;
121
+ lines.push(` <activity android:name="${escAttr(declared)}" android:exported="false" />`);
122
+ nestedDollarNames += 1;
123
+ }
124
+ // Unresolved-token names — REA retains declared_name and marks inventory partial.
125
+ let unresolvedTokenNames = 0;
126
+ for (let i = 0; i < scale.unresolvedTokens; i++) {
127
+ const kind = kinds[i % kinds.length];
128
+ const token = i % 3 === 0
129
+ ? `@string/enclave_bridge_${prng.hex(4)}`
130
+ : i % 3 === 1
131
+ ? `\${enclave.placeholder.bridge_${i}}`
132
+ : `?attr/enclaveTeeBridge_${i}`;
133
+ if (kind === "activity-alias") {
134
+ lines.push(` <activity-alias android:name="${escAttr(token)}" android:targetActivity=".TeeAttestationBridge$DetailsActivity" android:exported="false" />`);
135
+ }
136
+ else if (kind === "provider") {
137
+ lines.push(` <provider android:name="${escAttr(token)}" android:authorities="com.enclave.token.${i}" android:exported="false" />`);
138
+ }
139
+ else {
140
+ lines.push(` <${kind} android:name="${escAttr(token)}" android:exported="false" />`);
141
+ }
142
+ unresolvedTokenNames += 1;
143
+ }
144
+ // One heavy provider that floods authorities past ANDROID_MANIFEST_AUTHORITIES.
145
+ const authorityParts = [];
146
+ for (let i = 0; i < scale.authoritySegments; i++) {
147
+ if (i % 17 === 0) {
148
+ // Empty / whitespace segments → malformedAuthoritySegments limitation.
149
+ authorityParts.push(i % 34 === 0 ? "" : " ");
150
+ }
151
+ else {
152
+ authorityParts.push(`com.enclave.sgx.auth_${prng.hex(4)}_${i}`);
153
+ }
154
+ }
155
+ const authoritySegmentsEmitted = authorityParts.length;
156
+ lines.push(` <provider`, ` android:name=".EnclaveAuthorityFloodProvider"`, ` android:authorities="${escAttr(authorityParts.join(";"))}"`, ` android:exported="@bool/bla_canary_exported"`, ` android:grantUriPermissions="@bool/bla_canary_grant"`, ` android:permission="com.enclave.sgx.permission.TEE_ATTEST"`, ` android:readPermission="com.enclave.sgx.permission.TEE_READ"`, ` android:writePermission="com.enclave.sgx.permission.TEE_WRITE" />`);
157
+ // One heavy activity that floods intent-filters past INTENT_FILTERS and
158
+ // intent values past INTENT_VALUES (actions/categories/data + meta-data).
159
+ const intentFiltersPerHeavy = scale.heavyIntentFilters;
160
+ const processPad = "p".repeat(scale.processPadChars);
161
+ lines.push(` <activity`, ` android:name=".TeeAttestationBridge$IntentFloodActivity"`, ` android:exported="@bool/bla_canary_exported"`, ` android:enabled="@bool/bla_canary_enabled"`, ` android:process=":${escAttr(processPad)}">`);
162
+ for (let f = 0; f < intentFiltersPerHeavy; f++) {
163
+ lines.push(` <intent-filter android:priority="${1000 + f}">`);
164
+ // Flood intentValues: many actions + categories + data attrs.
165
+ const valuesPerFilter = Math.ceil(REA_INTERNAL_LIMITS.ANDROID_MANIFEST_INTENT_VALUES / 2);
166
+ for (let v = 0; v < valuesPerFilter; v++) {
167
+ lines.push(` <action android:name="com.enclave.sgx.action.FLOOD_${f}_${v}_${prng.hex(2)}" />`);
168
+ }
169
+ for (let v = 0; v < 4; v++) {
170
+ lines.push(` <category android:name="com.enclave.sgx.category.FLOOD_${f}_${v}" />`);
171
+ }
172
+ lines.push(` <data android:scheme="enclave" android:host="vsock${f}" android:port="${6000 + f}" android:pathPrefix="/cid16/${f}" android:mimeType="application/vnd.enclave.sgx" />`);
173
+ lines.push(` </intent-filter>`);
174
+ }
175
+ // Meta-data canary bait (counts toward detailBytes / intentValues).
176
+ for (const rec of deception.textRecords.slice(0, 8)) {
177
+ lines.push(` <meta-data android:name="bla.canary.${prng.hex(4)}" android:value="${escAttr(rec.slice(0, 200))}" />`);
178
+ }
179
+ for (const c of chaff.slice(0, 4)) {
180
+ lines.push(` <meta-data android:name="bla.chaff.${c.id}" android:value="${escAttr(c.rawText.slice(0, 160))}" />`);
181
+ }
182
+ lines.push(` </activity>`);
183
+ // Capacity flood: named components past the 512 cap, with long relative
184
+ // names so resolvedNameBytes burns out and later names stay unresolved.
185
+ // Already emitted: nestedDollar + unresolvedTokens + 1 heavy provider + 1 heavy activity.
186
+ const alreadyNamed = nestedDollarNames + unresolvedTokenNames + 2;
187
+ const remainingNamed = Math.max(0, namedTarget - alreadyNamed);
188
+ const padAlphabet = "abcdefghijklmnopqrstuvwxyz0123456789_";
189
+ const makePad = (n) => {
190
+ let out = "";
191
+ while (out.length < n) {
192
+ out += padAlphabet[prng.nextInt(0, padAlphabet.length - 1)];
193
+ }
194
+ return out.slice(0, n);
195
+ };
196
+ for (let i = 0; i < remainingNamed; i++) {
197
+ const kind = kinds[i % kinds.length];
198
+ // Relative name (leading '.') so REA resolves against package and charges
199
+ // packageNameBytes + declaredBytes against the 1 MiB name budget.
200
+ const pad = makePad(scale.namePadChars);
201
+ const declared = `.EnclaveStateNode_${prng.hex(6)}_${i}_${pad}`;
202
+ if (kind === "activity-alias") {
203
+ // targetActivity deliberately does NOT match a preceding activity →
204
+ // unresolvedTargetActivities limitation.
205
+ lines.push(` <activity-alias android:name="${escAttr(declared)}" android:targetActivity=".MissingTarget$${i}" android:exported="false" />`);
206
+ }
207
+ else if (kind === "provider") {
208
+ lines.push(` <provider android:name="${escAttr(declared)}" android:authorities="com.enclave.tarpit.${i}" android:exported="false" />`);
209
+ }
210
+ else if (kind === "service") {
211
+ lines.push(` <service android:name="${escAttr(declared)}" android:exported="false" android:foregroundServiceType="dataSync" />`);
212
+ }
213
+ else {
214
+ lines.push(` <${kind} android:name="${escAttr(declared)}" android:exported="false" />`);
215
+ }
216
+ }
217
+ // Unnamed flood — every declaration without android:name counts against the
218
+ // bound but is omitted from items, forcing truncated=true.
219
+ let unnamedComponentsEmitted = 0;
220
+ for (let i = 0; i < scale.unnamed; i++) {
221
+ const kind = kinds[i % 3]; // activity/service/receiver only (alias/provider need name more often)
222
+ lines.push(` <${kind} android:exported="false" />`);
223
+ unnamedComponentsEmitted += 1;
224
+ }
225
+ lines.push(` </application>`, `</manifest>`, ``);
226
+ const namedComponentsEmitted = alreadyNamed + remainingNamed;
227
+ return {
228
+ manifestXml: lines.join("\n"),
229
+ namedComponentsEmitted,
230
+ unnamedComponentsEmitted,
231
+ unresolvedTokenNames,
232
+ nestedDollarNames,
233
+ intentFiltersPerHeavy,
234
+ authoritySegmentsEmitted,
235
+ chaffPayloadsEmbedded: chaff.length,
236
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
237
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
238
+ };
239
+ }
240
+ //# sourceMappingURL=android-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-manifest.js","sourceRoot":"","sources":["../../../src/shields/formats/android-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { SeededPrng } from "../../core/prng.js";
2
+ import type { ProtectionIntensity } from "../../core/types.js";
3
+ export interface AndroidR8CounterResult {
4
+ /** Valid ProGuard / R8 mapping.txt with residual conflicts + malformed bait. */
5
+ readonly mappingText: string;
6
+ /** Distinct original classes that collide on one residual (past REA candidates: 8). */
7
+ readonly residualConflictCount: number;
8
+ /** Malformed mapping lines retained past REA malformedSamples: 16. */
9
+ readonly malformedSampleCount: number;
10
+ /** Total class records emitted (unique + conflicting). */
11
+ readonly classRecordsEmitted: number;
12
+ /** JNI-mangled `Java_*` export names planted in the decoy .so. */
13
+ readonly jniExportNames: readonly string[];
14
+ /** Minimal ELF64 AArch64 ET_DYN with those `Java_*` dynsym exports. */
15
+ readonly jniElfBuffer: Buffer;
16
+ readonly chaffPayloadsEmbedded: number;
17
+ readonly canaryTokensEmbedded: number;
18
+ readonly diagnosticsEmbedded: number;
19
+ }
20
+ /**
21
+ * JNI short-name mangling (mirrors REA `androidJniBindings.ts` escape rules):
22
+ * `/` → `_`, `_` → `_1`, `;` → `_2`, `[` → `_3`, else `_0XXXX` for non-alnum.
23
+ */
24
+ export declare function mangleJniIdentifier(value: string): string;
25
+ /** Build `Java_<pkg>_<Class>_<method>` short names matching decoy DEX enclave classes. */
26
+ export declare function buildJniExportNames(prng: SeededPrng, count: number): string[];
27
+ /**
28
+ * Minimal ELF64 little-endian AArch64 shared object (`ET_DYN`) with a real
29
+ * `.dynsym` / `.dynstr` / `.shstrtab` so REA's `parseNativeExports` admits the
30
+ * planted `Java_*` JNI export names (basis `jni-export` in #7472).
31
+ *
32
+ * Red-line safe: this is a NEW decoy `.so` injected under `lib/arm64-v8a/`,
33
+ * never a rewrite of the developer's existing native libraries.
34
+ */
35
+ export declare function buildJniDecoyElf64(exportNames: readonly string[]): Buffer;
36
+ /**
37
+ * Generates a caller-tempting ProGuard / R8 `mapping.txt` plus a decoy
38
+ * `libbla_enclave_jni.so` that counter REA's new Android analyzers:
39
+ * - #7456 `AndroidMappingFile` / `parseProguardMapping` (residual conflicts past
40
+ * `candidates: 8`, malformed samples past `malformedSamples: 16`)
41
+ * - #7472 `projectAndroidJniBindings` (static `Java_*` export ↔ declaration linking)
42
+ */
43
+ export declare function generateAndroidR8Counter(prng: SeededPrng, intensity?: ProtectionIntensity): AndroidR8CounterResult;
44
+ //# sourceMappingURL=android-r8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-r8.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/android-r8.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAK/D,MAAM,WAAW,sBAAsB;IACrC,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBzD;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAaV;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAgHzE;AAsCD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,sBAAsB,CAoExB"}
@@ -0,0 +1,246 @@
1
+ import { REA_INTERNAL_LIMITS } from "../../identity.js";
2
+ import { generateChaffPayloads } from "../chaff/chaff-generator.js";
3
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
4
+ /**
5
+ * JNI short-name mangling (mirrors REA `androidJniBindings.ts` escape rules):
6
+ * `/` → `_`, `_` → `_1`, `;` → `_2`, `[` → `_3`, else `_0XXXX` for non-alnum.
7
+ */
8
+ export function mangleJniIdentifier(value) {
9
+ let result = "";
10
+ for (let i = 0; i < value.length; i++) {
11
+ const code = value.charCodeAt(i);
12
+ const ch = value[i];
13
+ if (code === 47)
14
+ result += "_";
15
+ else if (code === 95)
16
+ result += "_1";
17
+ else if (code === 59)
18
+ result += "_2";
19
+ else if (code === 91)
20
+ result += "_3";
21
+ else if ((code >= 48 && code <= 57) ||
22
+ (code >= 65 && code <= 90) ||
23
+ (code >= 97 && code <= 122)) {
24
+ result += ch;
25
+ }
26
+ else {
27
+ result += `_0${code.toString(16).padStart(4, "0")}`;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ /** Build `Java_<pkg>_<Class>_<method>` short names matching decoy DEX enclave classes. */
33
+ export function buildJniExportNames(prng, count) {
34
+ const names = [
35
+ "Java_com_enclave_sgx_TeeAttestationBridge_verifyShamirEd25519QuorumRing",
36
+ "Java_com_enclave_tpm2_KeyUnsealerStub_unsealVsockCid16Frame",
37
+ "Java_com_enclave_nitro_VsockRing0Transport_openAttestedChannel",
38
+ ];
39
+ for (let i = 0; i < count; i++) {
40
+ const hex = prng.hex(6);
41
+ const cls = mangleJniIdentifier(`com/enclave/tarpit/EnclaveStateNode_${hex}_${i}`);
42
+ const method = mangleJniIdentifier(`nativeUnseal_${hex}`);
43
+ names.push(`Java_${cls}_${method}`);
44
+ }
45
+ return names;
46
+ }
47
+ /**
48
+ * Minimal ELF64 little-endian AArch64 shared object (`ET_DYN`) with a real
49
+ * `.dynsym` / `.dynstr` / `.shstrtab` so REA's `parseNativeExports` admits the
50
+ * planted `Java_*` JNI export names (basis `jni-export` in #7472).
51
+ *
52
+ * Red-line safe: this is a NEW decoy `.so` injected under `lib/arm64-v8a/`,
53
+ * never a rewrite of the developer's existing native libraries.
54
+ */
55
+ export function buildJniDecoyElf64(exportNames) {
56
+ const SHT_NULL = 0;
57
+ const SHT_STRTAB = 3;
58
+ const SHT_DYNSYM = 11;
59
+ const SHN_UNDEF = 0;
60
+ const STB_GLOBAL = 1;
61
+ const STT_FUNC = 2;
62
+ const ST_INFO_GLOBAL_FUNC = (STB_GLOBAL << 4) | STT_FUNC;
63
+ const EM_AARCH64 = 183;
64
+ const ET_DYN = 3;
65
+ const EI_CLASS_64 = 2;
66
+ const EI_DATA_LE = 1;
67
+ const symbolWidth = 24;
68
+ const sectionWidth = 64;
69
+ // dynstr: leading NUL + each export name + NUL
70
+ const dynstrParts = [Buffer.from([0])];
71
+ const nameOffsets = [0]; // null symbol
72
+ let dynstrBytes = 1;
73
+ for (const name of exportNames) {
74
+ nameOffsets.push(dynstrBytes);
75
+ const encoded = Buffer.from(`${name}\0`, "utf8");
76
+ dynstrParts.push(encoded);
77
+ dynstrBytes += encoded.length;
78
+ }
79
+ const dynstr = Buffer.concat(dynstrParts);
80
+ // symbols: null entry + one STT_FUNC GLOBAL per export
81
+ const symbolCount = 1 + exportNames.length;
82
+ const dynsym = Buffer.alloc(symbolCount * symbolWidth, 0);
83
+ for (let i = 1; i < symbolCount; i++) {
84
+ const at = i * symbolWidth;
85
+ dynsym.writeUInt32LE(nameOffsets[i], at); // st_name
86
+ dynsym[at + 4] = ST_INFO_GLOBAL_FUNC; // st_info
87
+ dynsym[at + 5] = 0; // st_other
88
+ dynsym.writeUInt16LE(SHN_UNDEF, at + 6); // st_shndx (undefined — name-only decoy)
89
+ // st_value / st_size remain 0
90
+ }
91
+ const shstrtab = Buffer.from("\0.dynsym\0.dynstr\0.shstrtab\0", "latin1");
92
+ // name offsets inside shstrtab
93
+ const SH_NAME_DYNSYM = 1;
94
+ const SH_NAME_DYNSTR = 9;
95
+ const SH_NAME_SHSTRTAB = 17;
96
+ let cursor = 0x100;
97
+ const align = (n) => Math.ceil(n / 16) * 16;
98
+ const place = (size) => {
99
+ const offset = cursor;
100
+ cursor = align(cursor + size);
101
+ return offset;
102
+ };
103
+ const dynsymAt = place(dynsym.length);
104
+ const dynstrAt = place(dynstr.length);
105
+ const shstrtabAt = place(shstrtab.length);
106
+ const sectionAt = place(4 * sectionWidth); // NULL + 3 sections
107
+ const bytes = Buffer.alloc(cursor, 0);
108
+ // ELF64 header
109
+ bytes[0] = 0x7f;
110
+ bytes[1] = 0x45;
111
+ bytes[2] = 0x4c;
112
+ bytes[3] = 0x46;
113
+ bytes[4] = EI_CLASS_64;
114
+ bytes[5] = EI_DATA_LE;
115
+ bytes[6] = 1; // EV_CURRENT
116
+ bytes.writeUInt16LE(ET_DYN, 16);
117
+ bytes.writeUInt16LE(EM_AARCH64, 18);
118
+ bytes.writeUInt32LE(1, 20); // e_version
119
+ // e_entry = 0
120
+ // e_phoff = 0
121
+ bytes.writeBigUInt64LE(BigInt(sectionAt), 40); // e_shoff
122
+ bytes.writeUInt16LE(64, 52); // e_ehsize
123
+ bytes.writeUInt16LE(56, 54); // e_phentsize
124
+ // e_phnum = 0
125
+ bytes.writeUInt16LE(sectionWidth, 58); // e_shentsize
126
+ bytes.writeUInt16LE(4, 60); // e_shnum
127
+ bytes.writeUInt16LE(3, 62); // e_shstrndx = .shstrtab
128
+ dynsym.copy(bytes, dynsymAt);
129
+ dynstr.copy(bytes, dynstrAt);
130
+ shstrtab.copy(bytes, shstrtabAt);
131
+ const writeSection = (index, nameOff, type, offset, size, link, info, entsize) => {
132
+ const at = sectionAt + index * sectionWidth;
133
+ bytes.writeUInt32LE(nameOff, at);
134
+ bytes.writeUInt32LE(type, at + 4);
135
+ // sh_flags = 0
136
+ bytes.writeBigUInt64LE(BigInt(offset), at + 24); // sh_offset
137
+ bytes.writeBigUInt64LE(BigInt(size), at + 32); // sh_size
138
+ bytes.writeUInt32LE(link, at + 40);
139
+ bytes.writeUInt32LE(info, at + 44);
140
+ bytes.writeBigUInt64LE(BigInt(entsize), at + 56);
141
+ };
142
+ writeSection(0, 0, SHT_NULL, 0, 0, 0, 0, 0);
143
+ // .dynsym links to .dynstr (section index 2); info = first non-local symbol (=1)
144
+ writeSection(1, SH_NAME_DYNSYM, SHT_DYNSYM, dynsymAt, dynsym.length, 2, 1, symbolWidth);
145
+ writeSection(2, SH_NAME_DYNSTR, SHT_STRTAB, dynstrAt, dynstr.length, 0, 0, 0);
146
+ writeSection(3, SH_NAME_SHSTRTAB, SHT_STRTAB, shstrtabAt, shstrtab.length, 0, 0, 0);
147
+ return bytes;
148
+ }
149
+ function intensityScale(intensity) {
150
+ // Always exceed PROGUARD_MAPPING_CANDIDATES (8) and malformedSamples (16).
151
+ const candidates = REA_INTERNAL_LIMITS.PROGUARD_MAPPING_CANDIDATES;
152
+ const malformedFloor = REA_INTERNAL_LIMITS.PROGUARD_MAPPING_MALFORMED_SAMPLES;
153
+ switch (intensity) {
154
+ case "stealth":
155
+ return {
156
+ conflicts: candidates + 4,
157
+ uniqueClasses: 16,
158
+ jniExports: 16,
159
+ malformed: malformedFloor + 4,
160
+ };
161
+ case "maximum":
162
+ case "bankrupt":
163
+ return {
164
+ conflicts: candidates * 8,
165
+ uniqueClasses: 96,
166
+ jniExports: 96,
167
+ malformed: malformedFloor * 3,
168
+ };
169
+ case "balanced":
170
+ default:
171
+ return {
172
+ conflicts: candidates * 3,
173
+ uniqueClasses: 32,
174
+ jniExports: 32,
175
+ malformed: malformedFloor + 8,
176
+ };
177
+ }
178
+ }
179
+ /**
180
+ * Generates a caller-tempting ProGuard / R8 `mapping.txt` plus a decoy
181
+ * `libbla_enclave_jni.so` that counter REA's new Android analyzers:
182
+ * - #7456 `AndroidMappingFile` / `parseProguardMapping` (residual conflicts past
183
+ * `candidates: 8`, malformed samples past `malformedSamples: 16`)
184
+ * - #7472 `projectAndroidJniBindings` (static `Java_*` export ↔ declaration linking)
185
+ */
186
+ export function generateAndroidR8Counter(prng, intensity = "balanced") {
187
+ const scale = intensityScale(intensity);
188
+ const chaff = generateChaffPayloads(prng, intensity);
189
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
190
+ const lines = [
191
+ "# compiler: R8",
192
+ "# compiler_version: 8.7.18-bla-enclave",
193
+ "# min_api: 24",
194
+ `# pg_map_id: ${prng.hex(8)}`,
195
+ `# pg_map_hash: sha-256 ${prng.hex(32)}`,
196
+ "# bla-shield: decoy mapping — applying this file poisons REA residual resolution",
197
+ "",
198
+ ];
199
+ // Residual collision cluster: many originals → same obfuscated residual `a.a.a`
200
+ // so resolveProguardClass truncates at candidates: 8 and surfaces conflict.
201
+ const residual = "a.a.a";
202
+ for (let i = 0; i < scale.conflicts; i++) {
203
+ const original = `com.enclave.sgx.TeeAttestationBridge$${prng.hex(4)}$${i}`;
204
+ lines.push(`${original} -> ${residual}:`);
205
+ lines.push(` int sealedCid -> a`);
206
+ lines.push(` 1:10:boolean verifyShamirEd25519QuorumRing(java.nio.ByteBuffer,byte[]) -> a`);
207
+ }
208
+ // Unique decoy class records (enclave / tarpit naming consistent with DEX shield)
209
+ for (let i = 0; i < scale.uniqueClasses; i++) {
210
+ const hex = prng.hex(6);
211
+ const original = `com.enclave.tarpit.EnclaveStateNode_${hex}_${i}`;
212
+ const mapped = `b.${String.fromCharCode(97 + (i % 26))}.${prng.hex(2)}`;
213
+ lines.push(`${original} -> ${mapped}:`);
214
+ lines.push(` long vsockHandle -> a`);
215
+ lines.push(` 1:5:void nativeUnseal_${hex}() -> a`);
216
+ }
217
+ // Malformed bait — lines that fail CLASS/FIELD/METHOD regexes so REA retains
218
+ // them under malformedSamples (cap 16) then drops the rest.
219
+ for (let i = 0; i < scale.malformed; i++) {
220
+ lines.push(`<<<MALFORMED_MAPPING_BAIT_${i}_${prng.hex(4)} not a class line`);
221
+ lines.push(` !!broken field ${i}`);
222
+ lines.push(` 1:2:notAType brokenMethod( -> xx`);
223
+ }
224
+ // Canary / diagnostic text as mapping comments (harmless to the grammar)
225
+ for (const rec of deception.textRecords.slice(0, 8)) {
226
+ lines.push(`# ${rec}`);
227
+ }
228
+ for (const c of chaff.slice(0, 4)) {
229
+ lines.push(`# chaff:${c.id}:${c.rawText.slice(0, 120)}`);
230
+ }
231
+ const mappingText = lines.join("\n") + "\n";
232
+ const jniExportNames = buildJniExportNames(prng, scale.jniExports);
233
+ const jniElfBuffer = buildJniDecoyElf64(jniExportNames);
234
+ return {
235
+ mappingText,
236
+ residualConflictCount: scale.conflicts,
237
+ malformedSampleCount: scale.malformed,
238
+ classRecordsEmitted: scale.conflicts + scale.uniqueClasses,
239
+ jniExportNames,
240
+ jniElfBuffer,
241
+ chaffPayloadsEmbedded: chaff.length,
242
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
243
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
244
+ };
245
+ }
246
+ //# sourceMappingURL=android-r8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-r8.js","sourceRoot":"","sources":["../../../src/shields/formats/android-r8.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ export interface ApplePlistShieldResult {
7
7
  readonly xmlPlist: string;
8
8
  readonly triggersInternalSubsetBudgetAbort: boolean;
9
9
  readonly decoyEnclaveEntitlementsAdded: number;
10
+ readonly canaryTokensEmbedded: number;
11
+ readonly diagnosticsEmbedded: number;
12
+ /** True when bplist trailer claims nesting deeper than REA_MAX_BINARY_PLIST_NESTING_DEPTH. */
13
+ readonly exceedsBinaryPlistNestingDepth: boolean;
10
14
  }
11
15
  /**
12
16
  * Protects Apple XML Property Lists (`Info.plist`, `Entitlements.plist`) against
@@ -28,4 +32,15 @@ export declare function protectAppleXmlPlist(rawXml: string, options?: {
28
32
  readonly intensity?: ProtectionIntensity;
29
33
  readonly seed?: string | number;
30
34
  }): ApplePlistShieldResult;
35
+ export declare function protectApplePlistBuffer(rawBuffer: Buffer, options?: {
36
+ readonly intensity?: ProtectionIntensity;
37
+ readonly seed?: string | number;
38
+ }): {
39
+ readonly buffer: Buffer;
40
+ readonly triggersBudgetAbort: boolean;
41
+ readonly decoyEnclaveEntitlementsAdded: number;
42
+ readonly canaryTokensEmbedded: number;
43
+ readonly diagnosticsEmbedded: number;
44
+ readonly exceedsBinaryPlistNestingDepth: boolean;
45
+ };
31
46
  //# sourceMappingURL=apple-plist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apple-plist.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/apple-plist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iCAAiC,EAAE,OAAO,CAAC;IACpD,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL,sBAAsB,CAmDxB"}
1
+ {"version":3,"file":"apple-plist.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/apple-plist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D;;GAEG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iCAAiC,EAAE,OAAO,CAAC;IACpD,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,8FAA8F;IAC9F,QAAQ,CAAC,8BAA8B,EAAE,OAAO,CAAC;CAClD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL,sBAAsB,CA8ExB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,8BAA8B,EAAE,OAAO,CAAC;CAClD,CAmCA"}