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
@@ -1,4 +1,11 @@
1
1
  import { REA_INTERNAL_LIMITS } from "../../identity.js";
2
+ import { SeededPrng } from "../../core/prng.js";
3
+ export class UnsupportedElectronFuseContextError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "UnsupportedElectronFuseContextError";
7
+ }
8
+ }
2
9
  /**
3
10
  * Electron V1 Fuse Wire constants (`src/domain/electron/electronFuses.ts` in `morluto/rea`).
4
11
  */
@@ -7,12 +14,62 @@ export const ELECTRON_FUSE_STATE = {
7
14
  DISABLED: 0x30, // '0'
8
15
  ENABLED: 0x31, // '1'
9
16
  REMOVED: 0x72, // 'r'
17
+ DECOY: 0x39, // '9' (BLA decoy sentinel wire marker)
10
18
  };
19
+ export const ELECTRON_FUSE_NAMES = [
20
+ "RunAsNode",
21
+ "EnableCookieEncryption",
22
+ "EnableNodeOptionsEnvironmentVariable",
23
+ "EnableNodeCliInspectArguments",
24
+ "EnableEmbeddedAsarIntegrityValidation",
25
+ "OnlyLoadAppFromAsar",
26
+ "LoadBrowserProcessSpecificV8Snapshot",
27
+ "GrantFileProtocolExtraPrivileges",
28
+ ];
29
+ function decodeFuseByte(byte) {
30
+ if (byte === ELECTRON_FUSE_STATE.DISABLED)
31
+ return "disabled";
32
+ if (byte === ELECTRON_FUSE_STATE.ENABLED)
33
+ return "enabled";
34
+ if (byte === ELECTRON_FUSE_STATE.REMOVED)
35
+ return "removed";
36
+ return "unknown";
37
+ }
38
+ function isValidWireByte(byte) {
39
+ return (byte === ELECTRON_FUSE_STATE.DISABLED ||
40
+ byte === ELECTRON_FUSE_STATE.ENABLED ||
41
+ byte === ELECTRON_FUSE_STATE.REMOVED ||
42
+ byte === ELECTRON_FUSE_STATE.DECOY);
43
+ }
44
+ export function isSupportedNativeExecutableContainer(bytes) {
45
+ if (bytes.length >= 20 &&
46
+ bytes[0] === 0x7f &&
47
+ bytes[1] === 0x45 &&
48
+ bytes[2] === 0x4c &&
49
+ bytes[3] === 0x46) {
50
+ return true;
51
+ }
52
+ if (bytes.length >= 8) {
53
+ const magicBE = bytes.readUInt32BE(0);
54
+ if (magicBE === 0xfeedfacf ||
55
+ magicBE === 0xcffaedfe ||
56
+ magicBE === 0xfeedface ||
57
+ magicBE === 0xcefaedfe ||
58
+ magicBE === 0xcafebabe) {
59
+ return true;
60
+ }
61
+ if (bytes[0] === 0x4d && bytes[1] === 0x5a) {
62
+ return true;
63
+ }
64
+ }
65
+ return false;
66
+ }
11
67
  /**
12
68
  * Inspects a binary buffer (ELF / Mach-O / PE) for Electron Fuse sentinels
13
- * (`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`), matching REA's `ElectronFuseReader.ts`.
69
+ * (`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`), matching REA's `ElectronFuseReader.ts`
70
+ * while distinguishing verified V1 fuse blocks from unsupported/truncated/ambiguous wires.
14
71
  */
