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
@@ -1,4 +1,5 @@
1
1
  import { SeededPrng } from "../../core/prng.js";
2
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
2
3
  /**
3
4
  * Exact constant from `morluto/rea/src/artifacts/apple/PropertyListDecodeBudget.ts:135`.
4
5
  */
@@ -45,17 +46,74 @@ export function protectAppleXmlPlist(rawXml, options = {}) {
45
46
  normalized = `${doctypeWithEmptyInternalSubset}\n${normalized}`;
46
47
  }
47
48
  }
49
+ const intensity = options.intensity ?? "balanced";
50
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
51
+ const canaryEntries = [];
52
+ deception.canary.syntheticCanaryTokens.forEach((tok, i) => {
53
+ canaryEntries.push(` <key>BLACanaryCredential_${i}</key>`);
54
+ canaryEntries.push(` <string>${tok.replace(/&/g, "&amp;").replace(/</g, "&lt;")}</string>`);
55
+ });
56
+ deception.canary.ambiguousCredentialUrls.slice(0, 4).forEach((url, i) => {
57
+ canaryEntries.push(` <key>BLATransportEndpoint_${i}</key>`);
58
+ canaryEntries.push(` <string>${url.replace(/&/g, "&amp;").replace(/</g, "&lt;")}</string>`);
59
+ });
60
+ deception.diagnostics.diagnosticsInjected.slice(0, 4).forEach((d, i) => {
61
+ canaryEntries.push(` <key>BLASystemDiagnostic_${i}</key>`);
62
+ const msg = `[${d.errorClass}] (${d.systemCode}) ${d.diagnosticMessage}`.replace(/&/g, "&amp;").replace(/</g, "&lt;");
63
+ canaryEntries.push(` <string>${msg}</string>`);
64
+ });
65
+ // Deep nesting bait: claim depth REA_MAX_BINARY_PLIST_NESTING_DEPTH + 4 under a decoy key.
66
+ const depth = REA_MAX_BINARY_PLIST_NESTING_DEPTH + 4;
67
+ canaryEntries.push(` <key>BLABinaryPlistNestingDepthClaim</key>`);
68
+ canaryEntries.push(` <integer>${depth}</integer>`);
48
69
  const enclaveDictEntries = [
49
70
  ` <key>BLAEnclaveAttestationAuthority</key>`,
50
71
  ` <string>com.apple.security.secure-enclave.ring0.${tag}</string>`,
51
72
  ` <key>BLAEnclaveVsockDelegationCID</key>`,
52
73
  ` <integer>16</integer>`,
74
+ ...canaryEntries,
53
75
  ].join("\n");
54
76
  normalized = normalized.replace(/<\/dict>/, `${enclaveDictEntries}\n</dict>`);
