bla-agents 1.6.2 → 1.6.4

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 (72) hide show
  1. package/README.md +8 -0
  2. package/dist/bundler/index.d.ts +6 -0
  3. package/dist/bundler/index.d.ts.map +1 -1
  4. package/dist/bundler/index.js +37 -8
  5. package/dist/bundler/index.js.map +1 -1
  6. package/dist/core/types.d.ts +8 -0
  7. package/dist/core/types.d.ts.map +1 -1
  8. package/dist/engine/defender.d.ts +3 -0
  9. package/dist/engine/defender.d.ts.map +1 -1
  10. package/dist/engine/defender.js +4 -0
  11. package/dist/engine/defender.js.map +1 -1
  12. package/dist/engine/harden.d.ts +2 -0
  13. package/dist/engine/harden.d.ts.map +1 -1
  14. package/dist/engine/harden.js +5 -0
  15. package/dist/engine/harden.js.map +1 -1
  16. package/dist/engine/protector.js +16 -3
  17. package/dist/engine/protector.js.map +1 -1
  18. package/dist/engine/verifier.d.ts.map +1 -1
  19. package/dist/engine/verifier.js +4 -0
  20. package/dist/engine/verifier.js.map +1 -1
  21. package/dist/identity.d.ts +1 -1
  22. package/dist/identity.js +1 -1
  23. package/dist/index.d.ts +2 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/mcp/server.d.ts +27 -0
  28. package/dist/mcp/server.d.ts.map +1 -1
  29. package/dist/mcp/server.js +185 -11
  30. package/dist/mcp/server.js.map +1 -1
  31. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
  32. package/dist/shields/chaff/chaff-generator.js +19 -3
  33. package/dist/shields/chaff/chaff-generator.js.map +1 -1
  34. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
  35. package/dist/shields/exhaustion/frida-capture-saturation.js +5 -1
  36. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
  37. package/dist/shields/formats/archive.d.ts.map +1 -1
  38. package/dist/shields/formats/archive.js +18 -4
  39. package/dist/shields/formats/archive.js.map +1 -1
  40. package/dist/shields/formats/native.d.ts.map +1 -1
  41. package/dist/shields/formats/native.js +4 -0
  42. package/dist/shields/formats/native.js.map +1 -1
  43. package/dist/shields/formats/python-ast-weave.d.ts +46 -0
  44. package/dist/shields/formats/python-ast-weave.d.ts.map +1 -0
  45. package/dist/shields/formats/python-ast-weave.js +414 -0
  46. package/dist/shields/formats/python-ast-weave.js.map +1 -0
  47. package/dist/shields/formats/python-pyc-weave.d.ts +18 -0
  48. package/dist/shields/formats/python-pyc-weave.d.ts.map +1 -0
  49. package/dist/shields/formats/python-pyc-weave.js +598 -0
  50. package/dist/shields/formats/python-pyc-weave.js.map +1 -0
  51. package/dist/shields/formats/python.d.ts +21 -0
  52. package/dist/shields/formats/python.d.ts.map +1 -1
  53. package/dist/shields/formats/python.js +68 -6
  54. package/dist/shields/formats/python.js.map +1 -1
  55. package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
  56. package/dist/shields/javascript/ast-shield.js +68 -2
  57. package/dist/shields/javascript/ast-shield.js.map +1 -1
  58. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -1
  59. package/dist/shields/runtime/memory-diff-shield.js +6 -1
  60. package/dist/shields/runtime/memory-diff-shield.js.map +1 -1
  61. package/dist/shields/tarpit/tarpit-generator.d.ts +15 -0
  62. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
  63. package/dist/shields/tarpit/tarpit-generator.js +122 -25
  64. package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
  65. package/dist/shields/weave/weave-decoy.d.ts +89 -0
  66. package/dist/shields/weave/weave-decoy.d.ts.map +1 -0
  67. package/dist/shields/weave/weave-decoy.js +465 -0
  68. package/dist/shields/weave/weave-decoy.js.map +1 -0
  69. package/dist/ui/reporter.d.ts.map +1 -1
  70. package/dist/ui/reporter.js +2 -0
  71. package/dist/ui/reporter.js.map +1 -1
  72. package/package.json +4 -3
