bla-agents 1.1.0 → 1.5.3

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 (276) 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-plan.d.ts +68 -0
  40. package/dist/core/release-plan.d.ts.map +1 -0
  41. package/dist/core/release-plan.js +235 -0
  42. package/dist/core/release-plan.js.map +1 -0
  43. package/dist/core/sarif.d.ts +53 -0
  44. package/dist/core/sarif.d.ts.map +1 -0
  45. package/dist/core/sarif.js +91 -0
  46. package/dist/core/sarif.js.map +1 -0
  47. package/dist/core/sqlite-runtime.d.ts +13 -0
  48. package/dist/core/sqlite-runtime.d.ts.map +1 -1
  49. package/dist/core/sqlite-runtime.js +38 -8
  50. package/dist/core/sqlite-runtime.js.map +1 -1
  51. package/dist/core/types.d.ts +7 -2
  52. package/dist/core/types.d.ts.map +1 -1
  53. package/dist/engine/auditor.d.ts.map +1 -1
  54. package/dist/engine/auditor.js +251 -8
  55. package/dist/engine/auditor.js.map +1 -1
  56. package/dist/engine/benchmark.d.ts +1 -1
  57. package/dist/engine/benchmark.d.ts.map +1 -1
  58. package/dist/engine/benchmark.js +121 -41
  59. package/dist/engine/benchmark.js.map +1 -1
  60. package/dist/engine/defender.d.ts +1 -0
  61. package/dist/engine/defender.d.ts.map +1 -1
  62. package/dist/engine/defender.js +7 -1
  63. package/dist/engine/defender.js.map +1 -1
  64. package/dist/engine/harden.d.ts +61 -0
  65. package/dist/engine/harden.d.ts.map +1 -0
  66. package/dist/engine/harden.js +292 -0
  67. package/dist/engine/harden.js.map +1 -0
  68. package/dist/engine/protector.d.ts.map +1 -1
  69. package/dist/engine/protector.js +162 -21
  70. package/dist/engine/protector.js.map +1 -1
  71. package/dist/identity.d.ts +112 -2
  72. package/dist/identity.d.ts.map +1 -1
  73. package/dist/identity.js +112 -2
  74. package/dist/identity.js.map +1 -1
  75. package/dist/index.d.ts +26 -9
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +26 -9
  78. package/dist/index.js.map +1 -1
  79. package/dist/mcp/server.d.ts +59 -152
  80. package/dist/mcp/server.d.ts.map +1 -1
  81. package/dist/mcp/server.js +466 -50
  82. package/dist/mcp/server.js.map +1 -1
  83. package/dist/setup/clients.d.ts +49 -1
  84. package/dist/setup/clients.d.ts.map +1 -1
  85. package/dist/setup/clients.js +1193 -20
  86. package/dist/setup/clients.js.map +1 -1
  87. package/dist/setup/doctor.d.ts +58 -14
  88. package/dist/setup/doctor.d.ts.map +1 -1
  89. package/dist/setup/doctor.js +316 -22
  90. package/dist/setup/doctor.js.map +1 -1
  91. package/dist/setup/setup.d.ts +77 -7
  92. package/dist/setup/setup.d.ts.map +1 -1
  93. package/dist/setup/setup.js +591 -62
  94. package/dist/setup/setup.js.map +1 -1
  95. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
  96. package/dist/shields/chaff/chaff-generator.js +12 -3
  97. package/dist/shields/chaff/chaff-generator.js.map +1 -1
  98. package/dist/shields/deception/architecture-mirage.js +1 -1
  99. package/dist/shields/deception/architecture-mirage.js.map +1 -1
  100. package/dist/shields/deception/canary-honeypot.d.ts +33 -0
  101. package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
  102. package/dist/shields/deception/canary-honeypot.js +95 -0
  103. package/dist/shields/deception/canary-honeypot.js.map +1 -0
  104. package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
  105. package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
  106. package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
  107. package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
  108. package/dist/shields/deception/crash-trace-decoy.js +1 -1
  109. package/dist/shields/deception/crash-trace-decoy.js.map +1 -1
  110. package/dist/shields/deception/decompiler-illusion.js +1 -1
  111. package/dist/shields/deception/decompiler-illusion.js.map +1 -1
  112. package/dist/shields/deception/diff-noise-injector.js +1 -1
  113. package/dist/shields/deception/diff-noise-injector.js.map +1 -1
  114. package/dist/shields/deception/evidence-contract-poison.js +1 -1
  115. package/dist/shields/deception/evidence-contract-poison.js.map +1 -1
  116. package/dist/shields/deception/format-payloads.d.ts +21 -0
  117. package/dist/shields/deception/format-payloads.d.ts.map +1 -0
  118. package/dist/shields/deception/format-payloads.js +24 -0
  119. package/dist/shields/deception/format-payloads.js.map +1 -0
  120. package/dist/shields/deception/index.d.ts +10 -2
  121. package/dist/shields/deception/index.d.ts.map +1 -1
  122. package/dist/shields/deception/index.js +20 -3
  123. package/dist/shields/deception/index.js.map +1 -1
  124. package/dist/shields/deception/prompt-completion-poison.d.ts +3 -2
  125. package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -1
  126. package/dist/shields/deception/prompt-completion-poison.js +6 -3
  127. package/dist/shields/deception/prompt-completion-poison.js.map +1 -1
  128. package/dist/shields/deception/shadow-business-logic.js +4 -4
  129. package/dist/shields/deception/shadow-business-logic.js.map +1 -1
  130. package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
  131. package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
  132. package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
  133. package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
  134. package/dist/shields/exhaustion/asar-header-amplifier.d.ts +12 -3
  135. package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -1
  136. package/dist/shields/exhaustion/asar-header-amplifier.js +30 -8
  137. package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -1
  138. package/dist/shields/exhaustion/bpe-token-amplifier.js +2 -2
  139. package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -1
  140. package/dist/shields/exhaustion/callgraph-labyrinth.js +2 -2
  141. package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -1
  142. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +1 -1
  143. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -1
  144. package/dist/shields/exhaustion/frida-capture-saturation.d.ts +10 -5
  145. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
  146. package/dist/shields/exhaustion/frida-capture-saturation.js +21 -8
  147. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
  148. package/dist/shields/exhaustion/index.d.ts +2 -2
  149. package/dist/shields/exhaustion/index.d.ts.map +1 -1
  150. package/dist/shields/exhaustion/index.js +2 -2
  151. package/dist/shields/exhaustion/index.js.map +1 -1
  152. package/dist/shields/exhaustion/obligation-flooder.d.ts +17 -5
  153. package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -1
  154. package/dist/shields/exhaustion/obligation-flooder.js +20 -8
  155. package/dist/shields/exhaustion/obligation-flooder.js.map +1 -1
  156. package/dist/shields/exhaustion/rea-budget-matrix.d.ts +8 -2
  157. package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -1
  158. package/dist/shields/exhaustion/rea-budget-matrix.js +139 -16
  159. package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -1
  160. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -1
  161. package/dist/shields/exhaustion/regex-worker-tarpit.js +2 -1
  162. package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -1
  163. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +7 -4
  164. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -1
  165. package/dist/shields/exhaustion/wasm-interface-exhaustion.js +16 -7
  166. package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -1
  167. package/dist/shields/formats/android-dex-xref.d.ts +19 -0
  168. package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
  169. package/dist/shields/formats/android-dex-xref.js +427 -0
  170. package/dist/shields/formats/android-dex-xref.js.map +1 -0
  171. package/dist/shields/formats/android-manifest.d.ts +44 -0
  172. package/dist/shields/formats/android-manifest.d.ts.map +1 -0
  173. package/dist/shields/formats/android-manifest.js +240 -0
  174. package/dist/shields/formats/android-manifest.js.map +1 -0
  175. package/dist/shields/formats/android-r8.d.ts +44 -0
  176. package/dist/shields/formats/android-r8.d.ts.map +1 -0
  177. package/dist/shields/formats/android-r8.js +246 -0
  178. package/dist/shields/formats/android-r8.js.map +1 -0
  179. package/dist/shields/formats/apple-plist.d.ts +15 -0
  180. package/dist/shields/formats/apple-plist.d.ts.map +1 -1
  181. package/dist/shields/formats/apple-plist.js +59 -1
  182. package/dist/shields/formats/apple-plist.js.map +1 -1
  183. package/dist/shields/formats/archive.d.ts +27 -6
  184. package/dist/shields/formats/archive.d.ts.map +1 -1
  185. package/dist/shields/formats/archive.js +247 -45
  186. package/dist/shields/formats/archive.js.map +1 -1
  187. package/dist/shields/formats/asar.d.ts +50 -10
  188. package/dist/shields/formats/asar.d.ts.map +1 -1
  189. package/dist/shields/formats/asar.js +265 -39
  190. package/dist/shields/formats/asar.js.map +1 -1
  191. package/dist/shields/formats/bun-standalone.d.ts +78 -0
  192. package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
  193. package/dist/shields/formats/bun-standalone.js +272 -0
  194. package/dist/shields/formats/bun-standalone.js.map +1 -0
  195. package/dist/shields/formats/dotnet-managed.d.ts +9 -0
  196. package/dist/shields/formats/dotnet-managed.d.ts.map +1 -1
  197. package/dist/shields/formats/dotnet-managed.js +26 -1
  198. package/dist/shields/formats/dotnet-managed.js.map +1 -1
  199. package/dist/shields/formats/electron-fuses.d.ts +63 -8
  200. package/dist/shields/formats/electron-fuses.d.ts.map +1 -1
  201. package/dist/shields/formats/electron-fuses.js +297 -65
  202. package/dist/shields/formats/electron-fuses.js.map +1 -1
  203. package/dist/shields/formats/erlang-beam.d.ts +34 -0
  204. package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
  205. package/dist/shields/formats/erlang-beam.js +319 -0
  206. package/dist/shields/formats/erlang-beam.js.map +1 -0
  207. package/dist/shields/formats/evm-bytecode.d.ts +28 -0
  208. package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
  209. package/dist/shields/formats/evm-bytecode.js +124 -0
  210. package/dist/shields/formats/evm-bytecode.js.map +1 -0
  211. package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
  212. package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
  213. package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
  214. package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
  215. package/dist/shields/formats/gpu-ptx.d.ts +40 -0
  216. package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
  217. package/dist/shields/formats/gpu-ptx.js +62 -0
  218. package/dist/shields/formats/gpu-ptx.js.map +1 -0
  219. package/dist/shields/formats/headers.d.ts.map +1 -1
  220. package/dist/shields/formats/headers.js +54 -14
  221. package/dist/shields/formats/headers.js.map +1 -1
  222. package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
  223. package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
  224. package/dist/shields/formats/jvm-bytecode.js +134 -0
  225. package/dist/shields/formats/jvm-bytecode.js.map +1 -0
  226. package/dist/shields/formats/mobile-game.d.ts +4 -0
  227. package/dist/shields/formats/mobile-game.d.ts.map +1 -1
  228. package/dist/shields/formats/mobile-game.js +16 -0
  229. package/dist/shields/formats/mobile-game.js.map +1 -1
  230. package/dist/shields/formats/model.d.ts +22 -8
  231. package/dist/shields/formats/model.d.ts.map +1 -1
  232. package/dist/shields/formats/model.js +231 -59
  233. package/dist/shields/formats/model.js.map +1 -1
  234. package/dist/shields/formats/native.d.ts +65 -11
  235. package/dist/shields/formats/native.d.ts.map +1 -1
  236. package/dist/shields/formats/native.js +413 -108
  237. package/dist/shields/formats/native.js.map +1 -1
  238. package/dist/shields/formats/pcap-capture.d.ts +27 -0
  239. package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
  240. package/dist/shields/formats/pcap-capture.js +201 -0
  241. package/dist/shields/formats/pcap-capture.js.map +1 -0
  242. package/dist/shields/formats/python.d.ts +22 -1
  243. package/dist/shields/formats/python.d.ts.map +1 -1
  244. package/dist/shields/formats/python.js +568 -27
  245. package/dist/shields/formats/python.js.map +1 -1
  246. package/dist/shields/formats/sourcemap.d.ts.map +1 -1
  247. package/dist/shields/formats/sourcemap.js +2 -0
  248. package/dist/shields/formats/sourcemap.js.map +1 -1
  249. package/dist/shields/formats/sqlite.d.ts +87 -15
  250. package/dist/shields/formats/sqlite.d.ts.map +1 -1
  251. package/dist/shields/formats/sqlite.js +377 -42
  252. package/dist/shields/formats/sqlite.js.map +1 -1
  253. package/dist/shields/formats/wasm.d.ts +6 -0
  254. package/dist/shields/formats/wasm.d.ts.map +1 -1
  255. package/dist/shields/formats/wasm.js +118 -3
  256. package/dist/shields/formats/wasm.js.map +1 -1
  257. package/dist/shields/javascript/ast-shield.d.ts +25 -5
  258. package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
  259. package/dist/shields/javascript/ast-shield.js +428 -58
  260. package/dist/shields/javascript/ast-shield.js.map +1 -1
  261. package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
  262. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
  263. package/dist/shields/runtime/memory-diff-shield.js +170 -0
  264. package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
  265. package/dist/shields/runtime/runtime-shield.d.ts +12 -16
  266. package/dist/shields/runtime/runtime-shield.d.ts.map +1 -1
  267. package/dist/shields/runtime/runtime-shield.js +30 -24
  268. package/dist/shields/runtime/runtime-shield.js.map +1 -1
  269. package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -1
  270. package/dist/shields/tarpit/opaque-predicates.js +3 -3
  271. package/dist/shields/tarpit/opaque-predicates.js.map +1 -1
  272. package/dist/shields/tarpit/tarpit-generator.d.ts +9 -4
  273. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
  274. package/dist/shields/tarpit/tarpit-generator.js +30 -23
  275. package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
  276. package/package.json +13 -6