55
77
  return {
56
78
  xmlPlist: normalized,
57
79
  triggersInternalSubsetBudgetAbort: normalized.includes("[]>"),
58
- decoyEnclaveEntitlementsAdded: 2,
80
+ decoyEnclaveEntitlementsAdded: 2 + canaryEntries.length / 2,
81
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
82
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
83
+ exceedsBinaryPlistNestingDepth: true,
84
+ };
85
+ }
86
+ export function protectApplePlistBuffer(rawBuffer, options = {}) {
87
+ // If binary plist (`bplist00`), append a depth-claim trailer past REA_MAX_BINARY_PLIST_NESTING_DEPTH (128)
88
+ // plus canary/diagnostic UTF-8 records. Trailer is ignored by Apple's parser (stops at trailer offset).
89
+ if (rawBuffer.length >= 8 && rawBuffer.subarray(0, 6).toString("latin1") === "bplist") {
90
+ const intensity = options.intensity ?? "balanced";
91
+ const prng = new SeededPrng(options.seed ?? "bla-apple-plist-v1");
92
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
93
+ const depth = REA_MAX_BINARY_PLIST_NESTING_DEPTH + 4;
94
+ const trailer = Buffer.from([
95
+ "",
96
+ `BLA_BPLIST_DEPTH_GUARD_${depth}:${prng.hex(6)}:com.apple.security.secure-enclave.ring0`,
97
+ ...deception.textRecords,
98
+ "",
99
+ ].join("\0"), "utf8");
100
+ return {
101
+ buffer: Buffer.concat([rawBuffer, trailer]),
102
+ triggersBudgetAbort: true,
103
+ decoyEnclaveEntitlementsAdded: 4 + deception.textRecords.length,
104
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
105
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
106
+ exceedsBinaryPlistNestingDepth: true,
107
+ };
108
+ }
109
+ const xmlRes = protectAppleXmlPlist(rawBuffer.toString("utf8"), options);
110
+ return {
111
+ buffer: Buffer.from(xmlRes.xmlPlist, "utf8"),
112
+ triggersBudgetAbort: xmlRes.triggersInternalSubsetBudgetAbort,
113
+ decoyEnclaveEntitlementsAdded: xmlRes.decoyEnclaveEntitlementsAdded,
114
+ canaryTokensEmbedded: xmlRes.canaryTokensEmbedded,
115
+ diagnosticsEmbedded: xmlRes.diagnosticsEmbedded,
116
+ exceedsBinaryPlistNestingDepth: xmlRes.exceedsBinaryPlistNestingDepth,
59
117
  };
60
118
  }
61
119
  //# sourceMappingURL=apple-plist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apple-plist.js","sourceRoot":"","sources":["../../../src/shields/formats/apple-plist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AAQtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAGI,EAAE;IAEN,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAExB,MAAM,8BAA8B,GAClC,2GAA2G,CAAC;IAE9G,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,UAAU,GAAG;YACX,wCAAwC;YACxC,8BAA8B;YAC9B,uBAAuB;YACvB,QAAQ;YACR,iCAAiC;YACjC,oCAAoC;YACpC,SAAS;YACT,UAAU;SACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,0BAA0B,EAC1B,8BAA8B,CAC/B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,mBAAmB,EACnB,OAAO,8BAA8B,EAAE,CACxC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5C,UAAU,GAAG,GAAG,8BAA8B,KAAK,UAAU,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG;QACzB,6CAA6C;QAC7C,qDAAqD,GAAG,WAAW;QACnE,2CAA2C;QAC3C,yBAAyB;KAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,UAAU,EACV,GAAG,kBAAkB,WAAW,CACjC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,iCAAiC,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7D,6BAA6B,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"apple-plist.js","sourceRoot":"","sources":["../../../src/shields/formats/apple-plist.ts"],"names":[],"mappings":"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"}
@@ -6,21 +6,30 @@ export interface ZipEntryInfo {
6
6
  readonly compressionMethod: number;
7
7
  readonly data: Buffer;
8
8
  }
9
- /**
10
- * Reads entries from a standard ZIP or Android APK archive (`PK\x03\x04`).
11
- */
9
+ export declare class UnsupportedArchiveError extends Error {
10
+ constructor(reason: string);
11
+ }
12
+ export declare class UnsupportedApkProtectionError extends Error {
13
+ constructor();
14
+ }
15
+ /** Reads only the explicitly supported, metadata-free classic ZIP subset. */
12
16
  export declare function readZipEntries(bytes: Buffer): readonly ZipEntryInfo[];
13
17
  /**
14
- * Writes a valid ZIP / Android APK archive from a list of named file buffers.
18
+ * Writes a minimal ZIP archive from a list of named file buffers.
15
19
  */
16
20
  export declare function writeZipArchive(files: readonly {
17
21
  readonly name: string;
18
22
  readonly data: Buffer;
19
23
  readonly storeOnly?: boolean;
20
24
  }[]): Buffer;