15
- export function inspectElectronFusesInBuffer(bytes) {
72
+ export function inspectElectronFusesBuffer(bytes) {
16
73
  const offsets = [];
17
74
  let from = 0;
18
75
  while (from <= bytes.length - ELECTRON_FUSE_SENTINEL_BYTES.length) {
@@ -24,94 +81,269 @@ export function inspectElectronFusesInBuffer(bytes) {
24
81
  if (offsets.length >= 128)
25
82
  break;
26
83
  }
27
- let runAsNodeEnabled = false;
28
- let nodeCliInspectEnabled = false;
29
- let nodeOptionsEnabled = false;
30
- let asarIntegrityEnforced = false;
31
- let onlyLoadFromAsarEnforced = false;
32
- if (offsets.length > 0) {
33
- const firstWireStart = offsets[0] + ELECTRON_FUSE_SENTINEL_BYTES.length;
34
- if (firstWireStart + 8 <= bytes.length) {
35
- const version = bytes[firstWireStart];
36
- const len = bytes[firstWireStart + 1] ?? 0;
37
- if (version === 1 && len >= 6) {
38
- const fuses = bytes.subarray(firstWireStart + 2, firstWireStart + 2 + len);
39
- runAsNodeEnabled = fuses[0] === ELECTRON_FUSE_STATE.ENABLED;
40
- nodeOptionsEnabled = fuses[2] === ELECTRON_FUSE_STATE.ENABLED;
41
- nodeCliInspectEnabled = fuses[3] === ELECTRON_FUSE_STATE.ENABLED;
42
- asarIntegrityEnforced = fuses[4] === ELECTRON_FUSE_STATE.ENABLED;
43
- onlyLoadFromAsarEnforced = fuses[5] === ELECTRON_FUSE_STATE.ENABLED;
84
+ const exceedsReaSentinelLimit = offsets.length > REA_INTERNAL_LIMITS.ELECTRON_MAX_SENTINELS_PER_SLICE;
85
+ const makeEmptyResult = (status, diagnostic) => ({
86
+ status,
87
+ sentinelCount: offsets.length,
88
+ sentinelOffsets: offsets,
89
+ realFuseOffset: -1,
90
+ fuseVersion: 0,
91
+ fuseWireLength: 0,
92
+ fuses: {},
93
+ runAsNodeEnabled: false,
94
+ nodeCliInspectEnabled: false,
95
+ nodeOptionsEnabled: false,
96
+ asarIntegrityEnforced: false,
97
+ onlyLoadFromAsarEnforced: false,
98
+ exceedsReaSentinelLimit,
99
+ hardened: false,
100
+ ...(diagnostic !== undefined ? { diagnostic } : {}),
101
+ });
102
+ if (offsets.length === 0) {
103
+ return makeEmptyResult("absent");
104
+ }
105
+ const realCandidates = [];
106
+ let unsupportedReason;
107
+ for (const off of offsets) {
108
+ const wireStart = off + ELECTRON_FUSE_SENTINEL_BYTES.length;
109
+ if (wireStart + 2 > bytes.length) {
110
+ return makeEmptyResult("unsupported", "truncated fuse header");
111
+ }
112
+ const version = bytes[wireStart];
113
+ const len = bytes[wireStart + 1];
114
+ if (wireStart + 2 + len > bytes.length) {
115
+ return makeEmptyResult("unsupported", "truncated fuse wire");
116
+ }
117
+ if (version !== 1) {
118
+ unsupportedReason = `unsupported fuse version ${version}`;
119
+ continue;
120
+ }
121
+ if (len < 6) {
122
+ unsupportedReason = `fuse wire length ${len} shorter than minimum 6`;
123
+ continue;
124
+ }
125
+ const wire = bytes.subarray(wireStart + 2, wireStart + 2 + len);
126
+ for (let i = 0; i < wire.length; i++) {
127
+ if (!isValidWireByte(wire[i])) {
128
+ return makeEmptyResult("unsupported", "invalid fuse wire byte");
44
129
  }
45
130
  }
131
+ // BLA decoy sentinels contain 0x39 ('9') wire markers
132
+ if (wire.includes(ELECTRON_FUSE_STATE.DECOY)) {
133
+ continue;
134
+ }
135
+ realCandidates.push({
136
+ offset: off,
137
+ version,
138
+ len,
139
+ wire,
140
+ });
141
+ }
142
+ if (realCandidates.length > 1) {
143
+ return makeEmptyResult("ambiguous", "multiple real fuse blocks found");
46
144
  }
145
+ if (realCandidates.length === 0) {
146
+ return makeEmptyResult("unsupported", unsupportedReason ?? "no verified real V1 fuse block found");
147
+ }
148
+ const real = realCandidates[0];
149
+ const fuses = {};
150
+ const maxNamed = Math.min(real.len, ELECTRON_FUSE_NAMES.length);
151
+ for (let i = 0; i < maxNamed; i++) {
152
+ const fuseName = ELECTRON_FUSE_NAMES[i];
153
+ fuses[fuseName] = decodeFuseByte(real.wire[i]);
154
+ }
155
+ const runAsNodeEnabled = real.wire[0] === ELECTRON_FUSE_STATE.ENABLED;
156
+ const cookieEncryptionEnabled = real.wire[1] === ELECTRON_FUSE_STATE.ENABLED;
157
+ const nodeOptionsEnabled = real.wire[2] === ELECTRON_FUSE_STATE.ENABLED;
158
+ const nodeCliInspectEnabled = real.wire[3] === ELECTRON_FUSE_STATE.ENABLED;
159
+ const asarIntegrityEnforced = real.wire[4] === ELECTRON_FUSE_STATE.ENABLED;
160
+ const onlyLoadFromAsarEnforced = real.wire[5] === ELECTRON_FUSE_STATE.ENABLED;
161
+ const hardened = !runAsNodeEnabled &&
162
+ cookieEncryptionEnabled &&
163
+ !nodeOptionsEnabled &&
164
+ !nodeCliInspectEnabled &&
165
+ asarIntegrityEnforced &&
166
+ onlyLoadFromAsarEnforced;
47
167
  return {
168
+ status: "verified",
48
169
  sentinelCount: offsets.length,
49
170
  sentinelOffsets: offsets,
171
+ realFuseOffset: real.offset,
172
+ fuseVersion: real.version,
173
+ fuseWireLength: real.len,
174
+ fuses,
50
175
  runAsNodeEnabled,
51
176
  nodeCliInspectEnabled,
52
177
  nodeOptionsEnabled,
53
178
  asarIntegrityEnforced,
54
179
  onlyLoadFromAsarEnforced,
55
- exceedsReaSentinelLimit: offsets.length > REA_INTERNAL_LIMITS.ELECTRON_MAX_SENTINELS_PER_SLICE,
180
+ exceedsReaSentinelLimit,
181
+ hardened,
56
182
  };
57
183
  }
184
+ export const inspectElectronFusesInBuffer = inspectElectronFusesBuffer;
58
185
  /**
59
- * Hardens any real Electron Fuse V1 wire in-place (disabling `RunAsNode`,
60
- * `EnableNodeOptionsEnvironmentVariable`, and `EnableNodeCliInspectArguments`
61
- * while enabling `EnableCookieEncryption`, `EnableEmbeddedAsarIntegrityValidation`,
62
- * and `OnlyLoadAppFromAsar`) AND builds a 34-sentinel overflow trailer that trips
63
- * REA's `ELECTRON_FUSE_LIMITS.maximumSentinelsPerSlice = 32` (`ElectronFuseReader.ts:381`)!
186
+ * Builds 34 decoy sentinel records (`> maximumSentinelsPerSlice = 32`) tagged with
187
+ * BLA's `0x39` (`'9'`) decoy marker so `inspectElectronFusesBuffer` distinguishes
188
+ * them from real V1 fuse blocks while tripping REA's sentinel slice limit.
64
189
  */
65
- export function hardenAndOverflowElectronFuses(bytes, prng) {
66
- let patchedInPlaceCount = 0;
67
- let from = 0;
68
- while (from <= bytes.length - ELECTRON_FUSE_SENTINEL_BYTES.length) {
69
- const found = bytes.indexOf(ELECTRON_FUSE_SENTINEL_BYTES, from);
70
- if (found < 0)
71
- break;
72
- const wireStart = found + ELECTRON_FUSE_SENTINEL_BYTES.length;
73
- if (wireStart + 8 <= bytes.length && bytes[wireStart] === 1 && (bytes[wireStart + 1] ?? 0) >= 6) {
74
- // Harden real V1 fuse wire in-place:
75
- // [0] RunAsNode = '0' (disabled)
76
- // [1] EnableCookieEncryption = '1' (enabled)
77
- // [2] EnableNodeOptionsEnvironmentVariable = '0' (disabled)
78
- // [3] EnableNodeCliInspectArguments = '0' (disabled)
79
- // [4] EnableEmbeddedAsarIntegrityValidation = '1' (enabled)
80
- // [5] OnlyLoadAppFromAsar = '1' (enabled)
81
- bytes[wireStart + 2 + 0] = ELECTRON_FUSE_STATE.DISABLED;
82
- bytes[wireStart + 2 + 1] = ELECTRON_FUSE_STATE.ENABLED;
83
- bytes[wireStart + 2 + 2] = ELECTRON_FUSE_STATE.DISABLED;
84
- bytes[wireStart + 2 + 3] = ELECTRON_FUSE_STATE.DISABLED;
85
- bytes[wireStart + 2 + 4] = ELECTRON_FUSE_STATE.ENABLED;
86
- bytes[wireStart + 2 + 5] = ELECTRON_FUSE_STATE.ENABLED;
87
- patchedInPlaceCount++;
88
- }
89
- from = found + 1;
90
- }
91
- // Build 34 decoy sentinel wires (> REA's `maximumSentinelsPerSlice = 32`)
92
- const decoyCount = 34;
190
+ export function buildDecoyElectronFuseSentinels(prng, decoyCount = 34) {
93
191
  const wires = [];
94
192
  for (let i = 0; i < decoyCount; i++) {
95
193
  const wireHeader = Buffer.from([
96
194
  0x01, // wire_version = 1
97
- 0x09, // declared_length = 9 fuses
98
- ELECTRON_FUSE_STATE.DISABLED, // [0] RunAsNode = disabled
99
- ELECTRON_FUSE_STATE.ENABLED, // [1] EnableCookieEncryption = enabled
100
- ELECTRON_FUSE_STATE.DISABLED, // [2] EnableNodeOptionsEnvironmentVariable = disabled
101
- ELECTRON_FUSE_STATE.DISABLED, // [3] EnableNodeCliInspectArguments = disabled
102
- ELECTRON_FUSE_STATE.ENABLED, // [4] EnableEmbeddedAsarIntegrityValidation = enabled
103
- ELECTRON_FUSE_STATE.ENABLED, // [5] OnlyLoadAppFromAsar = enabled
104
- ELECTRON_FUSE_STATE.ENABLED, // [6] LoadBrowserProcessSpecificV8Snapshot = enabled
105
- ELECTRON_FUSE_STATE.DISABLED, // [7] GrantFileProtocolExtraPrivileges = disabled
106
- prng.nextInt(0, 1) === 0 ? ELECTRON_FUSE_STATE.ENABLED : ELECTRON_FUSE_STATE.REMOVED, // [8] WasmTrapHandlers
107
- 0x00,
195
+ 0x08, // declared_length = 8
196
+ ELECTRON_FUSE_STATE.DISABLED,
197
+ ELECTRON_FUSE_STATE.ENABLED,
198
+ ELECTRON_FUSE_STATE.DISABLED,
199
+ ELECTRON_FUSE_STATE.DISABLED,
200
+ ELECTRON_FUSE_STATE.ENABLED,
201
+ ELECTRON_FUSE_STATE.ENABLED,
202
+ ELECTRON_FUSE_STATE.DECOY,
203
+ prng.nextInt(0, 1) === 0
204
+ ? ELECTRON_FUSE_STATE.DECOY
205
+ : ELECTRON_FUSE_STATE.REMOVED,
108
206
  ]);
109
207
  wires.push(ELECTRON_FUSE_SENTINEL_BYTES, wireHeader);
110
208
  }
209
+ return Buffer.concat(wires);
210
+ }
211
+ /**
212
+ * Hardens a single verified Electron Fuse V1 wire in-place (if present and unambiguous)
213
+ * AND builds a 34-sentinel overflow trailer that trips REA's
214
+ * `ELECTRON_FUSE_LIMITS.maximumSentinelsPerSlice = 32`.
215
+ */
216
+ export function hardenAndOverflowElectronFuses(bytes, prng) {
217
+ let patchedInPlaceCount = 0;
218
+ const inspection = inspectElectronFusesBuffer(bytes);
219
+ if (inspection.status === "verified" && inspection.realFuseOffset >= 0) {
220
+ const wireStart = inspection.realFuseOffset + ELECTRON_FUSE_SENTINEL_BYTES.length;
221
+ bytes[wireStart + 2 + 0] = ELECTRON_FUSE_STATE.DISABLED;
222
+ bytes[wireStart + 2 + 1] = ELECTRON_FUSE_STATE.ENABLED;
223
+ bytes[wireStart + 2 + 2] = ELECTRON_FUSE_STATE.DISABLED;
224
+ bytes[wireStart + 2 + 3] = ELECTRON_FUSE_STATE.DISABLED;
225
+ bytes[wireStart + 2 + 4] = ELECTRON_FUSE_STATE.ENABLED;
226
+ bytes[wireStart + 2 + 5] = ELECTRON_FUSE_STATE.ENABLED;
227
+ patchedInPlaceCount = 1;
228
+ }
229
+ const decoyCount = 34;
230
+ const decoySentinelsBuffer = buildDecoyElectronFuseSentinels(prng, decoyCount);
111
231
  return {
112
232
  patchedInPlaceCount,
113
- decoySentinelsBuffer: Buffer.concat(wires),
233
+ decoySentinelsBuffer,
114
234
  decoySentinelsInjected: decoyCount,
115
235
  };
116
236
  }
237
+ /**
238
+ * Context-verified Electron Fuse hardening entrypoint.
239
+ * Verifies executable container format, unambiguous V1 fuse wire, Electron version,
240
+ * embedded ASAR integrity metadata, and code-signing policy before mutating any fuse bytes.
241
+ */
242
+ export function hardenElectronFusesWithContext(bytes, context) {
243
+ if (!context || typeof context !== "object") {
244
+ throw new UnsupportedElectronFuseContextError("Missing Electron hardening context");
245
+ }
246
+ if (!context.allowRawContainer &&
247
+ !isSupportedNativeExecutableContainer(bytes)) {
248
+ throw new UnsupportedElectronFuseContextError("Target is not a supported native Electron executable container (ELF, Mach-O, or PE)");
249
+ }
250
+ const versionMatch = typeof context.electronVersion === "string"
251
+ ? /^v?(\d+)\.(\d+)\.(\d+)/.exec(context.electronVersion.trim())
252
+ : null;
253
+ if (!versionMatch) {
254
+ throw new UnsupportedElectronFuseContextError(`Invalid or missing Electron version: ${String(context.electronVersion)}`);
255
+ }
256
+ const majorVersion = Number(versionMatch[1]);
257
+ if (!Number.isSafeInteger(majorVersion) || majorVersion < 12) {
258
+ throw new UnsupportedElectronFuseContextError(`Unsupported Electron major version ${majorVersion} (requires Electron >= 12.0.0)`);
259
+ }
260
+ if (context.codeSigningPolicy !== "will-resign" &&
261
+ context.codeSigningPolicy !== "unsigned-local-fixture") {
262
+ throw new UnsupportedElectronFuseContextError(`Unsupported or missing codeSigningPolicy: ${String(context.codeSigningPolicy)}`);
263
+ }
264
+ if (context.hasEmbeddedAsarIntegrity !== true ||
265
+ typeof context.asarHeaderHash !== "string" ||
266
+ !/^[0-9a-fA-F]{64}$/.test(context.asarHeaderHash) ||
267
+ (context.asarPath !== undefined && context.asarPath.trim().length === 0)) {
268
+ throw new UnsupportedElectronFuseContextError("Cannot enable EnableEmbeddedAsarIntegrityValidation or OnlyLoadAppFromAsar without verified embedded ASAR integrity metadata (hasEmbeddedAsarIntegrity=true and 64-hex SHA-256 asarHeaderHash)");
269
+ }
270
+ const inspection = inspectElectronFusesBuffer(bytes);
271
+ if (inspection.status !== "verified" || inspection.realFuseOffset < 0) {
272
+ throw new UnsupportedElectronFuseContextError(`Cannot harden Electron fuses: fuse inspection status is '${inspection.status}'${inspection.diagnostic ? ` (${inspection.diagnostic})` : ""}`);
273
+ }
274
+ const working = Buffer.from(bytes);
275
+ const wireStart = inspection.realFuseOffset + ELECTRON_FUSE_SENTINEL_BYTES.length;
276
+ const desiredPlan = [
277
+ {
278
+ index: 0,
279
+ name: "RunAsNode",
280
+ byte: ELECTRON_FUSE_STATE.DISABLED,
281
+ value: "disabled",
282
+ },
283
+ {
284
+ index: 1,
285
+ name: "EnableCookieEncryption",
286
+ byte: ELECTRON_FUSE_STATE.ENABLED,
287
+ value: "enabled",
288
+ },
289
+ {
290
+ index: 2,
291
+ name: "EnableNodeOptionsEnvironmentVariable",
292
+ byte: ELECTRON_FUSE_STATE.DISABLED,
293
+ value: "disabled",
294
+ },
295
+ {
296
+ index: 3,
297
+ name: "EnableNodeCliInspectArguments",
298
+ byte: ELECTRON_FUSE_STATE.DISABLED,
299
+ value: "disabled",
300
+ },
301
+ {
302
+ index: 4,
303
+ name: "EnableEmbeddedAsarIntegrityValidation",
304
+ byte: ELECTRON_FUSE_STATE.ENABLED,
305
+ value: "enabled",
306
+ },
307
+ {
308
+ index: 5,
309
+ name: "OnlyLoadAppFromAsar",
310
+ byte: ELECTRON_FUSE_STATE.ENABLED,
311
+ value: "enabled",
312
+ },
313
+ ];
314
+ const mutatedMap = {};
315
+ const mutatedNames = [];
316
+ for (const item of desiredPlan) {
317
+ const currentByte = working[wireStart + 2 + item.index];
318
+ const fromVal = decodeFuseByte(currentByte);
319
+ if (currentByte !== item.byte) {
320
+ working[wireStart + 2 + item.index] = item.byte;
321
+ mutatedMap[item.name] = { from: fromVal, to: item.value };
322
+ mutatedNames.push(item.name);
323
+ }
324
+ }
325
+ let outBuffer = working;
326
+ let decoySentinelsInjected = 0;
327
+ if (context.injectDecoySentinelOverflow) {
328
+ const prng = new SeededPrng(context.seed ?? "bla-electron-fuses-v1");
329
+ decoySentinelsInjected = 34;
330
+ const decoyBuf = buildDecoyElectronFuseSentinels(prng, decoySentinelsInjected);
331
+ outBuffer = Buffer.concat([working, decoyBuf]);
332
+ }
333
+ return {
334
+ buffer: outBuffer,
335
+ fusePolicy: {
336
+ status: "hardened",
337
+ fuseVersion: inspection.fuseVersion,
338
+ fuseOffset: inspection.realFuseOffset,
339
+ mutatedFuses: mutatedMap,
340
+ decoySentinelsInjected,
341
+ },
342
+ asarIntegrityStatus: "verified",
343
+ signatureStatus: context.codeSigningPolicy === "will-resign"
344
+ ? "unverified-requires-resign"
345
+ : "unsigned-fixture",
346
+ mutatedFuses: mutatedNames,
347
+ };
348
+ }
117
349
  //# sourceMappingURL=electron-fuses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron-fuses.js","sourceRoot":"","sources":["../../../src/shields/formats/electron-fuses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"electron-fuses.js","sourceRoot":"","sources":["../../../src/shields/formats/electron-fuses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ProtectionIntensity } from "../../core/types.js";
2
+ export interface BeamChunkView {
3
+ readonly name: string;
4
+ readonly payload: Buffer;
5
+ }
6
+ export interface ErlangBeamInspection {
7
+ readonly validMagic: boolean;
8
+ readonly formSize: number;
9
+ readonly chunkCount: number;
10
+ readonly chunkNames: readonly string[];
11
+ readonly atomCount: number;
12
+ readonly blaProtected: boolean;
13
+ }
14
+ export declare function inspectErlangBeam(bytes: Buffer): ErlangBeamInspection;
15
+ /**
16
+ * Protects an Erlang BEAM IFF container:
17
+ * - Preserves original chunk order and non-AtU8 payloads (Code/ExpT/ImpT stay intact).
18
+ * - Appends canary atoms onto AtU8 tables (classic or OTP28+ compact), preserving
19
+ * original atom indices and compact/classic encoding style.
20
+ * - Appends decoy IFF chunks past REA's default `max_chunks` (64) budget.
21
+ */
22
+ export declare function protectErlangBeamBuffer(input: Buffer, options?: {
23
+ readonly intensity?: ProtectionIntensity;
24
+ readonly seed?: string;
25
+ }): {
26
+ readonly buffer: Buffer;
27
+ readonly chunksInjected: number;
28
+ readonly atomsInjected: number;
29
+ readonly canaryTokensEmbedded: number;
30
+ readonly diagnosticsEmbedded: number;
31
+ readonly exceedsDefaultChunkBudget: boolean;
32
+ readonly exceedsDefaultAtomBudget: boolean;
33
+ };
34
+ //# sourceMappingURL=erlang-beam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erlang-beam.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/erlang-beam.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAuC/D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AA6ID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAqBrE;AAUD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,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,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C,CA8HA"}