01 / Crown jewelCrypto replication
// hooked javax.crypto.Cipher.doFinal
→ input b"5c 8a 91 ff 02 18 …"
→ output b"3a 7e 9c 22 4d a1 …"
// 12 vectors collected
→ python crypto.py
→ validate vs runtime PASS · 12/12
From bytecode to a working Python module.
Static search finds the candidate routines. Runtime tracing collects inputs and outputs. The agent writes a Python replica and validates it byte-for-byte before it lands on disk.
02 / Approval-firstPlanning mode
// proposed plan, 4 steps
1. apktool d target.apk
2. jadx-cli — sources/
3. frida -U -f com.target.app
4. collect → crypto.py
→ approve · edit · cancel
Every active step is proposed before it runs.
Nothing executes on your device, your APK, or your filesystem without your sign-off. Plans are inspectable, editable, and rerunnable from the workspace.
03 / Local onlyPrivacy model
// vendor heartbeat — 9 fields
license_id hashed
account_id anonymous
product_version 1.0.x
hw_fingerprint hashed
activation_ts …
last_check_ts …
build_id …
os_type windows 11
license_status active
Nine fields. Nothing else.
APKs, decompiled code, Frida logs, generated scripts, project names, endpoints, LLM prompts — none of it touches the vendor. Local-first. BYOK Anthropic.
04 / WorkspaceArtifacts
~/.morrigan/projects/com.target/
├── apk/ target.apk + splits
├── decompiled/ jadx + apktool out
├── hooks/ 12 frida scripts
├── traces/ 128 captures
├── crypto.py validated module
├── plan.md
└── session.md markdown report
Every artifact stays on disk, yours to edit.
No hidden state inside the agent. Generated Frida scripts and Python modules are inspectable, version-controllable, and reusable across projects.