25
+ /** Admission shared with the file engine, before any output paths are created. */
26
+ export declare function validateZipProtectionInput(bytes: Buffer, options?: {
27
+ readonly allowUnsignedApk?: boolean;
28
+ }): readonly ZipEntryInfo[];
21
29
  /**
22
- * Protects a ZIP or Android APK archive against `rea inspect-artifact` and `rea inspect-android-package`
23
- * by injecting decoy enclave manifests, decoy DEX/native stub descriptors, and protecting embedded JS/WASM assets.
30
+ * Rewrites the admitted ZIP subset. Unsigned APKs get member-level DEX/IL2CPP
31
+ * protection (classes.dex, *.dex, global-metadata.dat) plus canary decoys under
32
+ * `assets/bla-shield/`. Signed APKs still throw UnsupportedApkProtectionError.
24
33
  */
25
34
  export declare function protectZipOrApkBuffer(bytes: Buffer, options?: {
26
35
  readonly intensity?: ProtectionIntensity;
@@ -30,5 +39,17 @@ export declare function protectZipOrApkBuffer(bytes: Buffer, options?: {
30
39
  readonly buffer: Buffer;
31
40
  readonly decoyEntriesInjected: number;
32
41
  readonly chaffPayloadsEmbedded: number;
42
+ readonly canaryTokensEmbedded: number;
43
+ readonly diagnosticsEmbedded: number;
44
+ readonly membersHardened: number;
45
+ /** Non-zero when unsigned APK path planted R8 mapping + JNI decoy .so (REA #7456/#7472). */
46
+ readonly androidR8MappingBytes: number;
47
+ readonly androidJniExportsPlanted: number;
48
+ /** Non-zero when unsigned APK path planted decoy AndroidManifest.xml (REA #7379/#7818). */
49
+ readonly androidManifestDecoyBytes: number;
50
+ readonly androidManifestNamedComponents: number;
51
+ /** Non-zero when unsigned APK path planted decoy classesN.dex for REA #8154. */
52
+ readonly androidDexXrefBytes: number;
53
+ readonly androidDexXrefCallers: number;
33
54
  };
34
55
  //# sourceMappingURL=archive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAsBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CA0CrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,GAC/F,MAAM,CAiER;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACrB,GACL;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CA6CA"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAW/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAsBD,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,MAAM,EAAE,MAAM;CAI3B;AAED,qBAAa,6BAA8B,SAAQ,KAAK;;CAKvD;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAwErE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,GAC/F,MAAM,CAiER;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,SAAS,YAAY,EAAE,CAoCzB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACrB,GACL;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,2FAA2F;IAC3F,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,8BAA8B,EAAE,MAAM,CAAC;IAChD,gFAAgF;IAChF,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CAwJA"}
@@ -1,6 +1,11 @@
1
1
  import { deflateRawSync, inflateRawSync } from "node:zlib";
2
2
  import { SeededPrng } from "../../core/prng.js";
3
3
  import { generateChaffPayloads } from "../chaff/chaff-generator.js";
4
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
5
+ import { protectAndroidDexBuffer, protectIl2cppMetadataBuffer } from "./mobile-game.js";
6
+ import { generateAndroidR8Counter } from "./android-r8.js";
7
+ import { generateAndroidManifestCounter } from "./android-manifest.js";
8
+ import { generateAndroidDexXrefCounter, nextMultidexName, } from "./android-dex-xref.js";
4
9
  const CRC32_TABLE = (() => {
5
10
  const table = new Uint32Array(256);
6
11
  for (let i = 0; i < 256; i++) {
@@ -19,50 +24,115 @@ function crc32(buf) {
19
24
  }
20
25
  return (crc ^ 0xffffffff) >>> 0;
21
26
  }
22
- /**
23
- * Reads entries from a standard ZIP or Android APK archive (`PK\x03\x04`).
24
- */
27
+ export class UnsupportedArchiveError extends Error {
28
+ constructor(reason) {
29
+ super(`ZIP input cannot be rewritten safely: ${reason}`);
30
+ this.name = "UnsupportedArchiveError";
31
+ }
32
+ }
33
+ export class UnsupportedApkProtectionError extends Error {
34
+ constructor() {
35
+ super("APK protection is unsupported: a signing-aware, integrity-preserving pipeline is required. Input and existing output are unchanged.");
36
+ this.name = "UnsupportedApkProtectionError";
37
+ }
38
+ }
39
+ /** Reads only the explicitly supported, metadata-free classic ZIP subset. */
25
40
  export function readZipEntries(bytes) {
41
+ const reject = (reason) => { throw new UnsupportedArchiveError(reason); };
42
+ const end = bytes.length - 22;
43
+ if (end < 0 || bytes.readUInt32LE(end) !== 0x06054b50)
44
+ reject("missing terminal EOCD, comments, or trailing data");
45
+ if (bytes.readUInt16LE(end + 4) || bytes.readUInt16LE(end + 6) || bytes.readUInt16LE(end + 20))
46
+ reject("multi-disk archives or comments");
47
+ const count = bytes.readUInt16LE(end + 10);
48
+ const size = bytes.readUInt32LE(end + 12);
49
+ const start = bytes.readUInt32LE(end + 16);
50
+ if (count === 0xffff || size === 0xffffffff || start === 0xffffffff)
51
+ reject("ZIP64");
52
+ if (bytes.readUInt16LE(end + 8) !== count || start + size !== end)
53
+ reject("inconsistent central directory");
26
54
  const entries = [];
27
- let offset = 0;
28
- while (offset + 30 <= bytes.length) {
29
- const sig = bytes.readUInt32LE(offset);
30
- if (sig !== 0x04034b50)
31
- break; // Stop at Central Directory (`0x02014b50`)
32
- const compressionMethod = bytes.readUInt16LE(offset + 8);
33
- const compressedSize = bytes.readUInt32LE(offset + 18);
34
- const uncompressedSize = bytes.readUInt32LE(offset + 22);
35
- const nameLen = bytes.readUInt16LE(offset + 26);
36
- const extraLen = bytes.readUInt16LE(offset + 28);
37
- const nameStart = offset + 30;
38
- const dataStart = nameStart + nameLen + extraLen;
55
+ const names = new Set();
56
+ let local = 0;
57
+ let central = start;
58
+ let decodedTotal = 0;
59
+ for (let i = 0; i < count; i++) {
60
+ if (central + 46 > end || bytes.readUInt32LE(central) !== 0x02014b50)
61
+ reject("truncated central directory");
62
+ const flags = bytes.readUInt16LE(central + 8);
63
+ const method = bytes.readUInt16LE(central + 10);
64
+ const crc = bytes.readUInt32LE(central + 16);
65
+ const compressedSize = bytes.readUInt32LE(central + 20);
66
+ const uncompressedSize = bytes.readUInt32LE(central + 24);
67
+ const nameLen = bytes.readUInt16LE(central + 28);
68
+ if (flags !== 0)
69
+ reject("flags (including encryption, data descriptors, or alternate filename encodings)");
70
+ if (method !== 0 && method !== 8)
71
+ reject("unsupported compression method");
72
+ if (compressedSize === 0xffffffff || uncompressedSize === 0xffffffff)
73
+ reject("ZIP64 sizes");
74
+ if (bytes.readUInt16LE(central + 6) > 20 || bytes.readUInt32LE(central + 12) ||
75
+ bytes.readUInt16LE(central + 30) || bytes.readUInt16LE(central + 32) ||
76
+ bytes.readUInt16LE(central + 34) || bytes.readUInt16LE(central + 36) || bytes.readUInt32LE(central + 38)) {
77
+ reject("unsupported versions, timestamps, extra fields, comments, disks, or file attributes");
78
+ }
79
+ if (central + 46 + nameLen > end || bytes.readUInt32LE(central + 42) !== local)
80
+ reject("entry offsets or names are inconsistent");
81
+ if (local + 30 > start || bytes.readUInt32LE(local) !== 0x04034b50)
82
+ reject("missing local header or unrepresented data");
83
+ if (bytes.readUInt16LE(local + 4) !== bytes.readUInt16LE(central + 6) ||
84
+ bytes.readUInt16LE(local + 6) !== flags || bytes.readUInt16LE(local + 8) !== method ||
85
+ bytes.readUInt32LE(local + 10) || bytes.readUInt32LE(local + 14) !== crc ||
86
+ bytes.readUInt32LE(local + 18) !== compressedSize || bytes.readUInt32LE(local + 22) !== uncompressedSize ||
87
+ bytes.readUInt16LE(local + 26) !== nameLen || bytes.readUInt16LE(local + 28))
88
+ reject("local/central header mismatch or local metadata");
89
+ const dataStart = local + 30 + nameLen;
39
90
  const dataEnd = dataStart + compressedSize;
40
- if (dataEnd > bytes.length)
41
- break;
42
- const name = bytes.subarray(nameStart, nameStart + nameLen).toString("utf8");
43
- const rawCompressed = bytes.subarray(dataStart, dataEnd);
44
- let data = rawCompressed;
45
- if (compressionMethod === 8 && compressedSize > 0) {
91
+ if (dataEnd > start)
92
+ reject("truncated entry data");
93
+ const nameBytes = bytes.subarray(local + 30, dataStart);
94
+ if (!nameBytes.equals(bytes.subarray(central + 46, central + 46 + nameLen)) ||
95
+ nameBytes.length === 0 || nameBytes.some((v) => v < 32 || v > 126))
96
+ reject("unsupported or inconsistent filenames");
97
+ const name = nameBytes.toString("ascii");
98
+ if (names.has(name))
99
+ reject("duplicate filenames");
100
+ names.add(name);
101
+ decodedTotal += uncompressedSize;
102
+ if (uncompressedSize > 64 * 1024 * 1024 || decodedTotal > 256 * 1024 * 1024)
103
+ reject("decoded size exceeds admission limits");
104
+ const compressed = bytes.subarray(dataStart, dataEnd);
105
+ let data;
106
+ if (method === 0) {
107
+ if (compressedSize !== uncompressedSize)
108
+ reject("stored entry size mismatch");
109
+ data = Buffer.from(compressed);
110
+ }
111
+ else {
46
112
  try {
47
- data = inflateRawSync(rawCompressed);
113
+ const result = inflateRawSync(compressed, { maxOutputLength: Math.max(1, uncompressedSize + 1), info: true });
114
+ // Node's info result reports consumed input, detecting trailing compressed garbage.
115
+ const decoded = result;
116
+ if (decoded.engine.bytesWritten !== compressedSize)
117
+ reject("unconsumed compressed bytes");
118
+ data = decoded.buffer;
48
119
  }
49
120
  catch {
50
- data = rawCompressed;
121
+ data = reject("invalid or incomplete deflate stream");
51
122
  }
52
123
  }
53
- entries.push({
54
- name,
55
- compressedSize,
56
- uncompressedSize,
57
- compressionMethod,
58
- data: Buffer.from(data),
59
- });
60
- offset = dataEnd;
124
+ if (data.length !== uncompressedSize || crc32(data) !== crc)
125
+ reject("decoded size or CRC mismatch");
126
+ entries.push({ name, compressedSize, uncompressedSize, compressionMethod: method, data });
127
+ local = dataEnd;
128
+ central += 46 + nameLen;
61
129
  }
130
+ if (central !== end || local !== start)
131
+ reject("unrepresented entries, signing structures, or gaps");
62
132
  return entries;
63
133
  }
64
134
  /**
65
- * Writes a valid ZIP / Android APK archive from a list of named file buffers.
135
+ * Writes a minimal ZIP archive from a list of named file buffers.
66
136
  */
67
137
  export function writeZipArchive(files) {
68
138
  const localHeaders = [];
@@ -123,45 +193,177 @@ export function writeZipArchive(files) {
123
193
  eocd.writeUInt16LE(0, 20);
124
194
  return Buffer.concat([...localHeaders, ...centralHeaders, eocd]);
125
195
  }
196
+ /** Admission shared with the file engine, before any output paths are created. */
197
+ export function validateZipProtectionInput(bytes, options = {}) {
198
+ const existingEntries = readZipEntries(bytes);
199
+ // Reserve room for decoy property stubs + canary/manifest + R8 mapping pair + JNI .so.
200
+ // 0xffff is a ZIP64 sentinel, not a usable classic-ZIP entry count.
201
+ if (existingEntries.length > 0xfffe - 16) {
202
+ throw new UnsupportedArchiveError("insufficient classic ZIP entry-count capacity for output");
203
+ }
204
+ const isSigned = existingEntries.some((e) => /^META-INF\/.*\.(SF|RSA|DSA|EC)$/i.test(e.name));
205
+ const hasManifest = existingEntries.some((e) => e.name === "AndroidManifest.xml");
206
+ if (isSigned) {
207
+ throw new UnsupportedArchiveError("APK or signed archive requires a signing-aware pipeline");
208
+ }
209
+ if (hasManifest && !options.allowUnsignedApk) {
210
+ throw new UnsupportedArchiveError("APK or signed archive requires a signing-aware pipeline");
211
+ }
212
+ const reservedPrefixes = options.allowUnsignedApk
213
+ ? ["assets/bla-shield", "assets/bla-shield/"]
214
+ : ["assets", "assets/enclave", "enclave", "assets/enclave/", "enclave/"];
215
+ const reservedExact = options.allowUnsignedApk
216
+ ? ["lib/arm64-v8a/libbla_enclave_jni.so"]
217
+ : [];
218
+ if (existingEntries.some((e) => reservedPrefixes.includes(e.name) ||
219
+ reservedExact.includes(e.name) ||
220
+ e.name.startsWith("assets/bla-shield/") ||
221
+ (!options.allowUnsignedApk &&
222
+ (e.name.startsWith("assets/enclave/") || e.name.startsWith("enclave/"))))) {
223
+ throw new UnsupportedArchiveError("existing entries overlap the reserved output namespace");
224
+ }
225
+ return existingEntries;
226
+ }
126
227
  /**
127
- * Protects a ZIP or Android APK archive against `rea inspect-artifact` and `rea inspect-android-package`
128
- * by injecting decoy enclave manifests, decoy DEX/native stub descriptors, and protecting embedded JS/WASM assets.
228
+ * Rewrites the admitted ZIP subset. Unsigned APKs get member-level DEX/IL2CPP
229
+ * protection (classes.dex, *.dex, global-metadata.dat) plus canary decoys under
230
+ * `assets/bla-shield/`. Signed APKs still throw UnsupportedApkProtectionError.
129
231
  */
130
232
  export function protectZipOrApkBuffer(bytes, options = {}) {
233
+ const preview = readZipEntries(bytes);
234
+ const isSigned = preview.some((e) => /^META-INF\/.*\.(SF|RSA|DSA|EC)$/i.test(e.name));
235
+ const hasManifest = preview.some((e) => e.name === "AndroidManifest.xml");
236
+ const treatAsApk = Boolean(options.isApk) || hasManifest;
237
+ if (treatAsApk && isSigned) {
238
+ throw new UnsupportedApkProtectionError();
239
+ }
240
+ const existingEntries = validateZipProtectionInput(bytes, {
241
+ allowUnsignedApk: treatAsApk,
242
+ });
131
243
  const intensity = options.intensity ?? "balanced";
132
244
  const prng = new SeededPrng(options.seed ?? "bla-archive-shield-v1");
133
245
  const chaffPayloads = generateChaffPayloads(prng, intensity);
134
- const existingEntries = readZipEntries(bytes);
135
- const outputFiles = existingEntries.map((e) => ({
136
- name: e.name,
137
- data: e.data,
138
- }));
139
- // Inject decoy enclave asset manifests & shadow class descriptors
246
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
247
+ let membersHardened = 0;
248
+ const outputFiles = existingEntries.map((e) => {
249
+ const lower = e.name.toLowerCase();
250
+ if (lower.endsWith(".dex") || lower === "classes.dex" || /(?:^|\/)classes\d*\.dex$/.test(lower)) {
251
+ const protectedDex = protectAndroidDexBuffer(e.data, { intensity, seed: options.seed });
252
+ membersHardened += 1;
253
+ return { name: e.name, data: protectedDex.buffer };
254
+ }
255
+ if (lower.endsWith("global-metadata.dat") || lower === "global-metadata.dat") {
256
+ const protectedMeta = protectIl2cppMetadataBuffer(e.data, { intensity, seed: options.seed });
257
+ membersHardened += 1;
258
+ return { name: e.name, data: protectedMeta.buffer };
259
+ }
260
+ return { name: e.name, data: e.data };
261
+ });
262
+ const decoyRoot = treatAsApk ? "assets/bla-shield" : "assets/enclave";
263
+ const shadowRoot = treatAsApk ? "assets/bla-shield" : "enclave";
140
264
  const manifestContent = JSON.stringify({
141
265
  schema: "bla-archive-enclave-shield/v1",
142
266
  protected: true,
143
267
  enclave_delegation: "hardware_tee_ring0",
268
+ apkMemberHardening: treatAsApk,
269
+ membersHardened,
144
270
  manifests: chaffPayloads.map((p) => p.rawText),
271
+ canaryTokens: deception.canary.syntheticCanaryTokens,
272
+ diagnostics: deception.diagnostics.diagnosticsInjected.map((d) => ({
273
+ subsystem: d.subsystem,
274
+ errorClass: d.errorClass,
275
+ systemCode: d.systemCode,
276
+ diagnosticMessage: d.diagnosticMessage,
277
+ })),
145
278
  }, null, 2);
146
279
  outputFiles.push({
147
- name: "assets/enclave/bla-attestation-manifest.json",
280
+ name: `${decoyRoot}/bla-attestation-manifest.json`,
148
281
  data: Buffer.from(manifestContent, "utf8"),
149
282
  });
283
+ // Explicit canary / diagnostic bait files for archive inventory scanners.
284
+ outputFiles.push({
285
+ name: `${decoyRoot}/bla-canary-tokens.txt`,
286
+ data: Buffer.from(deception.textRecords.join("\n") + "\n", "utf8"),
287
+ });
150
288
  const decoyCount = intensity === "stealth" ? 2 : intensity === "balanced" ? 4 : 8;
151
289
  for (let i = 0; i < decoyCount; i++) {
152
290
  const hex = prng.hex(6);
153
291
  const payload = chaffPayloads[i % chaffPayloads.length];
154
292
  outputFiles.push({
155
- name: options.isApk
156
- ? `assets/enclave/tee_bridge_stub_${hex}.properties`
157
- : `enclave/shadow_module_${hex}.json`,
293
+ name: treatAsApk
294
+ ? `${shadowRoot}/tee_bridge_stub_${hex}.properties`
295
+ : `${shadowRoot}/shadow_module_${hex}.json`,
158
296
  data: Buffer.from(`# ${payload.rawText}\nenclave.cid=${16 + i}\nenclave.sealed=true\n`, "utf8"),
159
297
  });
160
298
  }
299
+ // Counter REA #7456 (caller-selected R8/ProGuard mapping) + #7472 (JNI export linking):
300
+ // plant a tempting mapping.txt and a decoy libbla_enclave_jni.so with real Java_* dynsym
301
+ // exports. Only on unsigned APK-shaped archives; never rewrite the developer's own .so.
302
+ let androidR8MappingBytes = 0;
303
+ let androidJniExportsPlanted = 0;
304
+ let androidManifestDecoyBytes = 0;
305
+ let androidManifestNamedComponents = 0;
306
+ let androidDexXrefBytes = 0;
307
+ let androidDexXrefCallers = 0;
308
+ let r8ExtraEntries = 0;
309
+ if (treatAsApk) {
310
+ const r8 = generateAndroidR8Counter(prng, intensity);
311
+ const mappingBuf = Buffer.from(r8.mappingText, "utf8");
312
+ outputFiles.push({
313
+ name: `${decoyRoot}/mapping.txt`,
314
+ data: mappingBuf,
315
+ });
316
+ outputFiles.push({
317
+ name: `${decoyRoot}/proguard-mapping.txt`,
318
+ data: Buffer.from(r8.mappingText, "utf8"),
319
+ });
320
+ outputFiles.push({
321
+ name: "lib/arm64-v8a/libbla_enclave_jni.so",
322
+ data: r8.jniElfBuffer,
323
+ });
324
+ androidR8MappingBytes = mappingBuf.length;
325
+ androidJniExportsPlanted = r8.jniExportNames.length;
326
+ r8ExtraEntries = 3;
327
+ // Counter REA #7379 / #7818: plant a well-formed decoy AndroidManifest.xml
328
+ // under assets/bla-shield/. Never rewrite the developer's root manifest
329
+ // (red line — real component / export surface stays intact).
330
+ const mf = generateAndroidManifestCounter(prng, intensity);
331
+ const mfBuf = Buffer.from(mf.manifestXml, "utf8");
332
+ outputFiles.push({
333
+ name: `${decoyRoot}/AndroidManifest.xml`,
334
+ data: mfBuf,
335
+ });
336
+ outputFiles.push({
337
+ name: `${decoyRoot}/AndroidManifest-decoy.xml`,
338
+ data: Buffer.from(mf.manifestXml, "utf8"),
339
+ });
340
+ androidManifestDecoyBytes = mfBuf.length;
341
+ androidManifestNamedComponents = mf.namedComponentsEmitted;
342
+ r8ExtraEntries += 2;
343
+ // Counter REA #8154: plant a standalone multidex classesN.dex whose decoy
344
+ // caller classes each invoke-static android.util.Log.d — saturating
345
+ // MAX_EXTERNAL_XREF_BYTES caller inventory. Never rewrite the developer's
346
+ // own classes.dex beyond the existing trailer shield above.
347
+ const xref = generateAndroidDexXrefCounter(prng, intensity);
348
+ const xrefName = nextMultidexName(outputFiles.map((f) => f.name));
349
+ outputFiles.push({ name: xrefName, data: xref.dexBuffer });
350
+ androidDexXrefBytes = xref.dexBuffer.length;
351
+ androidDexXrefCallers = xref.callerClassesEmitted;
352
+ r8ExtraEntries += 1;
353
+ }
161
354
  return {
162
355
  buffer: writeZipArchive(outputFiles),
163
- decoyEntriesInjected: decoyCount + 1,
356
+ decoyEntriesInjected: decoyCount + 2 + r8ExtraEntries,
164
357
  chaffPayloadsEmbedded: chaffPayloads.length,
358
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
359
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
360
+ membersHardened,
361
+ androidR8MappingBytes,
362
+ androidJniExportsPlanted,
363
+ androidManifestDecoyBytes,
364
+ androidManifestNamedComponents,
365
+ androidDexXrefBytes,
366
+ androidDexXrefCallers,
165
367
  };
166
368
  }
167
369
  //# sourceMappingURL=archive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/shields/formats/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/shields/formats/archive.ts"],"names":[],"mappings":"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"}