Commit Graph
244 Commits
Author SHA1 Message Date
pancake ae66842877 Release 0.3.0 0.3.0 2026-09-07 13:01:47 +02:00
pancake e6b9eefae9 Use r2-6.2.2 2026-09-07 01:07:16 +02:00
pancake 5d86dff9fa Update all tests to use commands instead of !! oneliners 2026-09-03 18:09:11 +02:00
pancake 14c1847177 Probe Snapshot Layouts for Unknown Hashes 2026-09-01 16:18:24 +02:00
pancake edd90ba5c7 Retain Snapshot Object Value Graph 2026-09-01 15:36:07 +02:00
pancake a7317c7705 Retain Serialized Class Layout Metadata 2026-09-01 15:20:54 +02:00
pancake 3fe9dff0cc Support Dart 3.13 Single Snapshots 2026-09-01 15:16:12 +02:00
pancake 2e85b70bda Parse Versioned Code Cluster Layouts 2026-09-01 14:58:59 +02:00
pancake b45d487fd3 Handle Versioned ObjectPool Entry Bits 2026-09-01 14:54:37 +02:00
pancake b1994cd98e Add Versioned Snapshot Reference Decoding 2026-09-01 14:51:16 +02:00
pancake 3b9d12efea Parse Version-Specific Snapshot Headers 2026-09-01 14:46:26 +02:00
pancake f5d7bb15f1 List dae in the readme 2026-09-01 14:25:59 +02:00
pancake 66b294ab7c Use r2-6.2.0 in the ci 2026-08-22 12:20:03 +02:00
pancake 5a3da4b149 Add w0rdle test asserting recovered function signatures 2026-08-21 19:47:53 +02:00
pancake 545a2161ca Recover Dart function signatures with receiver and return types 2026-08-21 19:47:53 +02:00
pancake 6bad309eb6 Add w0rdle tests for ObjectPool decode, string/method recovery and header JSON 2026-08-21 18:47:48 +02:00
pancake 283242b724 Assert recovered w0rdle method names and pool strings in tests 2026-08-21 17:28:03 +02:00
pancake 81acc1c5df Decode ObjectPool and recover names/strings for Dart 2.x cws=4 snapshots 2026-08-21 17:28:03 +02:00
pancake 5d745cdd6b Add w0rdle Flutter crackme sample and regression tests 2026-08-21 16:43:11 +02:00
pancake 54c7aed1ba Performance improvement 1.6x for -x 2026-08-14 20:39:18 +02:00
pancakeandClaude Fable 5 75ad39a7cb Add macOS cws=8 class-extraction regression test
The cws=8 class/field extraction (f85bd3b) enabled the macOS OBJECT_HEADER
path but only iOS Runner goldens covered it. dump-classes-macos asserts
real class/field recovery on hello.aot (_Closure size=64, _Uri size=96,
field offsets) and, negatively, that the old size=0 fallback garbage is
gone. Verified as a real anchor: reverting the cws==8 gate fails all six
of its assertions.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-08-14 18:25:01 +02:00
pancake 1f36c65729 Use bin.lang=dart instead of repeating that attribute for all 2026-08-14 18:15:06 +02:00
pancake 2e9bb55763 Export class/method/field information for latest r2 2026-08-14 18:06:44 +02:00
pancake f85bd3beae Extract classes and fields from uncompressed (cws=8) snapshots 2026-08-14 10:24:14 +02:00
pancake 791547c855 Updated readme 2026-08-12 17:42:19 +02:00
pancake ef2fd323d7 Fix test with improved output 2026-08-12 16:09:49 +02:00
pancake bea45d8348 Better api names 2026-08-12 15:19:50 +02:00
pancake 43671cfcb3 Fix tests to use only r2 commands 2026-08-12 14:14:17 +02:00
pancake 2db2a74bc7 Fix pp string references on iOS, better perf and more testing 2026-08-12 13:41:45 +02:00
pancake 02efb309a2 Fix ppstring recovery in disasm and add tests 2026-08-12 12:55:44 +02:00
pancake 08001fe45b Tutorial to bypass ssl pinning on iOS/flutter 2026-08-12 12:30:46 +02:00
dependabot[bot] 5d3ffce739 Bump r2 github actions from 2 to 3 2026-08-12 00:14:54 +02:00
pancake b6ea0b8923 Synthetic legacy tags 2026-08-12 00:09:05 +02:00
pancake 540efcf5e1 Fix remaining iOS symbol recovery blockers 2026-08-11 21:07:03 +02:00
pancake 25dc49ef8f Fix -x reading JSON keys that pdj does not emit
* Side effect is 2x speedup
* 3 bugs fixed here affected to 96 instruction window when 28 ops is enough
2026-08-11 19:47:18 +02:00
pancake 6a7e01b0c9 Fix tags reads on iOS 2026-08-11 19:30:45 +02:00
pancake 334c97b88d Resolve the CID-table fallback via the newest profile 2026-08-11 17:13:51 +02:00
pancake f10d30dd6f Replace the fake CID enum with layout-resolved class ids
* Memoize cid table for 100x speedup in -x,-f,-c
* Fix Builtin.TypeName
2026-08-11 16:38:03 +02:00
pancakeandClaude Fable 5 f138b952c9 Fix discovery-stripped-ios test on r2 release builds
The r2 6.1.6 release parses the bare '>' redirect inside the quoted
!!sh -c one-liner and truncates the command, so the test produced no
output on CI while passing against r2 git. Move the pipeline into a
helper script so the r2 command line carries no quotes or redirects.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-08-11 15:54:30 +02:00
pancake 833f89a5d9 Remove legacy cluster walker 2026-08-11 15:49:26 +02:00
pancake 897a98d24d Unify the tag from cid getter for the 3 possible formats 2026-08-11 14:17:36 +02:00
pancake e9fa905562 Handle read-only clusters in uncompressed Dart snapshots 2026-08-11 14:08:07 +02:00
pancake 33bb19bbe0 Refactor modern snapshot parsing around a shared cluster walker 2026-08-11 13:31:11 +02:00
pancake d11ebc35b9 Fix modern fill rules for shifted Dart CIDs 2026-08-11 12:55:41 +02:00
pancakeandClaude Opus 4.8 5592349d99 Update TODO roadmap: rank by priority, record solved items
Rewrites the roadmap now that four items have landed. Adds a status table
(d387c0b fingerprinting/provenance, 2391781 explicit 3.7-3.12 profiles, cd6b655
discovery hardening, 0716a95 structural instruction location) and records the two
corrected assumptions worth remembering: the CID tables were already correct by
floor across 2.10-3.12, and the kDart* symbols survive strip.

