Skip to content

Codex/jsconfuser vm two step decoder - #218

Draft
echo094 wants to merge 12 commits into
mainfrom
codex/jsconfuser-vm-two-step-decoder
Draft

echo094 wants to merge 12 commits into
mainfrom
codex/jsconfuser-vm-two-step-decoder

Conversation

@echo094

@echo094 echo094 commented Sep 27, 2026

Copy link
Copy Markdown
Owner

No description provided.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Coverage report too large to inline, see the workflow summary.

@echo094
echo094 force-pushed the codex/jsconfuser-vm-two-step-decoder branch from e0806fe to 0207504 Compare October 13, 2026 00:10
@echo094
echo094 force-pushed the codex/jsconfuser-vm-two-step-decoder branch from 0207504 to 9885dc7 Compare October 20, 2026 23:47
echo094 and others added 12 commits October 26, 2026 00:28
The heaviest jsconfuser and VM cases decode whole real-encoder samples,
and v8 coverage and full parallel load multiply their time. One global
limit replaces the per-test override, so a slow host or a coverage run
is not a red build, while a genuine hang still fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
The full suite runs the VM integration and qualification tests, which
dominate its time. test:light runs the rest for quick checks during an
edit; the full run stays the gate before a commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
docs/jsconfuser.md restated what the decode-nexus skill docs now own, so
two copies could drift; the README points at the skill docs instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
The frontend's first step turns the container's wordcode into typed
instructions, partitions them into functions and checks every operand
reference the later normalizers rely on, so a stage that rewrites the
stream can re-check what it changed. Control is not derived here: the
backend solves it from the switch model's cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
…tion

Container location matches the runtime by structure, and the same
control body arrives braced or bare depending on the encoder's minify
and formatting; this visitor gives control bodies one form first, so
the locator matches one spelling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
…fects

The runtime's names, layout and handler order are randomized, so the
container, boot payload and handler table are found by structure, and
each handler is identified by what it does to the machine state rather
than by its spelling. The fixtures are encoder output with their
generation records.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
Each option stage after compilation (aliased, specialized, macro and
self-modifying opcodes, anti-instrumentation, dispatcher, CFF, string
concealing, concealed constants) rewrites the wordcode; each
normalizer removes only its own stage's additions, using only that
stage's facts, and publishes what it cannot settle as a suspect
for the stage that owns it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
Diagnosis runs the frontend in reverse encoder stage order,
peeling the outermost stage first, and turns the first refusal into
one public decline with the component that refused. It owns the
standalone decline contract the decode entry reports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
A VM frontend hands over a typed switch model; the backend needs no
encoder knowledge. Its control solver computes which cases run, their
handler stacks, edges, indirect targets and reaching definitions from
the cases alone; statement planning, copy planning and structured
emission turn that into JavaScript, with dispatch kept as the review
rendering.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
…kend

Joins the jsconfuser-vm frontend to the shared backend: the diagnosed
program is lowered into the switch model and rendered. The tests run
real encoder output end to end, so each component is judged by the
decoded program's behaviour against its source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
Exposes the VM decoder through the CLI: jsconfuser-vm decodes a
standalone VM program, and the sequential target runs the outer
js-confuser decoder first for layered input. The review renderer
writes an encoded program's dispatch rendering for inspection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
Qualification encodes sources with the pinned encoder, retains the
inputs with their provenance and checks the decoded output's
behaviour, so a fixture can be regenerated and its claims reproduced
from a recorded seed and a checked-in tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com>
@echo094
echo094 force-pushed the codex/jsconfuser-vm-two-step-decoder branch from 9885dc7 to 9e6b61f Compare October 25, 2026 23:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant