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 +1 @@
1
- {"version":3,"file":"rea-budget-matrix.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/rea-budget-matrix.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsC;IAC1E;QACE,EAAE,EAAE,yBAAyB;QAC7B,aAAa,EAAE,6DAA6D;QAC5E,YAAY,EAAE,oCAAoC;QAClD,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,cAAc;QACpB,oBAAoB,EAAE,2DAA2D;QACjF,eAAe,EACb,+FAA+F;KAClG;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,6DAA6D;QAC5E,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,uFAAuF;KAC1F;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,8DAA8D;QAC7E,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,gHAAgH;KACnH;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,8DAA8D;QAC7E,YAAY,EAAE,gCAAgC;QAC9C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,kGAAkG;KACrG;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,aAAa,EAAE,8DAA8D;QAC7E,YAAY,EAAE,qCAAqC;QACnD,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,sDAAsD;QAC5E,eAAe,EACb,mHAAmH;KACtH;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,aAAa,EAAE,qCAAqC;QACpD,YAAY,EAAE,qCAAqC;QACnD,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAClB,sEAAsE;QACxE,eAAe,EACb,+HAA+H;KAClI;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,uCAAuC;QACtD,YAAY,EAAE,+BAA+B;QAC7C,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAClB,0EAA0E;QAC5E,eAAe,EACb,2HAA2H;KAC9H;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,mCAAmC;QAClD,YAAY,EAAE,oBAAoB;QAClC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,qDAAqD;QAC3E,eAAe,EACb,sFAAsF;KACzF;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,aAAa,EAAE,6BAA6B;QAC5C,YAAY,EAAE,wBAAwB;QACtC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,yDAAyD;QAC/E,eAAe,EACb,4EAA4E;KAC/E;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,yCAAyC;QACxD,YAAY,EAAE,gCAAgC;QAC9C,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,yCAAyC;QAC/D,eAAe,EACb,0HAA0H;KAC7H;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAA8B,EAC9B,YAA+B;IAM/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,iBAAiB,IAAI,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,iBAAiB,IAAI,CAAC,CAAC;IAErD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,iBAAiB,EAAE,KAAK;QACxB,wBAAwB,EAAE,KAAK,GAAG,SAAS;QAC3C,kBAAkB,EAChB,iBAAiB,GAAG,CAAC;YACnB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAM7C;IACC,OAAO,CACL,IAAI;QACJ,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;YAC9B,KAAK,CAAC,kBAAkB,CAAC,MAAM;YAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrB,CAAC;QACH,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,SAA8B;IAQ7E,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO;gBACL,iBAAiB,EAAE,CAAC;gBACpB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,CAAC;gBAC1B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,iBAAiB,EAAE,CAAC;gBACpB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,iBAAiB,EAAE,EAAE;gBACrB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,iBAAiB,EAAE,EAAE;gBACrB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;IACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"rea-budget-matrix.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/rea-budget-matrix.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsC;IAC1E;QACE,EAAE,EAAE,yBAAyB;QAC7B,aAAa,EAAE,2DAA2D;QAC1E,YAAY,EAAE,oCAAoC;QAClD,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,cAAc;QACpB,oBAAoB,EAAE,2DAA2D;QACjF,eAAe,EACb,+FAA+F;KAClG;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,2DAA2D;QAC1E,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,uFAAuF;KAC1F;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,2DAA2D;QAC1E,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,gHAAgH;KACnH;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,2DAA2D;QAC1E,YAAY,EAAE,gCAAgC;QAC9C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,8FAA8F;KACjG;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,aAAa,EAAE,2DAA2D;QAC1E,YAAY,EAAE,qCAAqC;QACnD,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,sDAAsD;QAC5E,eAAe,EACb,mHAAmH;KACtH;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,aAAa,EAAE,kCAAkC;QACjD,YAAY,EAAE,qCAAqC;QACnD,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAClB,sEAAsE;QACxE,eAAe,EACb,+HAA+H;KAClI;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,oCAAoC;QACnD,YAAY,EAAE,+BAA+B;QAC7C,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAClB,0EAA0E;QAC5E,eAAe,EACb,2HAA2H;KAC9H;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,gCAAgC;QAC/C,YAAY,EAAE,oBAAoB;QAClC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,qDAAqD;QAC3E,eAAe,EACb,iFAAiF;KACpF;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,aAAa,EAAE,yBAAyB;QACxC,YAAY,EAAE,wBAAwB;QACtC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,yDAAyD;QAC/E,eAAe,EACb,4EAA4E;KAC/E;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,aAAa,EAAE,0BAA0B;QACzC,YAAY,EAAE,gCAAgC;QAC9C,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,yCAAyC;QAC/D,eAAe,EACb,0HAA0H;KAC7H;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,aAAa,EAAE,kCAAkC;QACjD,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,4CAA4C;QAClE,eAAe,EACb,0JAA0J;KAC7J;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,aAAa,EAAE,kCAAkC;QACjD,YAAY,EAAE,iBAAiB;QAC/B,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,wCAAwC;QAC9D,eAAe,EACb,mGAAmG;KACtG;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,aAAa,EAAE,8BAA8B;QAC7C,YAAY,EAAE,4BAA4B;QAC1C,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,oDAAoD;QAC1E,eAAe,EACb,iHAAiH;KACpH;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,aAAa,EAAE,uCAAuC;QACtD,YAAY,EAAE,oBAAoB;QAClC,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,qDAAqD;QAC3E,eAAe,EACb,mHAAmH;KACtH;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,aAAa,EAAE,uDAAuD;QACtE,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,mDAAmD;QACzE,eAAe,EACb,4HAA4H;KAC/H;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,aAAa,EAAE,yBAAyB;QACxC,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,4CAA4C;QAClE,eAAe,EACb,iIAAiI;KACpI;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,aAAa,EAAE,qCAAqC;QACpD,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,uDAAuD;QAC7E,eAAe,EACb,sGAAsG;KACzG;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,qCAAqC;QACpD,YAAY,EAAE,iBAAiB;QAC/B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,kDAAkD;QACxE,eAAe,EACb,yGAAyG;KAC5G;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,aAAa,EAAE,2BAA2B;QAC1C,YAAY,EAAE,gCAAgC;QAC9C,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,+BAA+B;QACrD,eAAe,EACb,sGAAsG;KACzG;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,aAAa,EAAE,2BAA2B;QAC1C,YAAY,EAAE,+BAA+B;QAC7C,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,8BAA8B;QACpD,eAAe,EACb,iGAAiG;KACpG;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,aAAa,EAAE,0BAA0B;QACzC,YAAY,EAAE,iCAAiC;QAC/C,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,uCAAuC;QAC7D,eAAe,EACb,4GAA4G;KAC/G;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,aAAa,EAAE,wBAAwB;QACvC,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,kCAAkC;QACxD,eAAe,EACb,+FAA+F;KAClG;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,aAAa,EAAE,sBAAsB;QACrC,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,OAAO;QACb,oBAAoB,EAAE,oDAAoD;QAC1E,eAAe,EACb,oGAAoG;KACvG;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAA8B,EAC9B,YAA+B;IAM/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,iBAAiB,IAAI,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,iBAAiB,IAAI,CAAC,CAAC;IAErD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,iBAAiB,EAAE,KAAK;QACxB,wBAAwB,EAAE,KAAK,GAAG,SAAS;QAC3C,kBAAkB,EAChB,iBAAiB,GAAG,CAAC;YACnB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAM7C;IACC,OAAO,CACL,IAAI;QACJ,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;YAC9B,KAAK,CAAC,kBAAkB,CAAC,MAAM;YAC/B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrB,CAAC;QACH,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,SAA8B;IAQ7E,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO;gBACL,iBAAiB,EAAE,CAAC;gBACpB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,CAAC;gBAC1B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,iBAAiB,EAAE,CAAC;gBACpB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,iBAAiB,EAAE,EAAE;gBACrB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,iBAAiB,EAAE,EAAE;gBACrB,kBAAkB,EAAE,GAAG;gBACvB,oBAAoB,EAAE,EAAE;gBACxB,qBAAqB,EAAE,GAAG;gBAC1B,uBAAuB,EAAE,EAAE;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"regex-worker-tarpit.d.ts","sourceRoot":"","sources":["../../../src/shields/exhaustion/regex-worker-tarpit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,uBAAuB,CA2BzB"}
1
+ {"version":3,"file":"regex-worker-tarpit.d.ts","sourceRoot":"","sources":["../../../src/shields/exhaustion/regex-worker-tarpit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,uBAAuB,CA4BzB"}
@@ -33,7 +33,8 @@ export function generateRegexWorkerTarpit(prng, intensity = "balanced") {
33
33
  const p = prefixes[i % prefixes.length];
34
34
  entries.push(`${p}_${tag}_${i}_0x${prng.hex(8)}`);
35
35
  }
36
- const code = `const _blaRegexSearchMagnet_${tag} = Object.freeze(${JSON.stringify(entries)});`;
36
+ const magnetName = `regexSearchMagnet_${tag}`;
37
+ const code = `const ${magnetName} = Object.freeze(${JSON.stringify(entries)});`;
37
38
  return {
38
39
  code,
39
40
  nearMissCandidatesGenerated: entries.length,
@@ -1 +1 @@
1
- {"version":3,"file":"regex-worker-tarpit.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/regex-worker-tarpit.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,kCAAkC,EAAE,KAAK;IACzC,qCAAqC,EAAE,GAAG;IAC1C,qCAAqC,EAAE,CAAC;CAChC,CAAC;AAOX;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAgB,EAChB,YAAiC,UAAU;IAE3C,MAAM,KAAK,GACT,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,SAAS,KAAK,UAAU;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,KAAK,SAAS;gBACvB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,CAAC;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG;QACf,2BAA2B;QAC3B,0BAA0B;QAC1B,yBAAyB;QACzB,sBAAsB;KACvB,CAAC;IACF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,+BAA+B,GAAG,oBAAoB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/F,OAAO;QACL,IAAI;QACJ,2BAA2B,EAAE,OAAO,CAAC,MAAM;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"regex-worker-tarpit.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/regex-worker-tarpit.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,kCAAkC,EAAE,KAAK;IACzC,qCAAqC,EAAE,GAAG;IAC1C,qCAAqC,EAAE,CAAC;CAChC,CAAC;AAOX;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAgB,EAChB,YAAiC,UAAU;IAE3C,MAAM,KAAK,GACT,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,SAAS,KAAK,UAAU;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,KAAK,SAAS;gBACvB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,CAAC;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG;QACf,2BAA2B;QAC3B,0BAA0B;QAC1B,yBAAyB;QACzB,sBAAsB;KACvB,CAAC;IACF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,GAAG,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,SAAS,UAAU,oBAAoB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IAChF,OAAO;QACL,IAAI;QACJ,2BAA2B,EAAE,OAAO,CAAC,MAAM;KAC5C,CAAC;AACJ,CAAC"}
@@ -12,12 +12,15 @@ export interface WasmInterfaceExhaustionPlan {
12
12
  readonly totalBinaryOverheadBytes: number;
13
13
  readonly totalReaChargedBytes: number;
14
14
  readonly byteAmplificationFactor: number;
15
+ readonly exceedsRepresentationBudget: boolean;
15
16
  }
16
17
  /**
17
- * Targets REA's `WasmInterfaceBudget` (`src/domain/wasm/wasmInterface.ts:90-108`),
18
- * where every WebAssembly import/export entry is charged:
19
- * `1024 + (module.length + name.length + wat_form.length) * 6 + (params.length + results.length) * 16`
20
- * against a fixed 32 MiB (`WASM_INTERFACE_REPRESENTATION_BYTES`) ceiling.
18
+ * Targets REA's `WasmInterfaceBudget` (`WASM_INTERFACE_REPRESENTATION_BYTES` =
19
+ * 32 MiB), where every WebAssembly import/export entry is charged:
20
+ * `1024 + (module.length + name.length + wat_form.length) * 6 + (params+results) * 16`.
21
+ *
22
+ * At bankrupt intensity, descriptors are sized so the charged representation
23
+ * exceeds the 32 MiB ceiling (Wabt path or in-process budget probe).
21
24
  */
22
25
  export declare function planWasmInterfaceBudgetExhaustion(prng: SeededPrng, intensity?: ProtectionIntensity): WasmInterfaceExhaustionPlan;
23
26
  //# sourceMappingURL=wasm-interface-exhaustion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-interface-exhaustion.d.ts","sourceRoot":"","sources":["../../../src/shields/exhaustion/wasm-interface-exhaustion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC1D,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,2BAA2B,CAgD7B"}
1
+ {"version":3,"file":"wasm-interface-exhaustion.d.ts","sourceRoot":"","sources":["../../../src/shields/exhaustion/wasm-interface-exhaustion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC1D,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,2BAA2B,CAwD7B"}
@@ -1,24 +1,32 @@
1
1
  import { computeReaWasmInterfaceCharge } from "./rea-budget-matrix.js";
2
+ import { REA_INTERNAL_LIMITS } from "../../identity.js";
2
3
  /**
3
- * Targets REA's `WasmInterfaceBudget` (`src/domain/wasm/wasmInterface.ts:90-108`),
4
- * where every WebAssembly import/export entry is charged:
5
- * `1024 + (module.length + name.length + wat_form.length) * 6 + (params.length + results.length) * 16`
6
- * against a fixed 32 MiB (`WASM_INTERFACE_REPRESENTATION_BYTES`) ceiling.
4
+ * Targets REA's `WasmInterfaceBudget` (`WASM_INTERFACE_REPRESENTATION_BYTES` =
5
+ * 32 MiB), where every WebAssembly import/export entry is charged:
6
+ * `1024 + (module.length + name.length + wat_form.length) * 6 + (params+results) * 16`.
7
+ *
8
+ * At bankrupt intensity, descriptors are sized so the charged representation
9
+ * exceeds the 32 MiB ceiling (Wabt path or in-process budget probe).
7
10
  */
8
11
  export function planWasmInterfaceBudgetExhaustion(prng, intensity = "balanced") {
12
+ const budget = REA_INTERNAL_LIMITS.WASM_INTERFACE_REPRESENTATION_BYTES;
9
13
  const count = intensity === "stealth"
10
14
  ? 12
11
15
  : intensity === "balanced"
12
16
  ? 24
13
17
  : intensity === "maximum"
14
18
  ? 48
15
- : 72;
19
+ : 128;
20
+ // bankrupt: long module/export/wat names so ~128 entries clear 32 MiB.
21
+ // bankrupt: ~15 KiB names × 128 entries → charged representation ≫ 32 MiB.
22
+ const namePad = intensity === "bankrupt" ? 15_000 : intensity === "maximum" ? 64 : 0;
16
23
  const descriptors = [];
17
24
  let totalBinaryOverheadBytes = 0;
18
25
  let totalReaChargedBytes = 0;
19
26
  for (let i = 0; i < count; i++) {
20
- const moduleName = `enclave_tee_ring0_attestation_domain_${prng.hex(6)}`;
21
- const exportName = `bla_enclave_verify_zero_trust_merkle_slot_${i}_${prng.hex(8)}`;
27
+ const pad = namePad > 0 ? prng.hex(Math.min(8, namePad)).padEnd(namePad, "b") : "";
28
+ const moduleName = `enclave_tee_ring0_attestation_domain_${prng.hex(6)}${pad ? `_${pad}` : ""}`;
29
+ const exportName = `bla_enclave_verify_zero_trust_merkle_slot_${i}_${prng.hex(8)}${pad ? `_${pad}` : ""}`;
22
30
  const paramCount = 16;
23
31
  const resultCount = 4;
24
32
  const watForm = `(func $${exportName} (param ${Array(paramCount).fill("i64").join(" ")}) (result ${Array(resultCount).fill("i64").join(" ")}))`;
@@ -45,6 +53,7 @@ export function planWasmInterfaceBudgetExhaustion(prng, intensity = "balanced")
45
53
  totalBinaryOverheadBytes,
46
54
  totalReaChargedBytes,
47
55
  byteAmplificationFactor: Number((totalReaChargedBytes / Math.max(1, totalBinaryOverheadBytes)).toFixed(2)),
56
+ exceedsRepresentationBudget: totalReaChargedBytes > budget,
48
57
  };
49
58
  }
50
59
  //# sourceMappingURL=wasm-interface-exhaustion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-interface-exhaustion.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/wasm-interface-exhaustion.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAiBvE;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC/C,IAAgB,EAChB,YAAiC,UAAU;IAE3C,MAAM,KAAK,GACT,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,SAAS,KAAK,UAAU;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,KAAK,SAAS;gBACvB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,CAAC;IAEb,MAAM,WAAW,GAA+B,EAAE,CAAC;IACnD,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,wCAAwC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,UAAU,GAAG,6CAA6C,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,UAAU,UAAU,WAAW,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAChJ,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;YAClE,UAAU;YACV,kBAAkB,EAAE,UAAU;YAC9B,OAAO;YACP,UAAU;YACV,WAAW;SACZ,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;QAEzF,WAAW,CAAC,IAAI,CAAC;YACf,UAAU;YACV,UAAU;YACV,UAAU;YACV,WAAW;YACX,6BAA6B;SAC9B,CAAC,CAAC;QACH,wBAAwB,IAAI,WAAW,CAAC;QACxC,oBAAoB,IAAI,6BAA6B,CAAC;IACxD,CAAC;IAED,OAAO;QACL,WAAW;QACX,wBAAwB;QACxB,oBAAoB;QACpB,uBAAuB,EAAE,MAAM,CAC7B,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAC1E;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"wasm-interface-exhaustion.js","sourceRoot":"","sources":["../../../src/shields/exhaustion/wasm-interface-exhaustion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { SeededPrng } from "../../core/prng.js";
2
+ import type { ProtectionIntensity } from "../../core/types.js";
3
+ export interface AndroidDexXrefCounterResult {
4
+ readonly dexBuffer: Buffer;
5
+ /** Number of decoy caller classes that invoke the external Log.d target. */
6
+ readonly callerClassesEmitted: number;
7
+ /** External method refs planted (currently always 1 — Log.d). */
8
+ readonly externalMethodRefs: number;
9
+ /** Marker string embedded for inspect/detect. */
10
+ readonly marker: string;
11
+ }
12
+ /**
13
+ * Generate a decoy DEX that saturates REA #8154's external-invoke caller
14
+ * inventory (`MAX_EXTERNAL_XREF_BYTES`).
15
+ */
16
+ export declare function generateAndroidDexXrefCounter(prng: SeededPrng, intensity?: ProtectionIntensity): AndroidDexXrefCounterResult;
17
+ /** Next free `classesN.dex` name given existing ZIP entry names. */
18
+ export declare function nextMultidexName(existingNames: readonly string[]): string;
19
+ //# sourceMappingURL=android-dex-xref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-dex-xref.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/android-dex-xref.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,iEAAiE;IACjE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAmbD;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,mBAAgC,GAC1C,2BAA2B,CAkB7B;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAYzE"}
@@ -0,0 +1,427 @@
1
+ /**
2
+ * Counter REA #8154 — `feat(android): trace callers of external DEX methods`.
3
+ *
4
+ * REA's JADX bridge (`ReaJadxBridge.java`) walks every method body for
5
+ * `INVOKE_*` opcodes targeting an exact external class/method, then budgets
6
+ * the resulting prototype + caller inventories against
7
+ * `MAX_EXTERNAL_XREF_BYTES = (8 MiB - 1 KiB) / 8` (≈ 1_048_448 bytes).
8
+ *
9
+ * This module emits a standalone, byte-valid Dalvik Executable (`dex\n035\0`)
10
+ * whose only purpose is to saturate that budget:
11
+ * - One external target: `android.util.Log.d(String, String)` (no class_def).
12
+ * - N decoy caller classes, each with a static `bait()` that contains a real
13
+ * `invoke-static` to that target — so JADX's instruction visitor sees them.
14
+ *
15
+ * The developer's own `classes.dex` is NEVER rewritten by this generator; the
16
+ * decoy is planted as an additional `classesN.dex` multidex member (see
17
+ * `archive.ts`). Header checksum / signature / file_size are recomputed so
18
+ * any tool that validates the DEX container still accepts it.
19
+ */
20
+ import { createHash } from "node:crypto";
21
+ import { REA_INTERNAL_LIMITS } from "../../identity.js";
22
+ import { buildCanaryAndDiagnosticPayloads } from "../deception/format-payloads.js";
23
+ function encodeUleb128(value) {
24
+ const bytes = [];
25
+ let v = value >>> 0;
26
+ do {
27
+ let byte = v & 0x7f;
28
+ v >>>= 7;
29
+ if (v !== 0)
30
+ byte |= 0x80;
31
+ bytes.push(byte);
32
+ } while (v !== 0);
33
+ return Buffer.from(bytes);
34
+ }
35
+ function align4(n) {
36
+ return (n + 3) & ~3;
37
+ }
38
+ function intensityCallerCount(intensity) {
39
+ // Escaped JSON per caller row is hundreds of bytes under InvokeBudget's
40
+ // 12× character bound. Aim past ANDROID_EXTERNAL_XREF_BYTES at maximum /
41
+ // bankrupt; keep stealth/balanced smaller but still meaningful.
42
+ switch (intensity) {
43
+ case "stealth":
44
+ return 96;
45
+ case "balanced":
46
+ return 384;
47
+ case "maximum":
48
+ return 2_048;
49
+ case "bankrupt":
50
+ return 6_144;
51
+ default:
52
+ return 384;
53
+ }
54
+ }
55
+ /**
56
+ * Build a minimal but structurally valid DEX 035 containing `callerCount`
57
+ * static caller classes that each `invoke-static` `Landroid/util/Log;->d`.
58
+ */
59
+ function buildExternalInvokeDex(prng, callerCount, extraStrings) {
60
+ const marker = "BLA-DEX-XREF-V1";
61
+ // ----- string pool (order matters; indices are referenced below) -----
62
+ const strings = [];
63
+ const strIndex = new Map();
64
+ const addStr = (s) => {
65
+ const existing = strIndex.get(s);
66
+ if (existing !== undefined)
67
+ return existing;
68
+ const idx = strings.length;
69
+ strings.push(s);
70
+ strIndex.set(s, idx);
71
+ return idx;
72
+ };
73
+ // Fixed descriptor / name strings used by the external target + callers.
74
+ const sVoid = addStr("V");
75
+ const sObject = addStr("Ljava/lang/Object;");
76
+ const sString = addStr("Ljava/lang/String;");
77
+ const sLog = addStr("Landroid/util/Log;");
78
+ const sShortyLogD = addStr("VLL"); // return V, two reference args
79
+ const sShortyVoid = addStr("V");
80
+ const sMethodD = addStr("d");
81
+ const sMethodBait = addStr("bait");
82
+ const sMarker = addStr(marker);
83
+ const sSource = addStr("BlaDexXref.java");
84
+ const callerTypeStrIdx = [];
85
+ for (let i = 0; i < callerCount; i++) {
86
+ const hex = prng.hex(6);
87
+ callerTypeStrIdx.push(addStr(`Lcom/enclave/xref/ExternalInvokeCaller_${hex}_${i};`));
88
+ }
89
+ for (const extra of extraStrings) {
90
+ // DEX MUTF-8 string_data cannot contain U+0000; keep payloads clean.
91
+ addStr(extra.replace(/\0/g, " ").slice(0, 200));
92
+ }
93
+ // ----- type_ids (index into string_ids) -----
94
+ const types = [];
95
+ const typeIndex = new Map(); // stringIdx -> typeIdx
96
+ const addType = (stringIdx) => {
97
+ const existing = typeIndex.get(stringIdx);
98
+ if (existing !== undefined)
99
+ return existing;
100
+ const idx = types.length;
101
+ types.push(stringIdx);
102
+ typeIndex.set(stringIdx, idx);
103
+ return idx;
104
+ };
105
+ const tVoid = addType(sVoid);
106
+ const tObject = addType(sObject);
107
+ const tString = addType(sString);
108
+ const tLog = addType(sLog);
109
+ const callerTypeIdx = callerTypeStrIdx.map((si) => addType(si));
110
+ void tVoid; // referenced via proto return; kept for clarity
111
+ const protos = [
112
+ { shortyIdx: sShortyLogD, returnTypeIdx: tVoid, paramTypeIdxs: [tString, tString] },
113
+ { shortyIdx: sShortyVoid, returnTypeIdx: tVoid, paramTypeIdxs: [] },
114
+ ];
115
+ const methods = [
116
+ { classIdx: tLog, protoIdx: 0, nameIdx: sMethodD },
117
+ ];
118
+ for (let i = 0; i < callerCount; i++) {
119
+ methods.push({
120
+ classIdx: callerTypeIdx[i],
121
+ protoIdx: 1,
122
+ nameIdx: sMethodBait,
123
+ });
124
+ }
125
+ // ----- Lay out the data section -----
126
+ // We'll assemble: string_data → type_list(s) → code_item(s) → class_data →
127
+ // map_list. Offsets are relative to start of file; header + id tables come
128
+ // first so we compute their size up front.
129
+ const headerSize = 0x70;
130
+ const stringIdsSize = strings.length * 4;
131
+ const typeIdsSize = types.length * 4;
132
+ const protoIdsSize = protos.length * 12;
133
+ const fieldIdsSize = 0;
134
+ const methodIdsSize = methods.length * 8;
135
+ const classDefsSize = callerCount * 32;
136
+ const idsEnd = headerSize +
137
+ stringIdsSize +
138
+ typeIdsSize +
139
+ protoIdsSize +
140
+ fieldIdsSize +
141
+ methodIdsSize +
142
+ classDefsSize;
143
+ let dataCursor = idsEnd;
144
+ const dataChunks = [];
145
+ const place = (buf, align = false) => {
146
+ if (align) {
147
+ const padded = align4(dataCursor) - dataCursor;
148
+ if (padded > 0) {
149
+ dataChunks.push({ offset: dataCursor, buf: Buffer.alloc(padded, 0) });
150
+ dataCursor += padded;
151
+ }
152
+ }
153
+ const off = dataCursor;
154
+ dataChunks.push({ offset: off, buf });
155
+ dataCursor += buf.length;
156
+ return off;
157
+ };
158
+ // string_data_item[] — MUTF-8 with uleb128 utf16_size prefix + NUL
159
+ const stringDataOffs = [];
160
+ for (const s of strings) {
161
+ const utf8 = Buffer.from(s, "utf8");
162
+ // Approximate utf16 length as utf8 length for ASCII-heavy payloads (our
163
+ // strings are ASCII). Canary payloads may contain non-BMP rarely; DEX
164
+ // requires modified UTF-8 — for BMP-only JS strings, utf16_size === code units.
165
+ let utf16Size = 0;
166
+ for (const ch of s) {
167
+ const cp = ch.codePointAt(0);
168
+ utf16Size += cp > 0xffff ? 2 : 1;
169
+ }
170
+ const item = Buffer.concat([encodeUleb128(utf16Size), utf8, Buffer.from([0])]);
171
+ stringDataOffs.push(place(item));
172
+ }
173
+ // type_list for Log.d params (String, String) — size uint32 + type_idx[] uint16, align 4
174
+ let logParamListOff = 0;
175
+ {
176
+ const paramBuf = Buffer.alloc(4 + 2 * 2);
177
+ paramBuf.writeUInt32LE(2, 0);
178
+ paramBuf.writeUInt16LE(tString, 4);
179
+ paramBuf.writeUInt16LE(tString, 6);
180
+ logParamListOff = place(paramBuf, true);
181
+ }
182
+ const protoParamOffs = [logParamListOff, 0];
183
+ // code_item for bait(): invoke-static {v0,v1}, Log.d ; return-void
184
+ // Format 35c invoke-static: op=0x71, A=2 args, method_idx=0, regs C=0 D=1
185
+ const insnBytes = Buffer.from([
186
+ 0x71, 0x20, 0x00, 0x00, 0x10, 0x00, // invoke-static {v0, v1}, method@0 (Log.d)
187
+ 0x0e, 0x00, // return-void
188
+ ]);
189
+ const codeItemSize = 16 + insnBytes.length; // header 16 + 8 insn bytes
190
+ const codeItemTemplate = Buffer.alloc(codeItemSize);
191
+ codeItemTemplate.writeUInt16LE(2, 0); // registers_size
192
+ codeItemTemplate.writeUInt16LE(0, 2); // ins_size
193
+ codeItemTemplate.writeUInt16LE(2, 4); // outs_size
194
+ codeItemTemplate.writeUInt16LE(0, 6); // tries_size
195
+ codeItemTemplate.writeUInt32LE(0, 8); // debug_info_off
196
+ codeItemTemplate.writeUInt32LE(insnBytes.length / 2, 12); // insns_size (code units)
197
+ insnBytes.copy(codeItemTemplate, 16);
198
+ // Each caller gets its own code_item (identical body; unique off required by class_data)
199
+ const codeOffs = [];
200
+ for (let i = 0; i < callerCount; i++) {
201
+ codeOffs.push(place(Buffer.from(codeItemTemplate), true));
202
+ }
203
+ // class_data_item per caller: 0 static fields, 0 instance, 1 direct method, 0 virtual
204
+ const classDataOffs = [];
205
+ for (let i = 0; i < callerCount; i++) {
206
+ // method_idx_diff: methods[0] is Log.d; Caller_i.bait is methods[1+i]
207
+ // First direct method diff = (1+i) - 0 = 1+i
208
+ const methodIdxDiff = 1 + i;
209
+ const accessFlags = 0x0009; // public static
210
+ const parts = Buffer.concat([
211
+ encodeUleb128(0), // static_fields_size
212
+ encodeUleb128(0), // instance_fields_size
213
+ encodeUleb128(1), // direct_methods_size
214
+ encodeUleb128(0), // virtual_methods_size
215
+ encodeUleb128(methodIdxDiff),
216
+ encodeUleb128(accessFlags),
217
+ encodeUleb128(codeOffs[i]),
218
+ ]);
219
+ classDataOffs.push(place(parts));
220
+ }
221
+ // map_list — required; list every section
222
+ // We'll finalize map after we know map's own offset.
223
+ const mapStart = align4(dataCursor);
224
+ if (mapStart !== dataCursor) {
225
+ place(Buffer.alloc(mapStart - dataCursor, 0));
226
+ }
227
+ // map entries (type, unused, size, offset) — 12 bytes each, plus uint32 size header
228
+ // Types from dalvik docs:
229
+ const TYPE_HEADER_ITEM = 0x0000;
230
+ const TYPE_STRING_ID_ITEM = 0x0001;
231
+ const TYPE_TYPE_ID_ITEM = 0x0002;
232
+ const TYPE_PROTO_ID_ITEM = 0x0003;
233
+ const TYPE_METHOD_ID_ITEM = 0x0005;
234
+ const TYPE_CLASS_DEF_ITEM = 0x0006;
235
+ const TYPE_CODE_ITEM = 0x2001;
236
+ const TYPE_STRING_DATA_ITEM = 0x2002;
237
+ const TYPE_TYPE_LIST = 0x1001;
238
+ const TYPE_CLASS_DATA_ITEM = 0x2000;
239
+ const TYPE_MAP_LIST = 0x1000;
240
+ const mapEntries = [
241
+ { type: TYPE_HEADER_ITEM, size: 1, offset: 0 },
242
+ { type: TYPE_STRING_ID_ITEM, size: strings.length, offset: headerSize },
243
+ {
244
+ type: TYPE_TYPE_ID_ITEM,
245
+ size: types.length,
246
+ offset: headerSize + stringIdsSize,
247
+ },
248
+ {
249
+ type: TYPE_PROTO_ID_ITEM,
250
+ size: protos.length,
251
+ offset: headerSize + stringIdsSize + typeIdsSize,
252
+ },
253
+ {
254
+ type: TYPE_METHOD_ID_ITEM,
255
+ size: methods.length,
256
+ offset: headerSize + stringIdsSize + typeIdsSize + protoIdsSize + fieldIdsSize,
257
+ },
258
+ {
259
+ type: TYPE_CLASS_DEF_ITEM,
260
+ size: callerCount,
261
+ offset: headerSize +
262
+ stringIdsSize +
263
+ typeIdsSize +
264
+ protoIdsSize +
265
+ fieldIdsSize +
266
+ methodIdsSize,
267
+ },
268
+ { type: TYPE_TYPE_LIST, size: 1, offset: logParamListOff },
269
+ {
270
+ type: TYPE_CODE_ITEM,
271
+ size: callerCount,
272
+ offset: codeOffs[0],
273
+ },
274
+ {
275
+ type: TYPE_STRING_DATA_ITEM,
276
+ size: strings.length,
277
+ offset: stringDataOffs[0],
278
+ },
279
+ {
280
+ type: TYPE_CLASS_DATA_ITEM,
281
+ size: callerCount,
282
+ offset: classDataOffs[0],
283
+ },
284
+ ];
285
+ const mapListSize = 4 + (mapEntries.length + 1) * 12; // +1 for MAP_LIST itself
286
+ const mapOff = dataCursor;
287
+ const mapBuf = Buffer.alloc(mapListSize);
288
+ mapBuf.writeUInt32LE(mapEntries.length + 1, 0);
289
+ let mapAt = 4;
290
+ for (const e of mapEntries) {
291
+ mapBuf.writeUInt16LE(e.type, mapAt);
292
+ mapBuf.writeUInt16LE(0, mapAt + 2);
293
+ mapBuf.writeUInt32LE(e.size, mapAt + 4);
294
+ mapBuf.writeUInt32LE(e.offset, mapAt + 8);
295
+ mapAt += 12;
296
+ }
297
+ // Self entry
298
+ mapBuf.writeUInt16LE(TYPE_MAP_LIST, mapAt);
299
+ mapBuf.writeUInt16LE(0, mapAt + 2);
300
+ mapBuf.writeUInt32LE(1, mapAt + 4);
301
+ mapBuf.writeUInt32LE(mapOff, mapAt + 8);
302
+ place(mapBuf);
303
+ const fileSize = dataCursor;
304
+ // ----- Write the full file -----
305
+ const out = Buffer.alloc(fileSize, 0);
306
+ // header
307
+ out.write("dex\n035\0", 0, "ascii");
308
+ // checksum + signature filled later
309
+ out.writeUInt32LE(fileSize, 32);
310
+ out.writeUInt32LE(headerSize, 36);
311
+ out.writeUInt32LE(0x12345678, 40); // endian_tag
312
+ out.writeUInt32LE(0, 44); // link_size
313
+ out.writeUInt32LE(0, 48); // link_off
314
+ out.writeUInt32LE(mapOff, 52);
315
+ out.writeUInt32LE(strings.length, 56);
316
+ out.writeUInt32LE(headerSize, 60); // string_ids_off
317
+ out.writeUInt32LE(types.length, 64);
318
+ out.writeUInt32LE(headerSize + stringIdsSize, 68); // type_ids_off
319
+ out.writeUInt32LE(protos.length, 72);
320
+ out.writeUInt32LE(headerSize + stringIdsSize + typeIdsSize, 76); // proto_ids_off
321
+ out.writeUInt32LE(0, 80); // field_ids_size
322
+ out.writeUInt32LE(0, 84); // field_ids_off
323
+ out.writeUInt32LE(methods.length, 88);
324
+ out.writeUInt32LE(headerSize + stringIdsSize + typeIdsSize + protoIdsSize + fieldIdsSize, 92); // method_ids_off
325
+ out.writeUInt32LE(callerCount, 96);
326
+ out.writeUInt32LE(headerSize +
327
+ stringIdsSize +
328
+ typeIdsSize +
329
+ protoIdsSize +
330
+ fieldIdsSize +
331
+ methodIdsSize, 100); // class_defs_off
332
+ out.writeUInt32LE(fileSize - idsEnd, 104); // data_size
333
+ out.writeUInt32LE(idsEnd, 108); // data_off
334
+ // string_ids
335
+ let at = headerSize;
336
+ for (const off of stringDataOffs) {
337
+ out.writeUInt32LE(off, at);
338
+ at += 4;
339
+ }
340
+ // type_ids
341
+ for (const si of types) {
342
+ out.writeUInt32LE(si, at);
343
+ at += 4;
344
+ }
345
+ // proto_ids
346
+ for (let i = 0; i < protos.length; i++) {
347
+ const p = protos[i];
348
+ out.writeUInt32LE(p.shortyIdx, at);
349
+ out.writeUInt32LE(p.returnTypeIdx, at + 4);
350
+ out.writeUInt32LE(protoParamOffs[i], at + 8);
351
+ at += 12;
352
+ }
353
+ // method_ids
354
+ for (const m of methods) {
355
+ out.writeUInt16LE(m.classIdx, at);
356
+ out.writeUInt16LE(m.protoIdx, at + 2);
357
+ out.writeUInt32LE(m.nameIdx, at + 4);
358
+ at += 8;
359
+ }
360
+ // class_defs
361
+ for (let i = 0; i < callerCount; i++) {
362
+ out.writeUInt32LE(callerTypeIdx[i], at); // class_idx
363
+ out.writeUInt32LE(0x0001, at + 4); // ACC_PUBLIC
364
+ out.writeUInt32LE(tObject, at + 8); // superclass
365
+ out.writeUInt32LE(0, at + 12); // interfaces_off
366
+ out.writeUInt32LE(sSource, at + 16); // source_file_idx
367
+ out.writeUInt32LE(0, at + 20); // annotations_off
368
+ out.writeUInt32LE(classDataOffs[i], at + 24); // class_data_off
369
+ out.writeUInt32LE(0, at + 28); // static_values_off
370
+ at += 32;
371
+ }
372
+ // data chunks
373
+ for (const chunk of dataChunks) {
374
+ chunk.buf.copy(out, chunk.offset);
375
+ }
376
+ // Keep marker reachable for inspect
377
+ void sMarker;
378
+ // SHA-1 signature over bytes [32..end] → [12..32]
379
+ const sha1 = createHash("sha1").update(out.subarray(32)).digest();
380
+ sha1.copy(out, 12);
381
+ // Adler32 checksum over bytes [12..end] → [8..12]
382
+ let a = 1;
383
+ let b = 0;
384
+ for (let i = 12; i < out.length; i++) {
385
+ a = (a + out[i]) % 65521;
386
+ b = (b + a) % 65521;
387
+ }
388
+ out.writeUInt32LE(((b << 16) | a) >>> 0, 8);
389
+ return { buffer: out, callerCount };
390
+ }
391
+ /**
392
+ * Generate a decoy DEX that saturates REA #8154's external-invoke caller
393
+ * inventory (`MAX_EXTERNAL_XREF_BYTES`).
394
+ */
395
+ export function generateAndroidDexXrefCounter(prng, intensity = "balanced") {
396
+ const callerCount = intensityCallerCount(intensity);
397
+ const deception = buildCanaryAndDiagnosticPayloads(prng, intensity);
398
+ // Embed a handful of canary/diagnostic strings so string-pool scanners also
399
+ // surface honeypots; does not affect invoke budgets.
400
+ const extras = deception.textRecords.slice(0, 12);
401
+ const built = buildExternalInvokeDex(prng, callerCount, extras);
402
+ // Sanity: callers should exceed what a single ~1 MiB inventory comfortably holds
403
+ // at bankrupt/maximum. We don't assert the byte math here — unit tests do.
404
+ void REA_INTERNAL_LIMITS.ANDROID_EXTERNAL_XREF_BYTES;
405
+ return {
406
+ dexBuffer: built.buffer,
407
+ callerClassesEmitted: built.callerCount,
408
+ externalMethodRefs: 1,
409
+ marker: "BLA-DEX-XREF-V1",
410
+ };
411
+ }
412
+ /** Next free `classesN.dex` name given existing ZIP entry names. */
413
+ export function nextMultidexName(existingNames) {
414
+ let max = 1; // classes.dex counts as 1
415
+ for (const name of existingNames) {
416
+ const base = name.split("/").pop() ?? name;
417
+ if (/^classes\.dex$/i.test(base)) {
418
+ max = Math.max(max, 1);
419
+ continue;
420
+ }
421
+ const m = /^classes(\d+)\.dex$/i.exec(base);
422
+ if (m)
423
+ max = Math.max(max, Number(m[1]));
424
+ }
425
+ return `classes${max + 1}.dex`;
426
+ }
427
+ //# sourceMappingURL=android-dex-xref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-dex-xref.js","sourceRoot":"","sources":["../../../src/shields/formats/android-dex-xref.ts"],"names":[],"mappings":"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"}