@@ -0,0 +1,346 @@
1
+ import { REA_INTERNAL_LIMITS } from "../../identity.js";
2
+ function writeGoUvarint(value) {
3
+ const out = [];
4
+ let n = value >>> 0;
5
+ while (n >= 0x80) {
6
+ out.push((n & 0x7f) | 0x80);
7
+ n >>>= 7;
8
+ }
9
+ out.push(n);
10
+ return Buffer.from(out);
11
+ }
12
+ const GO_MAGIC = Buffer.from("ff20476f206275696c64696e663a", "hex");
13
+ const MODULE_START = Buffer.from("3077af0c9274080241e1c107e6d618e6", "hex");
14
+ const MODULE_END = Buffer.from("f932433186182072008242104116d8f2", "hex");
15
+ /**
16
+ * Framed Go buildinfo (magic `\xff Go buildinf:` + inline encoding) with
17
+ * MODULE_START/END wrapping, plus `.gopclntab` / `runtime.moduledata` bait.
18
+ * Bankrupt/maximum pad the module past `MAX_BUILD_INFO_BYTES` (1 MiB).
19
+ *
20
+ * Trailer placement poisons whole-file scanners. Prefer
21
+ * {@link buildMappedGoBuildInfoPlant} inside a real `.go.buildinfo` section /
22
+ * writable PT_LOAD so REA's mapped parser (`GoBuildInfoSearch`) trips.
23
+ */
24
+ export function buildGoBuildInfoExhaustionPayload(prng, intensity = "balanced") {
25
+ const padAlign = Buffer.alloc(16, 0);
26
+ const version = Buffer.from("go1.22.5", "utf8");
27
+ const canaryLines = [
28
+ "path\tgithub.com/tee-enclave/zero-trust-shim\n",
29
+ `mod\tgithub.com/tee-enclave/zero-trust-shim\tv4.2.0\th1:${prng.hex(32)}=\n`,
30
+ `dep\tgithub.com/intel-sgx/enclave-sdk-go\tv2.14.0\th1:${prng.hex(32)}=\n`,
31
+ `dep\tgithub.com/google/go-tpm-tools\tv0.4.4\th1:${prng.hex(32)}=\n`,
32
+ "build\t-compiler=gc\n",
33
+ "build\tCGO_ENABLED=1\n",
34
+ `build\tBLA_CANARY=${prng.hex(16)}\n`,
35
+ ];
36
+ let moduleBody = Buffer.from(canaryLines.join(""), "utf8");
37
+ const target = intensity === "bankrupt" || intensity === "maximum"
38
+ ? REA_INTERNAL_LIMITS.GO_MAX_BUILD_INFO_BYTES + 4096
39
+ : Math.min(24_000, REA_INTERNAL_LIMITS.GO_MAX_BUILD_INFO_BYTES >> 3);
40
+ if (version.length + moduleBody.length < target) {
41
+ const need = target - version.length - moduleBody.length;
42
+ const noise = Buffer.from(`\npath\tgithub.com/bla/tarpit/${prng.hex(8)}\n` +
43
+ "A".repeat(Math.max(0, need - 40)), "utf8");
44
+ moduleBody = Buffer.concat([moduleBody, noise]);
45
+ }
46
+ const moduleFramed = Buffer.concat([
47
+ MODULE_START,
48
+ moduleBody,
49
+ Buffer.from("\n", "utf8"),
50
+ MODULE_END,
51
+ ]);
52
+ const exceeds = version.length + moduleFramed.length >
53
+ REA_INTERNAL_LIMITS.GO_MAX_BUILD_INFO_BYTES;
54
+ const header = Buffer.alloc(32, 0);
55
+ GO_MAGIC.copy(header, 0);
56
+ header[14] = 8; // ptrSize
57
+ header[15] = 2; // flags: bit1 => inline encoding
58
+ const pclntabBait = Buffer.from("\0[BLA-GO-BUILDINFO]\0.gopclntab\0runtime.moduledata\0__gopclntab\0runtime.pclntab\0\xfb\xff\xff\xff\x00\x00", "latin1");
59
+ return {
60
+ buffer: Buffer.concat([
61
+ padAlign,
62
+ header,
63
+ writeGoUvarint(version.length),
64
+ version,
65
+ writeGoUvarint(moduleFramed.length),
66
+ moduleFramed,
67
+ pclntabBait,
68
+ ]),
69
+ exceedsMaxBuildInfoBytes: exceeds,
70
+ moduleBytes: moduleFramed.length,
71
+ };
72
+ }
73
+ /**
74
+ * Compact plant for a real mapped `.go.buildinfo` / writable PT_LOAD region.
75
+ * Bankrupt claims an inline version length past `MAX_BUILD_INFO_BYTES` so REA's
76
+ * mapped parser resource-fails without needing a 1 MiB section. Balanced writes
77
+ * a valid small framed module. Capacity is respected (never overflows the section).
78
+ */
79
+ export function buildMappedGoBuildInfoPlant(intensity, capacity) {
80
+ if (capacity < 40) {
81
+ return { buffer: Buffer.alloc(0), tripsMaxBuildInfoBytes: false };
82
+ }
83
+ const header = Buffer.alloc(32, 0);
84
+ GO_MAGIC.copy(header, 0);
85
+ header[14] = 8;
86
+ header[15] = 2;
87
+ const marker = Buffer.from("\0[BLA-GO-MAPPED]\0", "latin1");
88
+ if (intensity === "bankrupt" || intensity === "maximum") {
89
+ const claim = writeGoUvarint(REA_INTERNAL_LIMITS.GO_MAX_BUILD_INFO_BYTES + 1);
90
+ const plant = Buffer.concat([header, claim, marker]);
91
+ return {
92
+ buffer: plant.subarray(0, Math.min(plant.length, capacity)),
93
+ tripsMaxBuildInfoBytes: true,
94
+ };
95
+ }
96
+ const version = Buffer.from("go1.22.5", "utf8");
97
+ const module = Buffer.from("path\tgithub.com/bla/mapped-buildinfo\nbuild\t-compiler=gc\n", "utf8");
98
+ const plant = Buffer.concat([
99
+ header,
100
+ writeGoUvarint(version.length),
101
+ version,
102
+ writeGoUvarint(module.length),
103
+ module,
104
+ marker,
105
+ ]);
106
+ return {
107
+ buffer: plant.subarray(0, Math.min(plant.length, capacity)),
108
+ tripsMaxBuildInfoBytes: false,
109
+ };
110
+ }
111
+ /**
112
+ * Dense NUL-terminated package:/dart:/class-like pool sized to fit `capacity`,
113
+ * for planting inside a real Dart isolate snapshot data region.
114
+ */
115
+ export function buildMappedFlutterIsolatePoolPlant(capacity, prng, options = {}) {
116
+ if (capacity <= 0) {
117
+ return {
118
+ buffer: Buffer.alloc(0),
119
+ packageAndDartUris: 0,
120
+ classLikeTokens: 0,
121
+ snapshotHeaderBytes: 0,
122
+ };
123
+ }
124
+ const parts = [];
125
+ let headerBytes = 0;
126
+ if (options.includeSnapshotHeader !== false && capacity >= 52) {
127
+ const rec = Buffer.alloc(52, 0);
128
+ rec[0] = 0xf5;
129
+ rec[1] = 0xf5;
130
+ rec[2] = 0xdc;
131
+ rec[3] = 0xdc;
132
+ rec.writeBigUInt64LE(64n, 4);
133
+ rec.writeBigUInt64LE(3n, 12);
134
+ rec.write(prng.hex(32), 20, "ascii");
135
+ parts.push(rec);
136
+ headerBytes = 52;
137
+ }
138
+ let used = headerBytes;
139
+ let uris = 0;
140
+ let tokens = 0;
141
+ const marker = Buffer.from("\0[BLA-FLUTTER-MAPPED]\0", "utf8");
142
+ if (used + marker.length <= capacity) {
143
+ parts.push(marker);
144
+ used += marker.length;
145
+ }
146
+ // REA caps package_uris and dart_uris independently at MAX_POOL_URIS (500).
147
+ // Plant each kind past the cap (not a combined budget).
148
+ const uriTarget = REA_INTERNAL_LIMITS.DART_MAX_POOL_URIS + 32;
149
+ let i = 0;
150
+ while (used < capacity && i < uriTarget) {
151
+ // Keep strings short so a mapped section can exceed REA pool caps.
152
+ const pkg = `package:m${i}/b.dart\0`;
153
+ const pkgBuf = Buffer.from(pkg, "utf8");
154
+ if (used + pkgBuf.length > capacity)
155
+ break;
156
+ parts.push(pkgBuf);
157
+ used += pkgBuf.length;
158
+ uris++;
159
+ i++;
160
+ }
161
+ i = 0;
162
+ while (used < capacity && i < uriTarget) {
163
+ const dart = `dart:d${i}\0`;
164
+ const dartBuf = Buffer.from(dart, "utf8");
165
+ if (used + dartBuf.length > capacity)
166
+ break;
167
+ parts.push(dartBuf);
168
+ used += dartBuf.length;
169
+ uris++;
170
+ i++;
171
+ }
172
+ let t = 0;
173
+ const tokenTarget = REA_INTERNAL_LIMITS.DART_MAX_POOL_TOKENS + 32;
174
+ while (used < capacity && tokens < tokenTarget) {
175
+ const tok = `Node_${t}_X\0`;
176
+ const tokBuf = Buffer.from(tok, "utf8");
177
+ if (used + tokBuf.length > capacity)
178
+ break;
179
+ parts.push(tokBuf);
180
+ used += tokBuf.length;
181
+ tokens++;
182
+ t++;
183
+ }
184
+ if (used < capacity) {
185
+ parts.push(Buffer.alloc(capacity - used, 0));
186
+ }
187
+ return {
188
+ buffer: Buffer.concat(parts).subarray(0, capacity),
189
+ packageAndDartUris: uris,
190
+ classLikeTokens: tokens,
191
+ snapshotHeaderBytes: headerBytes,
192
+ };
193
+ }
194
+ /**
195
+ * Dart snapshot-hash overflow (>64) plus string-pool URI/token flood past
196
+ * `MAX_POOL_URIS` (500) and `MAX_POOL_TOKENS` (2000).
197
+ */
198
+ export function buildFlutterPoolExhaustionPayload(prng) {
199
+ const records = [];
200
+ const snapshotCount = REA_INTERNAL_LIMITS.DART_MAX_SNAPSHOT_HASH_CANDIDATES + 2;
201
+ for (let i = 0; i < snapshotCount; i++) {
202
+ const rec = Buffer.alloc(52, 0);
203
+ rec[0] = 0xf5;
204
+ rec[1] = 0xf5;
205
+ rec[2] = 0xdc;
206
+ rec[3] = 0xdc;
207
+ rec.writeBigUInt64LE(64n, 4);
208
+ rec.writeBigUInt64LE(3n, 12);
209
+ const hash32 = i.toString(16).padStart(8, "0") + prng.hex(24);
210
+ rec.write(hash32, 20, "ascii");
211
+ records.push(rec);
212
+ }
213
+ const labeledLines = [
214
+ '\0Dart VM version: 3.5.0-enclave-tee-ring0 (stable) on "linux_x64"\0',
215
+ 'Dart VM version: 3.6.2-sgx-isolated-bridge (stable) on "macos_arm64"\0',
216
+ "based on LLVM 17.0.6 (https://enclave.internal/llvm-tee-01)\0",
217
+ "based on LLVM 18.1.2 (https://enclave.internal/llvm-tee-02)\0",
218
+ "based on LLVM 18.1.8 (https://enclave.internal/llvm-tee-03)\0",
219
+ "based on LLVM 19.1.0 (https://enclave.internal/llvm-tee-04)\0",
220
+ "based on LLVM 19.1.4 (https://enclave.internal/llvm-tee-05)\0",
221
+ "based on LLVM 20.0.0 (https://enclave.internal/llvm-tee-06)\0",
222
+ ].join("");
223
+ records.push(Buffer.from(labeledLines, "latin1"));
224
+ const uriCount = REA_INTERNAL_LIMITS.DART_MAX_POOL_URIS + 16;
225
+ const tokenCount = REA_INTERNAL_LIMITS.DART_MAX_POOL_TOKENS + 32;
226
+ const poolParts = ["\0[BLA-FLUTTER-POOL-EXHAUST]\0"];
227
+ for (let i = 0; i < uriCount; i++) {
228
+ poolParts.push(`package:enclave_tarpit_${i}/lib/bridge_${prng.hex(4)}.dart`);
229
+ poolParts.push(`dart:enclave_isolate_${i}`);
230
+ }
231
+ for (let i = 0; i < tokenCount; i++) {
232
+ poolParts.push(`EnclaveTarpitNode_${i}_${prng.hex(3)}`);
233
+ }
234
+ records.push(Buffer.from(poolParts.join("\0") + "\0", "utf8"));
235
+ return {
236
+ buffer: Buffer.concat(records),
237
+ snapshotHashes: snapshotCount,
238
+ packageAndDartUris: uriCount * 2,
239
+ classLikeTokens: tokenCount,
240
+ };
241
+ }
242
+ /**
243
+ * Synthetic ELF64 with a mapped `.go.buildinfo` section and an isolate-data
244
+ * region (plus dynsym for `_kDartIsolateSnapshotData`) so REA's real Go /
245
+ * Flutter parsers can be exercised in tests and the benchmark.
246
+ */
247
+ export function buildMappedGoFlutterElfFixture() {
248
+ // Isolate must fit dense plants past MAX_POOL_URIS (500) / MAX_POOL_TOKENS
249
+ // (2000). Keep it compact (~48 KiB): a larger zero-filled baseline inflated
250
+ // the benchmark "before" token estimate and understated the native-ELF
251
+ // multiplier without changing real after-protection strength.
252
+ const ISO_SIZE = 48 * 1024;
253
+ const GO_SIZE = 512;
254
+ const goOff = 1024;
255
+ const isoOff = 2048;
256
+ const dynsymOff = isoOff + ISO_SIZE;
257
+ const dynsymSize = 48; // 2 entries × 24
258
+ const dynstrOff = dynsymOff + dynsymSize;
259
+ const dynstr = Buffer.from("\0_kDartIsolateSnapshotData\0", "utf8");
260
+ const FILE_SIZE = dynstrOff + dynstr.length + 64;
261
+ const bytes = Buffer.alloc(FILE_SIZE, 0);
262
+ // ELF64 LE header
263
+ bytes.set([0x7f, 0x45, 0x4c, 0x46, 2, 1, 1], 0);
264
+ bytes.writeUInt16LE(3, 16); // ET_DYN
265
+ bytes.writeUInt16LE(0x3e, 18); // EM_X86_64
266
+ bytes.writeUInt32LE(1, 20);
267
+ bytes.writeBigUInt64LE(0x400000n, 24); // e_entry
268
+ bytes.writeBigUInt64LE(64n, 32); // e_phoff
269
+ bytes.writeBigUInt64LE(128n, 40); // e_shoff
270
+ bytes.writeUInt16LE(64, 52);
271
+ bytes.writeUInt16LE(56, 54);
272
+ bytes.writeUInt16LE(1, 56); // e_phnum
273
+ bytes.writeUInt16LE(64, 58);
274
+ bytes.writeUInt16LE(6, 60); // e_shnum
275
+ bytes.writeUInt16LE(1, 62); // e_shstrndx
276
+ // PT_LOAD R|W covering whole file
277
+ bytes.writeUInt32LE(1, 64); // PT_LOAD
278
+ bytes.writeUInt32LE(6, 68); // PF_R|PF_W
279
+ bytes.writeBigUInt64LE(0n, 72);
280
+ bytes.writeBigUInt64LE(0x400000n, 80);
281
+ bytes.writeBigUInt64LE(0x400000n, 88);
282
+ bytes.writeBigUInt64LE(BigInt(FILE_SIZE), 96);
283
+ bytes.writeBigUInt64LE(BigInt(FILE_SIZE), 104);
284
+ bytes.writeBigUInt64LE(0x1000n, 112);
285
+ const names = Buffer.from("\0.shstrtab\0.go.buildinfo\0.isolate\0.dynsym\0.dynstr\0", "utf8");
286
+ const shstrOff = 512;
287
+ names.copy(bytes, shstrOff);
288
+ const goAddr = 0x400000n + BigInt(goOff); // 16-aligned
289
+ const isoAddr = 0x400000n + BigInt(isoOff);
290
+ dynstr.copy(bytes, dynstrOff);
291
+ const sym1 = dynsymOff + 24;
292
+ bytes.writeUInt32LE(1, sym1);
293
+ bytes[sym1 + 4] = (1 << 4) | 1; // STB_GLOBAL | STT_OBJECT
294
+ bytes.writeUInt16LE(3, sym1 + 6); // .isolate
295
+ bytes.writeBigUInt64LE(isoAddr, sym1 + 8);
296
+ bytes.writeBigUInt64LE(BigInt(ISO_SIZE), sym1 + 16);
297
+ // Seed isolate with a real snapshot header so protect appends pool after it
298
+ bytes[isoOff] = 0xf5;
299
+ bytes[isoOff + 1] = 0xf5;
300
+ bytes[isoOff + 2] = 0xdc;
301
+ bytes[isoOff + 3] = 0xdc;
302
+ bytes.writeBigUInt64LE(64n, isoOff + 4);
303
+ bytes.writeBigUInt64LE(3n, isoOff + 12);
304
+ bytes.write("0123456789abcdef0123456789abcdef", isoOff + 20, "ascii");
305
+ const sh1 = 128 + 64;
306
+ bytes.writeUInt32LE(1, sh1);
307
+ bytes.writeUInt32LE(3, sh1 + 4);
308
+ bytes.writeBigUInt64LE(BigInt(shstrOff), sh1 + 24);
309
+ bytes.writeBigUInt64LE(BigInt(names.length), sh1 + 32);
310
+ const sh2 = 128 + 128;
311
+ const goNameOff = names.indexOf(Buffer.from(".go.buildinfo\0"));
312
+ bytes.writeUInt32LE(goNameOff, sh2);
313
+ bytes.writeUInt32LE(1, sh2 + 4);
314
+ bytes.writeBigUInt64LE(3n, sh2 + 8);
315
+ bytes.writeBigUInt64LE(goAddr, sh2 + 16);
316
+ bytes.writeBigUInt64LE(BigInt(goOff), sh2 + 24);
317
+ bytes.writeBigUInt64LE(BigInt(GO_SIZE), sh2 + 32);
318
+ const sh3 = 128 + 192;
319
+ const isoNameOff = names.indexOf(Buffer.from(".isolate\0"));
320
+ bytes.writeUInt32LE(isoNameOff, sh3);
321
+ bytes.writeUInt32LE(1, sh3 + 4);
322
+ bytes.writeBigUInt64LE(3n, sh3 + 8);
323
+ bytes.writeBigUInt64LE(isoAddr, sh3 + 16);
324
+ bytes.writeBigUInt64LE(BigInt(isoOff), sh3 + 24);
325
+ bytes.writeBigUInt64LE(BigInt(ISO_SIZE), sh3 + 32);
326
+ const sh4 = 128 + 256;
327
+ const dynsymNameOff = names.indexOf(Buffer.from(".dynsym\0"));
328
+ bytes.writeUInt32LE(dynsymNameOff, sh4);
329
+ bytes.writeUInt32LE(11, sh4 + 4);
330
+ bytes.writeBigUInt64LE(2n, sh4 + 8);
331
+ bytes.writeBigUInt64LE(0x400000n + BigInt(dynsymOff), sh4 + 16);
332
+ bytes.writeBigUInt64LE(BigInt(dynsymOff), sh4 + 24);
333
+ bytes.writeBigUInt64LE(BigInt(dynsymSize), sh4 + 32);
334
+ bytes.writeUInt32LE(5, sh4 + 40);
335
+ bytes.writeBigUInt64LE(24n, sh4 + 48);
336
+ const sh5 = 128 + 320;
337
+ const dynstrNameOff = names.indexOf(Buffer.from(".dynstr\0"));
338
+ bytes.writeUInt32LE(dynstrNameOff, sh5);
339
+ bytes.writeUInt32LE(3, sh5 + 4);
340
+ bytes.writeBigUInt64LE(2n, sh5 + 8);
341
+ bytes.writeBigUInt64LE(0x400000n + BigInt(dynstrOff), sh5 + 16);
342
+ bytes.writeBigUInt64LE(BigInt(dynstrOff), sh5 + 24);
343
+ bytes.writeBigUInt64LE(BigInt(dynstr.length), sh5 + 32);
344
+ return bytes;
345
+ }
346
+ //# sourceMappingURL=go-flutter-exhaustion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-flutter-exhaustion.js","sourceRoot":"","sources":["../../../src/shields/formats/go-flutter-exhaustion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ProtectionIntensity } from "../../core/types.js";
2
+ export interface GpuPtxInspection {
3
+ readonly looksLikePtx: boolean;
4
+ readonly entryCount: number;
5
+ readonly blaProtected: boolean;
6
+ }
7
+ export declare function inspectGpuPtx(text: string): GpuPtxInspection;
8
+ /**
9
+ * Protects NVIDIA PTX text modules by appending decoy `.entry` kernels and
10
+ * canary/diagnostic comments. Preserves the original module body verbatim so
11
+ * existing kernels stay byte-identical (runtime-equivalent).
12
+ *
13
+ * SPIR-V / fatbinary / CUDA object mutation is intentionally NOT attempted —
14
+ * those containers have brittle structural hashes; corrupting them would violate
15
+ * the red line. Firmware images are likewise skipped (see module doc below).
16
+ */
17
+ export declare function protectGpuPtxText(input: string, options?: {
18
+ readonly intensity?: ProtectionIntensity;
19
+ readonly seed?: string;
20
+ }): {
21
+ readonly text: string;
22
+ readonly entriesInjected: number;
23
+ readonly canaryTokensEmbedded: number;
24
+ readonly diagnosticsEmbedded: number;
25
+ };
26
+ /**
27
+ * Firmware images (raw flash dumps, U-Boot ITB, Android boot.img, etc.) are
28
+ * NOT hardened by BLA: generic mutation cannot preserve boot signatures,
29
+ * CRC/header integrity, or device-specific layouts without a per-vendor
30
+ * parser. Prefer leaving firmware untouched rather than risking bricking.
31
+ */
32
+ export declare const FIRMWARE_HARDENING_SKIP_REASON = "Firmware images are skipped: safe generic mutation would break boot signatures, CRCs, or vendor headers. No BLA firmware shield is offered.";
33
+ /**
34
+ * SPIR-V modules, CUDA fatbinaries, and AMD GPU code objects are skipped:
35
+ * their containers carry structural hashes / embedded ELF slices where a
36
+ * generic trailer would break loader validation. PTX text remains the only
37
+ * safely append-only GPU surface BLA hardens.
38
+ */
39
+ export declare const GPU_OBJECT_HARDENING_SKIP_REASON = "SPIR-V / CUDA fatbinary / AMD GPU objects are skipped: brittle structural hashes and embedded ELF slices make generic mutation unsafe. Only PTX text is hardened.";
40
+ //# sourceMappingURL=gpu-ptx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-ptx.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/gpu-ptx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAU5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACnB,GACL;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC,CAuCA;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,gJACoG,CAAC;AAEhJ;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,sKACwH,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { SeededPrng } from "../../core/prng.js";
2
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
3
+ export function inspectGpuPtx(text) {
4
+ const looksLikePtx = /\.version\s+\d/.test(text) &&
5
+ (/\.entry\s+\w/.test(text) || /\.target\s+sm_/.test(text));
6
+ const entryCount = (text.match(/\.entry\s+/g) ?? []).length;
7
+ return {
8
+ looksLikePtx,
9
+ entryCount,
10
+ blaProtected: text.includes("[BLA-PTX-SHIELD]"),
11
+ };
12
+ }
13
+ /**
14
+ * Protects NVIDIA PTX text modules by appending decoy `.entry` kernels and
15
+ * canary/diagnostic comments. Preserves the original module body verbatim so
16
+ * existing kernels stay byte-identical (runtime-equivalent).
17
+ *
18
+ * SPIR-V / fatbinary / CUDA object mutation is intentionally NOT attempted —
19
+ * those containers have brittle structural hashes; corrupting them would violate
20
+ * the red line. Firmware images are likewise skipped (see module doc below).
21
+ */
22
+ export function protectGpuPtxText(input, options = {}) {
23
+ const intensity = options.intensity ?? "balanced";
24
+ const prng = new SeededPrng(options.seed ?? "bla-ptx-shield");
25
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
26
+ const base = input.trim().length > 0
27
+ ? input.replace(/\s*$/, "\n")
28
+ : `.version 7.5\n.target sm_70\n.address_size 64\n\n`;
29
+ const entryTarget = intensity === "bankrupt" ? 128 : intensity === "maximum" ? 48 : 16;
30
+ const parts = [
31
+ base,
32
+ `\n// [BLA-PTX-SHIELD] Counter-REA GPU exhaustion trailer\n`,
33
+ ];
34
+ for (const rec of deception.textRecords.slice(0, 8)) {
35
+ parts.push(`// DIAG: ${rec.replace(/\n/g, " ")}\n`);
36
+ }
37
+ for (let i = 0; i < entryTarget; i++) {
38
+ const name = `bla_tarpit_kernel_${i}_${prng.hex(4)}`;
39
+ parts.push(`.visible .entry ${name}(.param .u64 ${name}_param_0)\n`, `{\n`, ` .reg .b64 %rd<2>;\n`, ` ld.param.u64 %rd1, [${name}_param_0];\n`, ` // canary=${prng.hex(8)}\n`, ` ret;\n`, `}\n\n`);
40
+ }
41
+ return {
42
+ text: parts.join(""),
43
+ entriesInjected: entryTarget,
44
+ canaryTokensEmbedded: deception.canary.syntheticCanaryTokens.length,
45
+ diagnosticsEmbedded: deception.diagnostics.diagnosticsInjected.length,
46
+ };
47
+ }
48
+ /**
49
+ * Firmware images (raw flash dumps, U-Boot ITB, Android boot.img, etc.) are
50
+ * NOT hardened by BLA: generic mutation cannot preserve boot signatures,
51
+ * CRC/header integrity, or device-specific layouts without a per-vendor
52
+ * parser. Prefer leaving firmware untouched rather than risking bricking.
53
+ */
54
+ export const FIRMWARE_HARDENING_SKIP_REASON = "Firmware images are skipped: safe generic mutation would break boot signatures, CRCs, or vendor headers. No BLA firmware shield is offered.";
55
+ /**
56
+ * SPIR-V modules, CUDA fatbinaries, and AMD GPU code objects are skipped:
57
+ * their containers carry structural hashes / embedded ELF slices where a
58
+ * generic trailer would break loader validation. PTX text remains the only
59
+ * safely append-only GPU surface BLA hardens.
60
+ */
61
+ export const GPU_OBJECT_HARDENING_SKIP_REASON = "SPIR-V / CUDA fatbinary / AMD GPU objects are skipped: brittle structural hashes and embedded ELF slices make generic mutation unsafe. Only PTX text is hardened.";
62
+ //# sourceMappingURL=gpu-ptx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-ptx.js","sourceRoot":"","sources":["../../../src/shields/formats/gpu-ptx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AAQnF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,YAAY,GAChB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC5D,OAAO;QACL,YAAY;QACZ,UAAU;QACV,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAChD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,UAGI,EAAE;IAON,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,gCAAgC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEpE,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QAC7B,CAAC,CAAC,mDAAmD,CAAC;IAE1D,MAAM,WAAW,GACf,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAErE,MAAM,KAAK,GAAa;QACtB,IAAI;QACJ,4DAA4D;KAC7D,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CACR,mBAAmB,IAAI,gBAAgB,IAAI,aAAa,EACxD,KAAK,EACL,uBAAuB,EACvB,yBAAyB,IAAI,cAAc,EAC3C,eAAe,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAC9B,UAAU,EACV,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,eAAe,EAAE,WAAW;QAC5B,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM;QACnE,mBAAmB,EAAE,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM;KACtE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GACzC,6IAA6I,CAAC;AAEhJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C,mKAAmK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/headers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,MAAM,oBAAoB,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL,mBAAmB,CAgKrB"}
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/headers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,MAAM,oBAAoB,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL,mBAAmB,CAsNrB"}
@@ -14,9 +14,14 @@ export function emitCompileTimeNativeHeader(language, options = {}) {
14
14
  const chaffPayloads = generateChaffPayloads(prng, intensity);
15
15
  const decoyCount = intensity === "stealth" ? 6 : intensity === "balanced" ? 12 : 20;
16
16
  if (language === "c") {
17
+ const rustcAnchorStem = "rustc_path_anchor";
18
+ const shadowHeapName = "shadow_heap_slots";
19
+ const tarpitStem = "enclave_tarpit_fn";
20
+ const dataTableCount = chaffPayloads.length * 2 + 1;
17
21
  const lines = [
18
22
  "/* ==========================================================================",
19
23
  " * BLA-SHIELD: Adversarial Defense Header for C/C++ Native Binaries",
24
+ " * Compatible with GCC (__GNUC__), Clang (__clang__), and MSVC (_MSC_VER / cl.exe)",
20
25
  " * Counter-REA Native Decompilation Tarpit & Read-Only Section Shield",
21
26
  " * ========================================================================== */",
22
27
  "#ifndef BLA_SHIELD_H",
@@ -24,42 +29,73 @@ export function emitCompileTimeNativeHeader(language, options = {}) {
24
29
  "#include <stdint.h>",
25
30
  "#include <stddef.h>",
26
31
  "",
27
- "#if defined(__GNUC__) || defined(__clang__)",
28
- "#define BLA_USED __attribute__((used, noinline))",
32
+ "#ifdef __cplusplus",
33
+ 'extern "C" {',
34
+ "#endif",
35
+ "",
36
+ "#if defined(_MSC_VER) && !defined(__clang__)",
37
+ "#pragma warning(push)",
38
+ "#pragma warning(disable: 4100 4127 4189 4505)",
39
+ "#define BLA_USED",
40
+ "#define BLA_NOINLINE __declspec(noinline)",
41
+ "#elif defined(__GNUC__) || defined(__clang__)",
42
+ "#define BLA_USED __attribute__((used))",
43
+ "#define BLA_NOINLINE __attribute__((used, noinline))",
29
44
  "#else",
30
45
  "#define BLA_USED",
46
+ "#define BLA_NOINLINE",
31
47
  "#endif",
32
48
  "",
33
49
  "/* Architectural Chaff & Enclave Delegation Manifests */",
34
50
  ];
51
+ const dataTableEntries = [];
35
52
  chaffPayloads.forEach((p, idx) => {
36
53
  lines.push(`static const char ${p.symbolName}[] BLA_USED = ${JSON.stringify(p.rawText)};`);
54
+ dataTableEntries.push(`(const void*)${p.symbolName}`);
37
55
  const hash = idx.toString(16).padStart(8, "0") + prng.hex(32);
38
- lines.push(`static const char _bla_rustc_anchor_${idx}[] BLA_USED = "/rustc/${hash}/library/core/src/enclave.rs";`);
56
+ lines.push(`static const char ${rustcAnchorStem}_${idx}[] BLA_USED = "/rustc/${hash}/library/core/src/enclave.rs";`);
57
+ dataTableEntries.push(`(const void*)${rustcAnchorStem}_${idx}`);
39
58
  });
59
+ // Mutable .data shadow heap slots to defeat GDB/Rizin/Frida/WinDbg before/after memory diffing
60
+ const slotInit = Array.from({ length: 32 }, () => `0x${prng.hex(8)}u`).join(", ");
61
+ lines.push(`static volatile uint32_t ${shadowHeapName}[32] BLA_USED = { ${slotInit} };`);
62
+ dataTableEntries.push(`(const void*)${shadowHeapName}`);
63
+ lines.push("");
40
64
  // Forward declarations for mutual cross-references (Fake XRefs in Ghidra/IDA)
41
65
  for (let i = 0; i < decoyCount; i++) {
42
- lines.push(`BLA_USED static uint32_t _bla_enclave_tarpit_${i}(uint32_t seed, int depth);`);
66
+ lines.push(`BLA_NOINLINE static uint32_t ${tarpitStem}_${i}(uint32_t seed, int depth);`);
43
67
  }
44
68
  lines.push("");
69
+ // Keep-tables prevent MSVC (/O2 /GL + link.exe /OPT:REF), Clang, and GCC from stripping static symbols
70
+ lines.push(`typedef uint32_t (*enclave_tarpit_fn_t)(uint32_t, int);`);
71
+ lines.push(`static const void* const enclave_keep_data_table[${dataTableCount}] BLA_USED = { ${dataTableEntries.join(", ")} };`);
72
+ const fnTableEntries = Array.from({ length: decoyCount }, (_, i) => `&${tarpitStem}_${i}`).join(", ");
73
+ lines.push(`static const enclave_tarpit_fn_t enclave_keep_fn_table[${decoyCount}] BLA_USED = { ${fnTableEntries} };`);
74
+ lines.push("");
45
75
  for (let i = 0; i < decoyCount; i++) {
46
76
  const next1 = (i + 1) % decoyCount;
47
77
  const next2 = (i + 3) % decoyCount;
48
78
  const k = prng.nextInt(0x1000, 0xffff);
49
79
  const chaffSym = chaffPayloads[i % chaffPayloads.length].symbolName;
50
- lines.push(`BLA_USED static uint32_t _bla_enclave_tarpit_${i}(uint32_t seed, int depth) {`);
51
- lines.push(` uint32_t acc = seed ^ 0x${k.toString(16)}u ^ (uint32_t)${chaffSym}[0];`);
80
+ lines.push(`BLA_NOINLINE static uint32_t ${tarpitStem}_${i}(uint32_t seed, int depth) {`);
81
+ lines.push(` const char* _anchor_str = (const char*)enclave_keep_data_table[(seed + ${i}u) % ${dataTableCount}u];`);
82
+ lines.push(` uint32_t acc = seed ^ 0x${k.toString(16)}u ^ (uint32_t)(unsigned char)${chaffSym}[0] ^ (uint32_t)(unsigned char)_anchor_str[0];`);
52
83
  lines.push(` for (int r = 0; r < 4; ++r) {`);
53
84
  lines.push(` acc = (acc * 0x9E3779B9u) ^ (acc >> 13) ^ (uint32_t)r;`);
85
+ lines.push(` ${shadowHeapName}[(${i} * 4 + r) & 31] ^= acc;`);
54
86
  lines.push(` }`);
55
87
  lines.push(` if (depth > 0 && ((7u * (seed | 3u) * (seed | 3u) - 1u) == (seed ^ 5u) * (seed ^ 5u))) {`);
56
- lines.push(` return _bla_enclave_tarpit_${next1}(acc, depth - 1) ^ _bla_enclave_tarpit_${next2}(acc ^ 0x5Au, depth - 1);`);
88
+ lines.push(` enclave_tarpit_fn_t _fn_ptr = enclave_keep_fn_table[(seed ^ (uint32_t)depth) % ${decoyCount}u];`);
89
+ lines.push(` return ${tarpitStem}_${next1}(acc, depth - 1) ^ ${tarpitStem}_${next2}(acc ^ 0x5Au, depth - 1) ^ _fn_ptr(acc, depth - 1);`);
57
90
  lines.push(` }`);
58
91
  lines.push(` return acc;`);
59
92
  lines.push(`}`);
60
93
  }
61
94
  lines.push("");
62
- lines.push(`#define BLA_SHIELD_ANCHOR(x) (_bla_enclave_tarpit_0((uint32_t)(x), 0))`);
95
+ lines.push(`#define BLA_SHIELD_ANCHOR(x) (${tarpitStem}_0((uint32_t)(x), 0))`);
96
+ lines.push("");
97
+ lines.push("#if defined(_MSC_VER) && !defined(__clang__)", "#pragma warning(pop)", "#endif");
98
+ lines.push("#ifdef __cplusplus", "}", "#endif");
63
99
  lines.push("#endif /* BLA_SHIELD_H */");
64
100
  return {
65
101
  language: "c",
@@ -95,13 +131,13 @@ export function emitCompileTimeNativeHeader(language, options = {}) {
95
131
  const next2 = (i + 2) % decoyCount;
96
132
  const k = prng.nextInt(0x1000, 0xffff);
97
133
  lines.push(`#[inline(never)]`);
98
- lines.push(`pub fn bla_enclave_tarpit_${i}(seed: u32, depth: u32) -> u32 {`);
134
+ lines.push(`pub fn enclave_tarpit_${i}(seed: u32, depth: u32) -> u32 {`);
99
135
  lines.push(` let mut acc = seed ^ 0x${k.toString(16)};`);
100
136
  lines.push(` for r in 0..4u32 {`);
101
137
  lines.push(` acc = acc.wrapping_mul(0x9E37_79B9) ^ (acc >> 13) ^ r;`);
102
138
  lines.push(` }`);
103
139
  lines.push(` if depth > 0 && ((seed | 1).wrapping_mul(seed | 2) & 1) == 1 {`);
104
- lines.push(` return bla_enclave_tarpit_${next1}(acc, depth - 1) ^ bla_enclave_tarpit_${next2}(acc ^ 0x5A, depth - 1);`);
140
+ lines.push(` return enclave_tarpit_${next1}(acc, depth - 1) ^ enclave_tarpit_${next2}(acc ^ 0x5A, depth - 1);`);
105
141
  lines.push(` }`);
106
142
  lines.push(` std::hint::black_box(acc)`);
107
143
  lines.push(`}`);
@@ -115,11 +151,14 @@ export function emitCompileTimeNativeHeader(language, options = {}) {
115
151
  };
116
152
  }
117
153
  // Go (`bla_shield.go`)
154
+ const goSlots = Array.from({ length: 16 }, () => `0x${prng.hex(8)}`).join(", ");
118
155
  const lines = [
119
156
  "// Code generated by BLA-SHIELD. DO NOT EDIT.",
120
157
  "package main",
121
158
  "",
122
- "var BlaEnclaveManifests = []string{",
159
+ `var ShadowHeapSlots = [16]uint32{${goSlots}}`,
160
+ "",
161
+ "var EnclaveManifests = []string{",
123
162
  ];
124
163
  for (const p of chaffPayloads) {
125
164
  lines.push(`\t${JSON.stringify(p.rawText)},`);
@@ -131,13 +170,14 @@ export function emitCompileTimeNativeHeader(language, options = {}) {
131
170
  const next2 = (i + 2) % decoyCount;
132
171
  const k = prng.nextInt(0x1000, 0xffff);
133
172
  lines.push(`//go:noinline`);
134
- lines.push(`func BlaEnclaveTarpit${i}(seed uint32, depth int) uint32 {`);
135
- lines.push(`\tacc := seed ^ 0x${k.toString(16)} ^ uint32(len(BlaEnclaveManifests[0]))`);
173
+ lines.push(`func EnclaveTarpit${i}(seed uint32, depth int) uint32 {`);
174
+ lines.push(`\tacc := seed ^ 0x${k.toString(16)} ^ uint32(len(EnclaveManifests[0]))`);
136
175
  lines.push(`\tfor r := uint32(0); r < 4; r++ {`);
137
176
  lines.push(`\t\tacc = (acc * 0x9E3779B9) ^ (acc >> 13) ^ r`);
177
+ lines.push(`\t\tShadowHeapSlots[(${i}*4+int(r))&15] ^= acc`);
138
178
  lines.push(`\t}`);
139
179
  lines.push(`\tif depth > 0 && (((seed|1)*((seed|1)+1))&1) == 1 {`);
140
- lines.push(`\t\treturn BlaEnclaveTarpit${next1}(acc, depth-1) ^ BlaEnclaveTarpit${next2}(acc^0x5A, depth-1)`);
180
+ lines.push(`\t\treturn EnclaveTarpit${next1}(acc, depth-1) ^ EnclaveTarpit${next2}(acc^0x5A, depth-1)`);
141
181
  lines.push(`\t}`);
142
182
  lines.push(`\treturn acc`);
143
183
  lines.push(`}`);