@@ -0,0 +1,598 @@
1
+ /**
2
+ * Structural .pyc decoy weave — remmarshal code objects so unused decoy
3
+ * TYPE_CODE entries sit in customer/module `co_consts` pools.
4
+ *
5
+ * REA `inspect_python_pyc` inventories them as real functions; CPython never
6
+ * executes them (no MAKE_FUNCTION / call references them).
7
+ *
8
+ * Safety rules (engineering red line):
9
+ * - Decode with a FLAG_REF intern table, then re-emit WITHOUT FLAG_REF so
10
+ * shared consts/filename refs expand to concrete copies (behavior-identical).
11
+ * - Original co_code / arg counts / flags / names tables preserved.
12
+ * - On unsupported marshal forms, abort and let caller keep trailer-only honey.
13
+ */
14
+ import { SeededPrng } from "../../core/prng.js";
15
+ const FLAG_REF = 0x80;
16
+ const TYPE_NULL = 0x30;
17
+ const TYPE_NONE = 0x4e;
18
+ const TYPE_FALSE = 0x46;
19
+ const TYPE_TRUE = 0x54;
20
+ const TYPE_STOPITER = 0x53;
21
+ const TYPE_ELLIPSIS = 0x2e;
22
+ const TYPE_INT = 0x69;
23
+ const TYPE_INT64 = 0x49;
24
+ const TYPE_FLOAT_TEXT = 0x66;
25
+ const TYPE_FLOAT = 0x67;
26
+ const TYPE_COMPLEX_TEXT = 0x78;
27
+ const TYPE_COMPLEX = 0x79;
28
+ const TYPE_LONG = 0x6c;
29
+ const TYPE_BYTES = 0x73;
30
+ const TYPE_INTERNED = 0x74;
31
+ const TYPE_REF = 0x72;
32
+ const TYPE_TUPLE = 0x28;
33
+ const TYPE_LIST = 0x5b;
34
+ const TYPE_DICT = 0x7b;
35
+ const TYPE_CODE = 0x63;
36
+ const TYPE_UNICODE = 0x75;
37
+ const TYPE_SET = 0x3c;
38
+ const TYPE_FROZENSET = 0x3e;
39
+ const TYPE_ASCII = 0x61;
40
+ const TYPE_ASCII_INTERNED = 0x41;
41
+ const TYPE_SMALL_TUPLE = 0x29;
42
+ const TYPE_SHORT_ASCII = 0x7a;
43
+ const TYPE_SHORT_ASCII_INTERNED = 0x5a;
44
+ const MAGIC_LAYOUT = new Map([
45
+ // CPython marshal CODE layout families (see Include/internal/pycore_magic_number.h).
46
+ ...range(3390, 3394, "py37"),
47
+ ...range(3400, 3401, "py37"),
48
+ ...range(3410, 3439, "py38"), // 3.8–3.10 (posonly + nlocals/varnames)
49
+ ...range(3450, 3495, "py311"), // 3.11 (localsplus; nlocals dropped)
50
+ ...range(3500, 3531, "py311"), // 3.12
51
+ ...range(3550, 3571, "py311"), // 3.13
52
+ ...range(3600, 3627, "py311"), // 3.14 (Ubuntu 26+ runners)
53
+ ...range(3650, 3699, "py311"), // 3.15 headroom
54
+ ]);
55
+ function range(start, end, layout) {
56
+ const out = [];
57
+ for (let m = start; m <= end; m++)
58
+ out.push([m, layout]);
59
+ return out;
60
+ }
61
+ export function layoutForPycMagic(magic) {
62
+ return MAGIC_LAYOUT.get(magic) ?? null;
63
+ }
64
+ const MUNDANE_STEMS = [
65
+ "reconcile_invoice_batch",
66
+ "hydrate_session_cache",
67
+ "flush_telemetry_buffer",
68
+ "normalize_locale_bundle",
69
+ "schedule_backoff_retry",
70
+ "compact_wal_segment",
71
+ "project_catalog_facet",
72
+ "bind_worker_pool_slot",
73
+ "materialize_report_cursor",
74
+ "encode_transport_frame",
75
+ "observe_metric_histogram",
76
+ "adapt_gateway_policy",
77
+ "reduce_pipeline_shard",
78
+ "capture_audit_sample",
79
+ "prime_connection_pool",
80
+ "transform_lookup_vector",
81
+ ];
82
+ const SCARE_STEMS = [
83
+ "verify_enclave_attestation",
84
+ "derive_hardware_kdf_schedule",
85
+ "authenticate_tpm_quote_digest",
86
+ "negotiate_vsock_channel_cipher",
87
+ "synchronize_hsm_key_slot",
88
+ "unseal_protected_memory_page",
89
+ ];
90
+ class Reader {
91
+ buf;
92
+ layout;
93
+ offset = 0;
94
+ refs = [];
95
+ constructor(buf, layout) {
96
+ this.buf = buf;
97
+ this.layout = layout;
98
+ }
99
+ u8() {
100
+ if (this.offset >= this.buf.length)
101
+ throw new Error("truncated u8");
102
+ return this.buf[this.offset++];
103
+ }
104
+ i32() {
105
+ if (this.offset + 4 > this.buf.length)
106
+ throw new Error("truncated i32");
107
+ const v = this.buf.readInt32LE(this.offset);
108
+ this.offset += 4;
109
+ return v;
110
+ }
111
+ u32() {
112
+ if (this.offset + 4 > this.buf.length)
113
+ throw new Error("truncated u32");
114
+ const v = this.buf.readUInt32LE(this.offset);
115
+ this.offset += 4;
116
+ return v;
117
+ }
118
+ slice(n) {
119
+ if (n < 0 || this.offset + n > this.buf.length)
120
+ throw new Error("truncated slice");
121
+ const s = this.buf.subarray(this.offset, this.offset + n);
122
+ this.offset += n;
123
+ return Buffer.from(s);
124
+ }
125
+ read() {
126
+ const raw = this.u8();
127
+ const flagged = (raw & FLAG_REF) !== 0;
128
+ const type = raw & ~FLAG_REF;
129
+ if (type === TYPE_REF) {
130
+ const idx = this.u32();
131
+ const hit = this.refs[idx];
132
+ if (hit === undefined || hit === null) {
133
+ throw new Error(`bad TYPE_REF ${idx} (have ${this.refs.length})`);
134
+ }
135
+ return hit;
136
+ }
137
+ // CPython reserves FLAG_REF slots for containers BEFORE reading children so
138
+ // nested TYPE_REF indices stay stable (see Python/marshal.c r_object).
139
+ // Match CPython: tuples/lists/dicts/sets R_REF before children;
140
+ // CODE and non-empty frozenset use r_ref_reserve before body (marshal.c).
141
+ const earlyContainer = type === TYPE_TUPLE ||
142
+ type === TYPE_SMALL_TUPLE ||
143
+ type === TYPE_LIST ||
144
+ type === TYPE_DICT ||
145
+ type === TYPE_SET ||
146
+ type === TYPE_FROZENSET ||
147
+ type === TYPE_CODE;
148
+ let slot = -1;
149
+ if (flagged && earlyContainer) {
150
+ slot = this.refs.length;
151
+ this.refs.push(null);
152
+ }
153
+ const value = this.readType(type);
154
+ if (flagged) {
155
+ if (slot >= 0)
156
+ this.refs[slot] = value;
157
+ else
158
+ this.refs.push(value);
159
+ }
160
+ return value;
161
+ }
162
+ readType(type) {
163
+ switch (type) {
164
+ case TYPE_NULL:
165
+ throw new Error("unexpected NULL");
166
+ case TYPE_NONE:
167
+ return { kind: "none" };
168
+ case TYPE_FALSE:
169
+ return { kind: "bool", value: false };
170
+ case TYPE_TRUE:
171
+ return { kind: "bool", value: true };
172
+ case TYPE_STOPITER:
173
+ return { kind: "stopiter" };
174
+ case TYPE_ELLIPSIS:
175
+ return { kind: "ellipsis" };
176
+ case TYPE_INT:
177
+ return { kind: "int", value: this.i32() };
178
+ case TYPE_INT64:
179
+ return { kind: "int64", bytes: this.slice(8) };
180
+ case TYPE_FLOAT:
181
+ return { kind: "float", bytes: this.slice(8) };
182
+ case TYPE_COMPLEX:
183
+ return { kind: "complex", bytes: this.slice(16) };
184
+ case TYPE_FLOAT_TEXT: {
185
+ const n = this.u8();
186
+ return { kind: "float_text", text: this.slice(n).toString("ascii") };
187
+ }
188
+ case TYPE_COMPLEX_TEXT: {
189
+ const n1 = this.u8();
190
+ const real = this.slice(n1).toString("ascii");
191
+ const n2 = this.u8();
192
+ const imag = this.slice(n2).toString("ascii");
193
+ return { kind: "complex_text", real, imag };
194
+ }
195
+ case TYPE_LONG: {
196
+ const n = this.i32();
197
+ const abs = Math.abs(n);
198
+ return {
199
+ kind: "long",
200
+ digits: this.slice(abs * 2),
201
+ negative: n < 0,
202
+ };
203
+ }
204
+ case TYPE_BYTES: {
205
+ const n = this.u32();
206
+ return { kind: "bytes", data: this.slice(n) };
207
+ }
208
+ case TYPE_INTERNED:
209
+ case TYPE_UNICODE:
210
+ case TYPE_ASCII:
211
+ case TYPE_ASCII_INTERNED: {
212
+ const n = this.u32();
213
+ return { kind: "str", data: this.slice(n).toString("utf8") };
214
+ }
215
+ case TYPE_SHORT_ASCII:
216
+ case TYPE_SHORT_ASCII_INTERNED: {
217
+ const n = this.u8();
218
+ return { kind: "str", data: this.slice(n).toString("utf8") };
219
+ }
220
+ case TYPE_SMALL_TUPLE: {
221
+ const n = this.u8();
222
+ const items = [];
223
+ for (let i = 0; i < n; i++)
224
+ items.push(this.read());
225
+ return { kind: "tuple", items };
226
+ }
227
+ case TYPE_TUPLE: {
228
+ const n = this.u32();
229
+ const items = [];
230
+ for (let i = 0; i < n; i++)
231
+ items.push(this.read());
232
+ return { kind: "tuple", items };
233
+ }
234
+ case TYPE_LIST: {
235
+ const n = this.u32();
236
+ const items = [];
237
+ for (let i = 0; i < n; i++)
238
+ items.push(this.read());
239
+ return { kind: "list", items };
240
+ }
241
+ case TYPE_SET:
242
+ case TYPE_FROZENSET: {
243
+ const n = this.u32();
244
+ const items = [];
245
+ for (let i = 0; i < n; i++)
246
+ items.push(this.read());
247
+ return { kind: "set", items, frozen: type === TYPE_FROZENSET };
248
+ }
249
+ case TYPE_DICT: {
250
+ const items = [];
251
+ while (true) {
252
+ const raw = this.buf[this.offset];
253
+ if (raw === undefined)
254
+ throw new Error("dict truncated");
255
+ if ((raw & ~FLAG_REF) === TYPE_NULL) {
256
+ this.u8();
257
+ break;
258
+ }
259
+ const k = this.read();
260
+ const v = this.read();
261
+ items.push([k, v]);
262
+ }
263
+ return { kind: "dict", items };
264
+ }
265
+ case TYPE_CODE:
266
+ return { kind: "code", code: this.readCode() };
267
+ default:
268
+ throw new Error(`unsupported marshal type 0x${type.toString(16)}`);
269
+ }
270
+ }
271
+ readCode() {
272
+ const argcount = this.u32();
273
+ const posonlyargcount = this.layout === "py37" ? null : this.u32();
274
+ const kwonlyargcount = this.u32();
275
+ const nlocals = this.layout === "py311" ? null : this.u32();
276
+ const stacksize = this.i32();
277
+ const flags = this.i32();
278
+ const bytecodeVal = this.read();
279
+ if (bytecodeVal.kind !== "bytes")
280
+ throw new Error("co_code not bytes");
281
+ const constsVal = this.read();
282
+ if (constsVal.kind !== "tuple")
283
+ throw new Error("co_consts not tuple");
284
+ const namesVal = this.read();
285
+ if (namesVal.kind !== "tuple")
286
+ throw new Error("co_names not tuple");
287
+ let localsplusnames = null;
288
+ let localspluskinds = null;
289
+ let varnames = null;
290
+ let freevars = null;
291
+ let cellvars = null;
292
+ if (this.layout === "py311") {
293
+ const lp = this.read();
294
+ if (lp.kind !== "tuple")
295
+ throw new Error("localsplusnames not tuple");
296
+ localsplusnames = lp.items;
297
+ const lk = this.read();
298
+ if (lk.kind !== "bytes")
299
+ throw new Error("localspluskinds not bytes");
300
+ localspluskinds = lk.data;
301
+ }
302
+ else {
303
+ const vn = this.read();
304
+ const fv = this.read();
305
+ const cv = this.read();
306
+ if (vn.kind !== "tuple" || fv.kind !== "tuple" || cv.kind !== "tuple") {
307
+ throw new Error("var/free/cell names not tuples");
308
+ }
309
+ varnames = vn.items;
310
+ freevars = fv.items;
311
+ cellvars = cv.items;
312
+ }
313
+ const filenameVal = this.read();
314
+ if (filenameVal.kind !== "str")
315
+ throw new Error("co_filename not str");
316
+ const nameVal = this.read();
317
+ if (nameVal.kind !== "str")
318
+ throw new Error("co_name not str");
319
+ let qualname = null;
320
+ if (this.layout === "py311") {
321
+ const q = this.read();
322
+ if (q.kind !== "str")
323
+ throw new Error("co_qualname not str");
324
+ qualname = q.data;
325
+ }
326
+ const firstlineno = this.i32();
327
+ const lt = this.read();
328
+ if (lt.kind !== "bytes")
329
+ throw new Error("co_linetable not bytes");
330
+ let exceptiontable = null;
331
+ if (this.layout === "py311") {
332
+ const et = this.read();
333
+ if (et.kind !== "bytes")
334
+ throw new Error("co_exceptiontable not bytes");
335
+ exceptiontable = et.data;
336
+ }
337
+ return {
338
+ argcount,
339
+ posonlyargcount,
340
+ kwonlyargcount,
341
+ nlocals,
342
+ stacksize,
343
+ flags,
344
+ bytecode: bytecodeVal.data,
345
+ consts: constsVal.items,
346
+ names: namesVal.items,
347
+ localsplusnames,
348
+ localspluskinds,
349
+ varnames,
350
+ freevars,
351
+ cellvars,
352
+ filename: filenameVal.data,
353
+ name: nameVal.data,
354
+ qualname,
355
+ firstlineno,
356
+ linetable: lt.data,
357
+ exceptiontable,
358
+ };
359
+ }
360
+ }
361
+ function u32(n) {
362
+ const b = Buffer.alloc(4);
363
+ b.writeUInt32LE(n >>> 0, 0);
364
+ return b;
365
+ }
366
+ function i32(n) {
367
+ const b = Buffer.alloc(4);
368
+ b.writeInt32LE(n, 0);
369
+ return b;
370
+ }
371
+ function encode(value, layout) {
372
+ switch (value.kind) {
373
+ case "none":
374
+ return Buffer.from([TYPE_NONE]);
375
+ case "bool":
376
+ return Buffer.from([value.value ? TYPE_TRUE : TYPE_FALSE]);
377
+ case "stopiter":
378
+ return Buffer.from([TYPE_STOPITER]);
379
+ case "ellipsis":
380
+ return Buffer.from([TYPE_ELLIPSIS]);
381
+ case "int":
382
+ return Buffer.concat([Buffer.from([TYPE_INT]), i32(value.value)]);
383
+ case "int64":
384
+ return Buffer.concat([Buffer.from([TYPE_INT64]), value.bytes]);
385
+ case "float":
386
+ return Buffer.concat([Buffer.from([TYPE_FLOAT]), value.bytes]);
387
+ case "complex":
388
+ return Buffer.concat([Buffer.from([TYPE_COMPLEX]), value.bytes]);
389
+ case "float_text": {
390
+ const t = Buffer.from(value.text, "ascii");
391
+ return Buffer.concat([Buffer.from([TYPE_FLOAT_TEXT, t.length]), t]);
392
+ }
393
+ case "complex_text": {
394
+ const r = Buffer.from(value.real, "ascii");
395
+ const im = Buffer.from(value.imag, "ascii");
396
+ return Buffer.concat([
397
+ Buffer.from([TYPE_COMPLEX_TEXT, r.length]),
398
+ r,
399
+ Buffer.from([im.length]),
400
+ im,
401
+ ]);
402
+ }
403
+ case "long": {
404
+ const n = value.digits.length / 2;
405
+ return Buffer.concat([
406
+ Buffer.from([TYPE_LONG]),
407
+ i32(value.negative ? -n : n),
408
+ value.digits,
409
+ ]);
410
+ }
411
+ case "bytes":
412
+ return Buffer.concat([
413
+ Buffer.from([TYPE_BYTES]),
414
+ u32(value.data.length),
415
+ value.data,
416
+ ]);
417
+ case "str": {
418
+ const b = Buffer.from(value.data, "utf8");
419
+ if (b.length <= 255) {
420
+ return Buffer.concat([Buffer.from([TYPE_SHORT_ASCII, b.length]), b]);
421
+ }
422
+ return Buffer.concat([Buffer.from([TYPE_ASCII]), u32(b.length), b]);
423
+ }
424
+ case "tuple": {
425
+ const parts = value.items.map((it) => encode(it, layout));
426
+ if (value.items.length <= 255) {
427
+ return Buffer.concat([
428
+ Buffer.from([TYPE_SMALL_TUPLE, value.items.length]),
429
+ ...parts,
430
+ ]);
431
+ }
432
+ return Buffer.concat([Buffer.from([TYPE_TUPLE]), u32(value.items.length), ...parts]);
433
+ }
434
+ case "list": {
435
+ const parts = value.items.map((it) => encode(it, layout));
436
+ return Buffer.concat([Buffer.from([TYPE_LIST]), u32(value.items.length), ...parts]);
437
+ }
438
+ case "set": {
439
+ const parts = value.items.map((it) => encode(it, layout));
440
+ return Buffer.concat([
441
+ Buffer.from([value.frozen ? TYPE_FROZENSET : TYPE_SET]),
442
+ u32(value.items.length),
443
+ ...parts,
444
+ ]);
445
+ }
446
+ case "dict": {
447
+ const parts = [Buffer.from([TYPE_DICT])];
448
+ for (const [k, v] of value.items) {
449
+ parts.push(encode(k, layout), encode(v, layout));
450
+ }
451
+ parts.push(Buffer.from([TYPE_NULL]));
452
+ return Buffer.concat(parts);
453
+ }
454
+ case "code":
455
+ return encodeCode(value.code, layout);
456
+ default: {
457
+ const _exhaustive = value;
458
+ return _exhaustive;
459
+ }
460
+ }
461
+ }
462
+ function encodeCode(code, layout) {
463
+ const parts = [Buffer.from([TYPE_CODE]), u32(code.argcount)];
464
+ if (layout !== "py37")
465
+ parts.push(u32(code.posonlyargcount ?? 0));
466
+ parts.push(u32(code.kwonlyargcount));
467
+ if (layout !== "py311")
468
+ parts.push(u32(code.nlocals ?? 0));
469
+ parts.push(i32(code.stacksize), i32(code.flags));
470
+ parts.push(encode({ kind: "bytes", data: code.bytecode }, layout));
471
+ parts.push(encode({ kind: "tuple", items: code.consts }, layout));
472
+ parts.push(encode({ kind: "tuple", items: code.names }, layout));
473
+ if (layout === "py311") {
474
+ parts.push(encode({ kind: "tuple", items: code.localsplusnames ?? [] }, layout));
475
+ parts.push(encode({ kind: "bytes", data: code.localspluskinds ?? Buffer.alloc(0) }, layout));
476
+ }
477
+ else {
478
+ parts.push(encode({ kind: "tuple", items: code.varnames ?? [] }, layout));
479
+ parts.push(encode({ kind: "tuple", items: code.freevars ?? [] }, layout));
480
+ parts.push(encode({ kind: "tuple", items: code.cellvars ?? [] }, layout));
481
+ }
482
+ parts.push(encode({ kind: "str", data: code.filename }, layout));
483
+ parts.push(encode({ kind: "str", data: code.name }, layout));
484
+ if (layout === "py311") {
485
+ parts.push(encode({ kind: "str", data: code.qualname ?? code.name }, layout));
486
+ }
487
+ parts.push(i32(code.firstlineno));
488
+ parts.push(encode({ kind: "bytes", data: code.linetable }, layout));
489
+ if (layout === "py311") {
490
+ parts.push(encode({ kind: "bytes", data: code.exceptiontable ?? Buffer.alloc(0) }, layout));
491
+ }
492
+ return Buffer.concat(parts);
493
+ }
494
+ function buildDecoyCode(layout, name, filename) {
495
+ return {
496
+ argcount: 0,
497
+ posonlyargcount: layout === "py37" ? null : 0,
498
+ kwonlyargcount: 0,
499
+ nlocals: layout === "py311" ? null : 0,
500
+ stacksize: 1,
501
+ flags: 0x40, // CO_NOFREE
502
+ bytecode: Buffer.from([0x64, 0x00, 0x53, 0x00]), // LOAD_CONST 0; RETURN_VALUE
503
+ consts: [{ kind: "none" }],
504
+ names: [],
505
+ localsplusnames: layout === "py311" ? [] : null,
506
+ localspluskinds: layout === "py311" ? Buffer.alloc(0) : null,
507
+ varnames: layout === "py311" ? null : [],
508
+ freevars: layout === "py311" ? null : [],
509
+ cellvars: layout === "py311" ? null : [],
510
+ filename,
511
+ name,
512
+ qualname: layout === "py311" ? name : null,
513
+ firstlineno: 1,
514
+ linetable: Buffer.alloc(0),
515
+ exceptiontable: layout === "py311" ? Buffer.alloc(0) : null,
516
+ };
517
+ }
518
+ function decoyCountForIntensity(intensity) {
519
+ switch (intensity) {
520
+ case "stealth":
521
+ return 2;
522
+ case "balanced":
523
+ return 6;
524
+ case "maximum":
525
+ return 12;
526
+ case "bankrupt":
527
+ return 20;
528
+ default:
529
+ return 6;
530
+ }
531
+ }
532
+ function pickDecoyName(prng, index) {
533
+ const scare = index % 3 === 0;
534
+ const pool = scare ? SCARE_STEMS : MUNDANE_STEMS;
535
+ const stem = pool[prng.nextInt(0, pool.length - 1)];
536
+ return `${stem}_${prng.nextInt(1000, 9999)}`;
537
+ }
538
+ function injectDecoys(code, layout, prng, moduleDecoys, stats, isRoot) {
539
+ // CPython interns identical co_consts tuples via FLAG_REF/TYPE_REF; our Reader
540
+ // returns the same array reference. Copy before mutating so sibling code objects
541
+ // that shared a const tuple do not inherit each other's decoys.
542
+ code.consts = code.consts.slice();
543
+ // Snapshot nested codes before we push decoys into this consts list.
544
+ const nestedCodes = [];
545
+ for (const item of code.consts) {
546
+ if (item.kind === "code")
547
+ nestedCodes.push(item.code);
548
+ }
549
+ for (const child of nestedCodes) {
550
+ injectDecoys(child, layout, prng, 0, stats, false);
551
+ }
552
+ const decoysToAdd = isRoot ? moduleDecoys : code.name !== "<module>" ? 1 : 0;
553
+ if (!isRoot && code.name !== "<module>" && decoysToAdd > 0) {
554
+ stats.woven += 1;
555
+ }
556
+ for (let i = 0; i < decoysToAdd; i++) {
557
+ const nm = pickDecoyName(prng, stats.injected + i);
558
+ const decoy = buildDecoyCode(layout, nm, code.filename || "shielded.py");
559
+ code.consts.push({ kind: "code", code: decoy });
560
+ stats.injected += 1;
561
+ }
562
+ }
563
+ /**
564
+ * Weave unused decoy CODE objects into a CPython .pyc buffer.
565
+ * Returns null when magic/layout is unknown or marshal round-trip fails.
566
+ */
567
+ export function weavePythonPycBuffer(bytes, options = {}) {
568
+ if (bytes.length < 17 || bytes[2] !== 0x0d || bytes[3] !== 0x0a)
569
+ return null;
570
+ const magic = bytes.readUInt16LE(0);
571
+ const layout = layoutForPycMagic(magic);
572
+ if (!layout)
573
+ return null;
574
+ const intensity = options.intensity ?? "balanced";
575
+ const prng = new SeededPrng(options.seed ?? "bla-pyc-weave-v1");
576
+ const moduleDecoys = decoyCountForIntensity(intensity);
577
+ try {
578
+ const header = bytes.subarray(0, 16);
579
+ const reader = new Reader(bytes.subarray(16), layout);
580
+ const root = reader.read();
581
+ if (root.kind !== "code")
582
+ return null;
583
+ const trailing = bytes.subarray(16 + reader.offset);
584
+ const stats = { injected: 0, woven: 0 };
585
+ injectDecoys(root.code, layout, prng, moduleDecoys, stats, true);
586
+ const wovenRoot = encode(root, layout);
587
+ return {
588
+ buffer: Buffer.concat([header, wovenRoot, trailing]),
589
+ decoyCodeObjectsInjected: stats.injected,
590
+ customerDefsWoven: stats.woven,
591
+ layout,
592
+ };
593
+ }
594
+ catch {
595
+ return null;
596
+ }
597
+ }
598
+ //# sourceMappingURL=python-pyc-weave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-pyc-weave.js","sourceRoot":"","sources":["../../../src/shields/formats/python-pyc-weave.ts"],"names":[],"mappings":"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"}