Re-ranks everything P0..P4 by concrete failure instead of the old section order,
driven by a new finding: only 1 of 5 sample binaries (mafia, 3.9.2) exercises the
modern cluster decoder, because dart_modern_is_supported_snapshot() also gates on
compressed_word_size == 4. That makes two items P0 -- the modern_get_fill_spec
rules[] table is keyed on absolute 3.6/3.9-era CIDs and desyncs the fill stream on
Dart 3.4/3.5 compressed snapshots (cid 46 TYPE_ARGUMENTS read as LIBRARY_PREFIX,
89 ARRAY as CONST_SET), invisible to CI for exactly that reason; and widening the
modern decoder to uncompressed snapshots, which currently skips most iOS/macOS
samples. Also notes the new latent P2.3: the CID fallback still uses a literal
3.9.2 while unknown-hash fingerprinting now resolves to 3.12.0.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-11 12:32:38 +02:00
pancakeandClaude Opus 4.8 986e2cb42a Locate Dart instruction images without symbols on stripped Mach-O
The four kDart*Snapshot* symbols are external/global and load-bearing (the engine
resolves them at runtime), so they survive strip; but obfuscators/repackagers can
remove them, leaving only the two data snapshots findable by magic scan
(instruction images carry no magic) and iso_instr=0, which disables IT name
recovery.

Add locate_instr_images_structural(): vm_instr = start of the first executable
section; read the Dart Image header (word0=ImageSize) and chain
iso_instr = align_up(vm_instr + ImageSize, 64). Every step is cross-checked
(plausible headers; the isolate image must end where the first data image
begins), so an unknown/gapped layout degrades to 0 (no IT names) rather than junk
addresses. No-op when symbols already resolved the instructions.

Verified against symbol-derived ground truth: Runner (0x4000/0xe700, full 7671
IT entries recovered) and AuthPass (0x5a80/0xfdc0); the gapped macOS hello.aot
safely falls back to 0. Symbol-present bins unchanged; suite green (95 db/cmd,
3 extras, 35 custom).

Adds scripts/strip_macho_symbols.py (zeroes LC_SYMTAB + dyld export trie, since
strip cannot) and test/db/cmd/discovery-stripped-ios which builds the fixture
from the committed Runner App and asserts structural recovery. Remaining
follow-ups tracked in COMMIT2.md.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-11 12:32:01 +02:00
pancake cd6b655c0c Harden Dart snapshot discovery and drop bogus instruction-blob classification
* Only data snapshots carry the 0xf5f5dcdc magic
* A stray f5f5dcdc byte run could poison vm_instr/iso_instr on symbol-stripped Mach-O
* Preserve symbol-derived addresses instead of letting scan guesses overwrite them
2026-08-11 12:08:50 +02:00
pancake 239178152b Fill in the Dart 3.7-3.12 CID/layout tables 2026-08-11 11:29:36 +02:00
pancake d387c0b15b Harden unknown-hash handling and report version provenance
- Replaces the hardcoded 'v3.9.2 defaults' fallback
- Fix load_layout_from_json to use that profile on the -f/-A decode path for
  unknown hashes, instead of a degenerate zeroed layout (cws=0/alignment=0);
- Adds a version_source field to -H, guessed layout is never exact match now
2026-08-11 11:29:32 +02:00
pancake 19d8b96fc5 Fix build for latest r2 2026-07-23 14:12:33 +02:00