Repository navigation
feat(vm): native VM reconstruction foundations and forensic PE/dump/xref APIs - #1
Merged
Merged
Conversation
…evidence inspector
…legacy formatting gate
…ore symbolic side effects
…act entry RIP before materialization
…ransitions before reduction
…d handler effects
…preserve upper bits on partial writes
…te execution and expression DAG
…it parent register
…valuator hot path
…n and semantic parity fixes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Extend Angryier's native reverse-engineering capabilities without expanding target-specific Lua scripts or rewriting METHRA/radare3. This PR stays draft until its tests and code quality checks pass.
Implemented: Themida/VM analysis foundations
LEAprovenance: RIP/absolute = constant, register-relative = derived context, multi-register inputs = explicitly unknown.Runtime::inspect_vm_windowjoins existing Themida indirect-exit classification with VPC candidate heuristics. Structural candidates are not verified VPCs.VmAnalysisSession: explicit transition evidence, VPC/context/code-state-sensitive keys, atomic state/edge budget admission, evidence aggregation and observational CFG projection.reduce_vm_effects: bounded backward dependency slice from explicitly identified register/memory/flags/dispatch effects and guards, reusing existing expression simplifier without dropping memory address dependencies.Implemented: native forensic workflow
PeAddressMapseparating VA, RVA, disk offset and virtual zero-fill, with checked section bounds and overlap rejection.XrefIndexfor source-backed direct calls/branches and RIP-relative memory/IAT SLOT references (without manufacturing callee targets).MiniDumpFilereader, with explicit errors for uncaptured pages and allocation bounds.inspect_xrefs_windowalongsideinspect_vm_window.The above are executable commands for the user's local file paths, not assertions that the Sarin dump was present or the singleton predicate was solved.
Validation
Non-goals / what is not solved
Suggested review gates
cargo check -p angryier-cfg -p angryier-expr -p angryier-loader -p angryier-runtime -p angryier-cli --all-targetscargo test -p angryier-cfg,cargo test -p angryier-expr,cargo test -p angryier-loader,cargo test -p angryier-clicargo test -p angryier-runtime --features "xed script" --test lua_api2026-10-15 — Living evidence history reconciliation
The private analyst history was reviewed but not copied into this repository. The following changes are generic engine features, not application-specific bypasses:
maincommitb3df3e5fixing indirect-call frame mirroring was incorporated via a two-parent merge commit; its four updated Lua script sources are retained.IsProcessorFeaturePresent's approximate success surrogate remains available for exploration but now emits bounded fidelity debt. Its result must not be interpreted as exact Windows behavior.angryier doctorreports compiled revision, working checkout revision, build features and binary SHA-256 without printing user paths by default.Outstanding fidelity work (do not claim complete)
load_pe_driveris not a full Windows userland loader.The independent analysis corpus demonstrates deeper execution but still does not establish complete application initialization or a successful validated UI workflow.
2026-10-15 — Native AngryIR handler-footprint milestone (continued)
crates/angryier-ir/src/vm_footprint.rsand exportedcollect_vm_ir_effectsas an opt-in, single-block structural-effect inventory, backed byBasicIrVerifier.ac7c6cf4082: https://github.com/SWORDIntel/Angryier/actions/runs/38763176062 . Rustfmt applied only to the new file in221be5fc7e30; check its latest CI separately.angryier-irand checks its compilation/clippy alongside the existing CFG, expressions, loader, runtime and forensic suites.Next explicit gate: capture real handler-bounded execution with exact entry state/VPC and per-block SSA namespaces; map retained IR values to symbolic
ExprId(including memory widths/fault effects), and compare reduced handler summaries by deterministic replay and solver equivalence before replacing interpreter execution. Do not automatically infer VM-internal registers from native register names.Continued P0 execution — native VM handler pipeline (2026-10-15)
(low, high), while the expression DAG uses(high, low). The lowering bridge and partial-register splice now preserve correct operand order.MOV EAXnow materializes to the architectural 64-bit RAX parent, clearing upper bits even when the previous RAX upper half was nonzero.d182bf233ef5e246ca1aafc483210a2df1bc6c86.Remaining explicit gates: input-independent symbolic handler relations, differential multi-input/SMT equivalence, fault/alias and full memory-write coverage, measured VPC/context boundary validation, and versioned METHRA semantic handoff. No general Themida auto-devirtualization, universal summary correctness, or Windows threading fidelity is claimed.