opencode-skills-collection 4.1.11 → 4.1.12
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.
- package/bundled-skills/.antigravity-install-manifest.json +5 -1
- package/bundled-skills/agent-reels/SKILL.md +15 -4
- package/bundled-skills/datacircle/SKILL.md +128 -0
- package/bundled-skills/qrx/SKILL.md +131 -0
- package/bundled-skills/qrx/references/prompt-guide.md +30 -0
- package/bundled-skills/qrx/references/rest-api.md +40 -0
- package/bundled-skills/reverse-engineer-anything/SKILL.md +239 -0
- package/bundled-skills/reverse-engineer-anything/references/android-applications.md +34 -0
- package/bundled-skills/reverse-engineer-anything/references/evidence-workflows.md +40 -0
- package/bundled-skills/reverse-engineer-anything/references/javascript-applications.md +70 -0
- package/bundled-skills/reverse-engineer-anything/references/native-and-artifacts.md +146 -0
- package/bundled-skills/reverse-engineer-anything/references/runtime-observation.md +28 -0
- package/bundled-skills/uxkin-research/SKILL.md +127 -0
- package/package.json +1 -1
- package/skills_index.json +124 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reverse-engineer-anything
|
|
3
|
+
description: Use REA to investigate shipped apps, binaries, packages, and runtimes; trace features with evidence, compare versions, or guide reconstruction. Skip ordinary source-code analysis.
|
|
4
|
+
risk: safe
|
|
5
|
+
source: "https://github.com/morluto/rea/tree/main/skill-src/reverse-engineer-anything"
|
|
6
|
+
source_repo: "morluto/rea"
|
|
7
|
+
source_type: community
|
|
8
|
+
date_added: "2026-10-10"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
license_source: "https://github.com/morluto/rea/blob/main/LICENSE"
|
|
11
|
+
metadata:
|
|
12
|
+
version: "34"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# REA
|
|
16
|
+
|
|
17
|
+
## When to Use
|
|
18
|
+
|
|
19
|
+
- Use when a claim depends on a shipped application, binary, package, or requested runtime evidence.
|
|
20
|
+
- Use for decompilation, evidence-backed feature traces, version comparisons, or investigation-guided reconstruction.
|
|
21
|
+
- Skip REA for ordinary source-code analysis of a complete repository.
|
|
22
|
+
|
|
23
|
+
Use REA when a claim depends on a shipped binary or package, decompilation,
|
|
24
|
+
passive application runtime evidence, or comparison with
|
|
25
|
+
behavior not established by available source. For ordinary analysis of a
|
|
26
|
+
complete source repository, use normal repository tools and do not run REA
|
|
27
|
+
readiness or provider commands.
|
|
28
|
+
|
|
29
|
+
## Limitations
|
|
30
|
+
|
|
31
|
+
- The skill supplies investigation guidance; it does not register the REA MCP server or install analysis engines.
|
|
32
|
+
- Native-analysis availability depends on the selected provider, host, and target format. Hopper is separate licensed software; Ghidra and IDA are bring-your-own.
|
|
33
|
+
- Static analysis does not establish runtime behavior or recover original source code. Report provider-specific coverage, partial results, and unknowns.
|
|
34
|
+
- REA runs analysis locally, but the connected model provider may have separate data-handling policies.
|
|
35
|
+
|
|
36
|
+
## Connect only when needed
|
|
37
|
+
|
|
38
|
+
Installing this skill supplies instructions; it does not register the REA MCP
|
|
39
|
+
server, install analysis engines, or add tools to an already-running agent.
|
|
40
|
+
|
|
41
|
+
If REA tools are available and their registration is not known to be stale,
|
|
42
|
+
proceed directly to the target. Do not run diagnostics or setup before every
|
|
43
|
+
investigation. Use the connected server's actual tool list and input schemas;
|
|
44
|
+
a skill installed from repository main may describe capabilities absent from
|
|
45
|
+
an older npm release. Keep complete inline Evidence when that server does not
|
|
46
|
+
advertise retained references.
|
|
47
|
+
|
|
48
|
+
When tools are absent or registration is stale:
|
|
49
|
+
|
|
50
|
+
1. Diagnose without changing files. For Codex, run
|
|
51
|
+
`npx -y rea-agents@latest doctor --client codex --json`. Substitute the current
|
|
52
|
+
supported client: `claude_code`, `claude_desktop`, `codex`, `cursor`,
|
|
53
|
+
`gemini_cli`, `windsurf`, `devin`, `opencode`, `antigravity`, `copilot_cli`,
|
|
54
|
+
`commandcode`, `vscode`, `grok_build`, `omp`, or `grok_bot`. `grok_bot` has no local
|
|
55
|
+
file registration: doctor reports the Grok Bot chat step, and setup does not
|
|
56
|
+
write `mcp.json`. If the client is unknown, use `doctor --json` and
|
|
57
|
+
inspect its registration results before choosing a setup scope.
|
|
58
|
+
2. Distinguish the reason. Missing, malformed, or stale registration needs a
|
|
59
|
+
scoped configuration repair. An aligned registration with no tools in the
|
|
60
|
+
active session needs a restart/reconnection; doctor cannot prove that the
|
|
61
|
+
current agent has connected. A missing provider affects only tasks requiring
|
|
62
|
+
that provider: static JavaScript inspection needs neither Hopper nor Ghidra,
|
|
63
|
+
and Android inspection has separate bring-your-own JADX/Java prerequisites.
|
|
64
|
+
3. For a configuration repair, prepare the read-only plan:
|
|
65
|
+
`npx -y rea-agents@latest setup --client codex --dry-run --json`.
|
|
66
|
+
Use the current client's ID, show its exact proposed paths, backups, and
|
|
67
|
+
changes, and obtain approval before setup writes configuration or installs
|
|
68
|
+
Hopper. Setup normally installs the matching bundled skill too; include that
|
|
69
|
+
replacement in the reviewed plan. After approval, apply the same scope with
|
|
70
|
+
`npx -y rea-agents@latest setup --client codex --yes`. Add `--install-hopper`
|
|
71
|
+
only if that separate installation was needed and explicitly approved.
|
|
72
|
+
4. Restart/reconnect the affected agent. Verify that REA tools actually appear
|
|
73
|
+
in the session, then resume the original investigation. If they remain
|
|
74
|
+
absent, inspect the client's MCP launch error rather than repeating setup.
|
|
75
|
+
|
|
76
|
+
REA setup never installs or upgrades Node.js, npm, Homebrew, Java, Ghidra, IDA,
|
|
77
|
+
JADX, Binwalk, or Unblob. Use existing prerequisites; do not install unrelated
|
|
78
|
+
software to repair
|
|
79
|
+
MCP registration. For an unsupported client, use manual stdio registration
|
|
80
|
+
with a version-pinned `rea-agents` package or continue through the CLI.
|
|
81
|
+
|
|
82
|
+
A concrete CLI fallback for an operator-supplied JavaScript tree or ASAR is:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
No MCP registration or native engine is required. Read the returned Evidence,
|
|
89
|
+
graph, limitations, and unknowns with the same care as an MCP result; the CLI
|
|
90
|
+
returns the Evidence record directly. This fallback does not establish that
|
|
91
|
+
MCP is configured. Native CLI tasks still require their selected engine.
|
|
92
|
+
|
|
93
|
+
## Route the target first
|
|
94
|
+
|
|
95
|
+
Choose the first tool from the target the user supplied. Use `open_binary` for
|
|
96
|
+
active-target native or archive workflows; target-free tools take their own
|
|
97
|
+
explicit path or endpoint and do not need it.
|
|
98
|
+
|
|
99
|
+
- ASAR or extracted JavaScript/Electron tree:
|
|
100
|
+
`analyze_javascript_application`.
|
|
101
|
+
- Archive/package member inventory (ZIP/APK/IPA/MSIX/AppX or DMG):
|
|
102
|
+
`open_binary` with the supplied local path; use `inspect_artifact` when its
|
|
103
|
+
graph and findings help answer the question.
|
|
104
|
+
- Android APK code, classes, methods, or incoming references:
|
|
105
|
+
`inspect_android_package`, then focused Android tools when advertised.
|
|
106
|
+
Archive member inventory still uses the archive route above.
|
|
107
|
+
- Managed PE/CLI assembly: `inspect_managed_artifact`.
|
|
108
|
+
- Firmware image: `inspect_firmware_regions` when advertised. Use
|
|
109
|
+
`extract_firmware` when extraction is requested, with a caller-selected new
|
|
110
|
+
absolute output directory. These tools use caller-supplied Binwalk/Unblob on
|
|
111
|
+
Linux; see the [firmware guide](https://github.com/morluto/rea/blob/main/docs/firmware-analysis.md).
|
|
112
|
+
- .NET NativeAOT PE/ELF: native Ghidra analysis. Native code can yield pseudocode;
|
|
113
|
+
consult the NativeAOT workflow in `references/native-and-artifacts.md` for
|
|
114
|
+
optional metadata recovery and its supported host/layout boundary.
|
|
115
|
+
- User-owned browser page already open: `list_browser_targets`.
|
|
116
|
+
- Retained HAR/native mitmproxy capture: `inspect_web_network_capture`. Select
|
|
117
|
+
original record ordinals when useful; inspect producer fields and byte/number
|
|
118
|
+
sidecars without fetching recorded URLs or claiming live attribution. See
|
|
119
|
+
[historical captures](https://github.com/morluto/rea/blob/main/docs/web-network-captures.md) for the exact upstream
|
|
120
|
+
profile and credential exclusions.
|
|
121
|
+
- User-owned Electron runtime already open: `list_electron_targets`.
|
|
122
|
+
- Explicit local EVM bytecode carrier: `inspect_evm_interface` with caller-selected
|
|
123
|
+
`raw` or `hex` encoding. Preserve carrier/decoded digests and treat selectors,
|
|
124
|
+
argument strings and mutability as inferred candidates; this performs no chain
|
|
125
|
+
lookup or target execution. See the
|
|
126
|
+
[EVM bytecode guide](https://github.com/morluto/rea/blob/main/docs/evm-bytecode.md).
|
|
127
|
+
- Explicit Linux ELF file for offline layout, symbols, relocations or static
|
|
128
|
+
mitigation evidence: `inspect_binary_layout`. This target-free operation uses
|
|
129
|
+
caller-supplied pwntools without opening a disassembler database. Preserve its
|
|
130
|
+
raw locations and inference/coverage limits; see the
|
|
131
|
+
[offline binary guide](https://github.com/morluto/rea/blob/main/docs/binary-diagnostics.md).
|
|
132
|
+
- Supplied Linux x86-64 ELF core: `inspect_recorded_crash`. Read every recorded
|
|
133
|
+
thread, raw note and source-bound register without opening a live target.
|
|
134
|
+
Historical PIDs do not select live processes. Request `include_debugger_context`
|
|
135
|
+
only when core-only mapping candidates help; see the
|
|
136
|
+
[recorded crash guide](https://github.com/morluto/rea/blob/main/docs/recorded-crashes.md).
|
|
137
|
+
- Native executable, library, or analysis database: `open_binary`, then
|
|
138
|
+
use focused analysis tools directly; call `binary_overview` when metadata or
|
|
139
|
+
inventory context is useful and available from the selected provider.
|
|
140
|
+
|
|
141
|
+
For an existing IDA MCP configuration, use `open_binary` with the original
|
|
142
|
+
input binary and `provider_id: "ida"`; do not pass an `.idb` or `.i64` database.
|
|
143
|
+
The legacy attached profile binds the already-open GUI input by SHA-256 and
|
|
144
|
+
leaves its database open. The modern headless profile creates and closes an
|
|
145
|
+
owned private database without saving. Installation and registration reuse
|
|
146
|
+
[mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp); see the
|
|
147
|
+
[IDA provider guide](https://github.com/morluto/rea/blob/main/docs/ida-provider.md).
|
|
148
|
+
Proceed directly to `analyze_function`, pseudocode, or function/string searches
|
|
149
|
+
after opening; IDA does not supply `binary_overview`. Consult session availability
|
|
150
|
+
when composing broader workflows. Modern direct callers and unsupported dossier
|
|
151
|
+
facets remain unknown; live IDA results are not replayed from snapshots.
|
|
152
|
+
|
|
153
|
+
If the app is missing, ask which app to inspect. Resolve a human-readable app
|
|
154
|
+
name to one clear installed artifact when possible; ask only when matches are
|
|
155
|
+
ambiguous. Never choose an example app on the user's behalf.
|
|
156
|
+
|
|
157
|
+
In a target-free session, use `open_binary` to bind any archive/package or
|
|
158
|
+
native target whose analysis tool operates on the active target. Do not call an
|
|
159
|
+
unadvertised tool; inspect `binary_session` with `{}` and its
|
|
160
|
+
`result.tool_availability` for availability reasons and remediation. The tool
|
|
161
|
+
list stays complete; availability depends on the operation, target, and host.
|
|
162
|
+
|
|
163
|
+
## Work summary-first
|
|
164
|
+
|
|
165
|
+
Start with the default result and use its inline Evidence and graph context.
|
|
166
|
+
Do not repeat an identical tool call. Make a focused follow-up only when the
|
|
167
|
+
returned result leaves a specific question unanswered.
|
|
168
|
+
|
|
169
|
+
If MCP reports `resource_constraint` with `details.resource: "transport"`, call
|
|
170
|
+
`inspect_analysis_view` with its reported same-session Evidence reference for a
|
|
171
|
+
summary, one section/module, or a stable page. Use `trace_application_feature`
|
|
172
|
+
once a seed is known, or call `export_evidence_bundle` to write the complete
|
|
173
|
+
session to a selected path. The analysis remains complete in the ledger; avoid
|
|
174
|
+
repeating it merely to request the same oversized response. Complete CLI JSON
|
|
175
|
+
output also streams without a single MCP frame.
|
|
176
|
+
|
|
177
|
+
Every conclusion must distinguish observations, inferences, and unknowns. Cite
|
|
178
|
+
Evidence IDs, preserve limitations and incomplete coverage, and never imply
|
|
179
|
+
that static analysis observed execution. Runtime requests execute the declared
|
|
180
|
+
target and lifecycle; do not broaden the target or action beyond those fields.
|
|
181
|
+
|
|
182
|
+
Within the user's requested investigation, call available analysis tools
|
|
183
|
+
directly. REA does not require permission grants or per-call approval flags.
|
|
184
|
+
Follow the declared request scope and the host's actual access requirements.
|
|
185
|
+
|
|
186
|
+
## Plan broader investigations
|
|
187
|
+
|
|
188
|
+
For requests that span multiple features or subsystems, use a staged workflow:
|
|
189
|
+
|
|
190
|
+
1. Turn the request into a checklist of questions and the evidence each answer
|
|
191
|
+
needs. Resolve target identity and constraints from the conversation and
|
|
192
|
+
workspace before asking for information again.
|
|
193
|
+
2. Inspect the current REA session, artifact identity, saved analysis database,
|
|
194
|
+
bookmarks, and prior evidence. Reuse matching state; do not open duplicate
|
|
195
|
+
sessions or repeat identical analysis.
|
|
196
|
+
3. Start with the smallest useful overview or inventory. Follow each question
|
|
197
|
+
from its entry point through relevant data and state changes to its result.
|
|
198
|
+
Batch related operations around a specific hypothesis, then expand only when
|
|
199
|
+
the returned evidence leaves a concrete gap.
|
|
200
|
+
4. Inspect relevant packaged resources and configuration alongside code when
|
|
201
|
+
they affect the question. Use format-aware inventory and parsers; do not
|
|
202
|
+
infer behavior from filenames, strings, or layout alone.
|
|
203
|
+
5. Corroborate a conclusion with the evidence type it requires. Use runtime
|
|
204
|
+
observation only when static evidence cannot answer the question and the
|
|
205
|
+
required host runtime and OS access are available. For JavaScript behavior,
|
|
206
|
+
run probes against the actual app through the available browser, Electron,
|
|
207
|
+
or process capture workflow.
|
|
208
|
+
6. Decompose work into independent questions. When parallel workers are
|
|
209
|
+
available and the questions do not depend on one another, assign distinct
|
|
210
|
+
scopes, point workers to existing evidence, and ask them to return sources,
|
|
211
|
+
conclusions, and unresolved gaps. Otherwise, work sequentially.
|
|
212
|
+
7. Keep a concise finding ledger linking each conclusion to Evidence IDs,
|
|
213
|
+
confidence/evidence type, search boundary, and remaining unknowns. Update
|
|
214
|
+
the shared index or investigation report so later passes can reuse results.
|
|
215
|
+
|
|
216
|
+
Before finishing, revisit the original checklist. Mark each question as
|
|
217
|
+
answered, partially answered, or unresolved based on its evidence; keep
|
|
218
|
+
bounded negative searches bounded, and do not describe a broad investigation
|
|
219
|
+
as complete while required questions remain open.
|
|
220
|
+
|
|
221
|
+
## Read only the relevant guide
|
|
222
|
+
|
|
223
|
+
- Native binaries, managed assemblies, archives, and extraction:
|
|
224
|
+
[references/native-and-artifacts.md](references/native-and-artifacts.md)
|
|
225
|
+
- ASARs, extracted JavaScript, feature tracing, and version comparison:
|
|
226
|
+
[references/javascript-applications.md](references/javascript-applications.md)
|
|
227
|
+
- Android APK declarations, classes, methods, and static references:
|
|
228
|
+
[references/android-applications.md](references/android-applications.md)
|
|
229
|
+
- Passive browser/Electron observation and static/runtime reconciliation:
|
|
230
|
+
[references/runtime-observation.md](references/runtime-observation.md)
|
|
231
|
+
- Evidence paging, comparisons, residual unknowns, and verification:
|
|
232
|
+
[references/evidence-workflows.md](references/evidence-workflows.md)
|
|
233
|
+
|
|
234
|
+
## Finish the task
|
|
235
|
+
|
|
236
|
+
Explain findings in plain language and tie them to returned evidence. When the
|
|
237
|
+
user asks to build something, use normal coding tools and separate observed
|
|
238
|
+
behavior from design choices. Close an opened native session with
|
|
239
|
+
`close_binary` when the investigation is complete.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Android application artifacts
|
|
2
|
+
|
|
3
|
+
Use the connected server's advertised Android tools. Repository main and npm
|
|
4
|
+
4.1.0 include this family. A skill installation alone cannot add it to an
|
|
5
|
+
older server.
|
|
6
|
+
|
|
7
|
+
Start with `inspect_android_package` on the caller's APK path for package
|
|
8
|
+
identity, manifest declarations, coverage, and inline Evidence. Use
|
|
9
|
+
`search_android_classes` to find candidates, `inspect_android_class` for one
|
|
10
|
+
class's members, `inspect_android_method` for decompilation, and
|
|
11
|
+
`trace_android_references` for incoming static references. Each call takes its
|
|
12
|
+
own APK path and explicit selectors; do not open a native session first.
|
|
13
|
+
Choose an `overload_index` from the class inventory when methods are ambiguous
|
|
14
|
+
instead of guessing.
|
|
15
|
+
|
|
16
|
+
The provider requires a separately supplied headless JADX MCP JAR 0.7.1 and
|
|
17
|
+
Java 17 or newer. `REA_JADX_MCP_JAR` selects the absolute JAR path; `JAVA_HOME`
|
|
18
|
+
can select Java. REA setup does not install or configure that JAR, and doctor
|
|
19
|
+
provider scopes cover Hopper/Ghidra rather than JADX. Use existing tools and
|
|
20
|
+
report missing prerequisites for the Android task specifically.
|
|
21
|
+
|
|
22
|
+
Linux and macOS use the POSIX owned-process boundary. Windows x64 requires the
|
|
23
|
+
matching bundled native controls and uses an owned Job Object with bidirectional
|
|
24
|
+
stdio. A full JDK, including `jdk.compiler`, is required on every host; Windows
|
|
25
|
+
`JAVA_HOME` selects `bin\java.exe`. Consult the Android guide for actual host
|
|
26
|
+
verification coverage. Calls use one worker and provider deadlines; optional
|
|
27
|
+
`REA_JADX_HEAP_MIB` selects the JVM heap. The APK is never launched,
|
|
28
|
+
and no emulator is required.
|
|
29
|
+
|
|
30
|
+
Manifest entries and decompiled text are static observations, not execution or
|
|
31
|
+
policy enforcement. Incoming references are recovered static relationships;
|
|
32
|
+
reflection, dynamic loading, and unresolved calls remain unknown. Preserve
|
|
33
|
+
artifact digests, locations, diagnostics, and incomplete coverage. For archive
|
|
34
|
+
members rather than code analysis, use `open_binary` and `inspect_artifact`.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Evidence, comparison, and verification workflows
|
|
2
|
+
|
|
3
|
+
Evidence-producing tools return the complete Evidence record directly in MCP
|
|
4
|
+
`structuredContent` and CLI JSON. Read `normalized_result` for operation data,
|
|
5
|
+
and cite `evidence_id` when another tool or your explanation needs a stable
|
|
6
|
+
reference. Preserve authority, limitations, coverage, and residual unknowns. If a result
|
|
7
|
+
is incomplete or paginated, continue only when the remaining data matters to
|
|
8
|
+
the task; do not fetch a bundle or resource merely to read a result already
|
|
9
|
+
returned inline. When complete `inspect_binary_layout` or
|
|
10
|
+
`analyze_javascript_application` Evidence is already retained, call
|
|
11
|
+
`inspect_analysis_view` for a summary, one section/symbol/module, or a stable
|
|
12
|
+
page instead of repeating the producer.
|
|
13
|
+
|
|
14
|
+
Use `record_unknown` to track unresolved questions in the user's investigation
|
|
15
|
+
and name the authority or environment still required. Supply supporting and
|
|
16
|
+
contradicting evidence IDs. It updates the session registry directly.
|
|
17
|
+
Use `update_unknown` with the current revision; reread after a stale revision
|
|
18
|
+
instead of retrying blindly. Only qualifying observed evidence can verify a
|
|
19
|
+
resolution.
|
|
20
|
+
|
|
21
|
+
Use comparisons with complete, compatible page sets when claiming equivalence
|
|
22
|
+
or absence:
|
|
23
|
+
|
|
24
|
+
- `compare_artifacts` compares inventory pages by occurrence path, content,
|
|
25
|
+
metadata, and graph relations.
|
|
26
|
+
- `compare_functions` compares explicit function Evidence, not fuzzy
|
|
27
|
+
whole-binary matches.
|
|
28
|
+
- `compare_bundles` compares canonical bundle membership and unknown history.
|
|
29
|
+
- `find_changed_behavior` combines existing comparisons; static differences
|
|
30
|
+
remain candidates, not causal proof.
|
|
31
|
+
- `build_call_path` needs explicit function dossiers from one artifact/provider;
|
|
32
|
+
an incomplete frontier makes absence unknown.
|
|
33
|
+
- `correlate_static_and_runtime` uses explicit mappings; matching patterns are
|
|
34
|
+
hypotheses, not causality.
|
|
35
|
+
- `verify_reconstruction` evaluates a finite typed specification. A pass covers
|
|
36
|
+
only declared comparable claims, not global equivalence.
|
|
37
|
+
|
|
38
|
+
Process captures are opt-in behavioral evidence, not a security sandbox. V3
|
|
39
|
+
captures cannot be upgraded to V4; rerun the original scenario. Distinguish root
|
|
40
|
+
exit from descendant settlement and require freshness when the task needs it.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# JavaScript and Electron application artifacts
|
|
2
|
+
|
|
3
|
+
Use `analyze_javascript_application` directly on the operator-supplied ASAR or
|
|
4
|
+
extracted tree. The complete result, graph, and Evidence context are returned
|
|
5
|
+
inline when they fit the MCP frame. Source-map contents are part of the static analysis. Start from its
|
|
6
|
+
findings, coverage, unknowns, and graph context, then make a focused follow-up
|
|
7
|
+
only when a specific question remains unanswered.
|
|
8
|
+
|
|
9
|
+
An oversized response reports `resource_constraint` and
|
|
10
|
+
`details.resource: "transport"`. Reuse
|
|
11
|
+
`details.reported_limits.evidence_reference` with `inspect_analysis_view` for a
|
|
12
|
+
summary, one module, or a stable page of module identities. Use
|
|
13
|
+
`trace_application_feature` once a module, route, or string seed is known.
|
|
14
|
+
`export_evidence_bundle` writes the complete canonical session to a
|
|
15
|
+
caller-selected file. These workflows keep the original Evidence and coverage;
|
|
16
|
+
a broad follow-up can also exceed framing.
|
|
17
|
+
|
|
18
|
+
BrowserWindow preferences, preload and contextBridge surfaces, IPC
|
|
19
|
+
registrations, utility processes, and native binding requests are static syntax
|
|
20
|
+
observations. Only a unique exact literal IPC channel match supports an inferred
|
|
21
|
+
pairing. Dynamic or ambiguous channels remain unresolved. A requested `.node`
|
|
22
|
+
member is not a verified native export. Never claim runtime reachability,
|
|
23
|
+
registration, defaults, or policy enforcement from static analysis.
|
|
24
|
+
|
|
25
|
+
Use `trace_application_feature` on existing application Evidence for one
|
|
26
|
+
literal node ID, route, string, API, IPC channel, module, or native export.
|
|
27
|
+
Choose a direction and reuse the returned application Evidence ID when the
|
|
28
|
+
connected server advertises retained references, or supply complete Evidence
|
|
29
|
+
inline. Include
|
|
30
|
+
Hopper or Ghidra Evidence only when its artifact digest matches exactly.
|
|
31
|
+
|
|
32
|
+
For version comparison, analyze each version once, then call
|
|
33
|
+
`compare_application_versions`. Accept only its digest, source-map, structural
|
|
34
|
+
fingerprint, or non-module semantic matches. Module ordinals and minified names
|
|
35
|
+
are not persistent identity. Report added or removed only with complete
|
|
36
|
+
opposite-side coverage; otherwise report unknown.
|
|
37
|
+
|
|
38
|
+
When the question asks how one exact exported callable's returned object shape
|
|
39
|
+
changed, analyze each version once and then call
|
|
40
|
+
`compare_javascript_export_shapes` with explicit module paths and export names.
|
|
41
|
+
Use the returned IDs on the same connection, or complete inline Evidence
|
|
42
|
+
records, from both analysis calls. Accept variant
|
|
43
|
+
pairing only through the tool's unique exact literal discriminant. Read
|
|
44
|
+
`property_inventories` and each change's `presence` before treating `unknown` as
|
|
45
|
+
"the name was not observed": inventories list observed property names even when
|
|
46
|
+
values stay unknown, with a `source_range` for each paired or unpaired variant.
|
|
47
|
+
Array holes and mutation-invalidated slots are not observed properties.
|
|
48
|
+
Complete parent coverage reports presence-only
|
|
49
|
+
`added`/`removed` independently of unresolved values. Cite the
|
|
50
|
+
comparison Evidence and report JSON Pointer changes; dynamic values, ambiguous
|
|
51
|
+
variants, and incomplete parent-property coverage stay unknown. This is static
|
|
52
|
+
inference, not runtime behavior. When runtime semantics are needed, run
|
|
53
|
+
behavioral probes against the relevant application versions and capture them
|
|
54
|
+
through the available browser, Electron, or process workflows.
|
|
55
|
+
|
|
56
|
+
## Reusing application Evidence
|
|
57
|
+
|
|
58
|
+
When advertised by the connected server, application trace and compare tools
|
|
59
|
+
accept complete inline Evidence or
|
|
60
|
+
`{"kind":"retained-evidence","evidence_id":"ev_<64 lowercase hex characters>"}`
|
|
61
|
+
for their application input (`application`, or `left`/`right`). `inspect_analysis_view`
|
|
62
|
+
uses the same retained-reference form in `source`, or portable inline Evidence,
|
|
63
|
+
to project a summary, module page, or one module with its recorded observations. This notation is
|
|
64
|
+
a template: replace it with the actual returned ID. Versions before 4.1.0 accept only full
|
|
65
|
+
inline Evidence. Use the exact ID
|
|
66
|
+
returned by the producer on the same MCP connection. Resolution does not run
|
|
67
|
+
analysis or select a provider; findings remain inline. Native observation
|
|
68
|
+
arrays still take full Evidence. `close_binary` clears retained references;
|
|
69
|
+
export a bundle before closing, or supply portable inline Evidence in another
|
|
70
|
+
connection. A missing reference includes its ID and recovery guidance.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Native, managed, and packaged artifacts
|
|
2
|
+
|
|
3
|
+
## Recorded Linux crashes
|
|
4
|
+
|
|
5
|
+
Use `inspect_recorded_crash` with an explicit Linux x86-64 ELF core path to
|
|
6
|
+
inspect historical thread registers, signals, raw notes and original file
|
|
7
|
+
ranges. It is independent of the active disassembler target. Source-bound
|
|
8
|
+
register values and note bytes are observations; missing notes, signal-thread
|
|
9
|
+
association and current executable/library identity remain unknown. PIDs are
|
|
10
|
+
historical metadata and never authorize live attach or control.
|
|
11
|
+
|
|
12
|
+
The optional `include_debugger_context` facet adds mapping candidates through
|
|
13
|
+
caller-supplied GDB/pwndbg in an owned core-only session. Display names do not
|
|
14
|
+
establish current file identity; zero reported flags leave permissions unknown.
|
|
15
|
+
Requested unavailable context fails with setup guidance. See
|
|
16
|
+
[recorded crashes](https://github.com/morluto/rea/blob/main/docs/recorded-crashes.md)
|
|
17
|
+
for exact upstream profiles, bounds and verification coverage.
|
|
18
|
+
|
|
19
|
+
## Offline ELF layout
|
|
20
|
+
|
|
21
|
+
Use `inspect_binary_layout` with an explicit local ELF path for file-backed
|
|
22
|
+
sections, symbols, relocations, linkage names, and static mitigation inferences
|
|
23
|
+
without opening a disassembler target. When that complete record is already
|
|
24
|
+
retained, call `inspect_analysis_view` for a summary, mitigations or linkage
|
|
25
|
+
facet, one section or symbol, or a stable page. Do not re-run the decoder to
|
|
26
|
+
read a single object.
|
|
27
|
+
|
|
28
|
+
## Native targets
|
|
29
|
+
|
|
30
|
+
After `open_binary`, use focused search, procedure, or function tools directly.
|
|
31
|
+
Use `binary_overview` when target metadata or inventory context helps answer the
|
|
32
|
+
question. Prefer literal search, names, decompilation, callers, callees, and
|
|
33
|
+
cross-references. Addresses and recovered pseudocode are analysis observations,
|
|
34
|
+
not original source. Provider unavailability and unsupported metadata remain
|
|
35
|
+
unknown rather than false.
|
|
36
|
+
|
|
37
|
+
To see which functions or Objective-C methods a Mach-O actually calls in one
|
|
38
|
+
run, use `observe_native_calls` with explicit breakpoints and a bounded
|
|
39
|
+
`duration_ms`/`max_events`. It launches a new process under LLDB, so the target
|
|
40
|
+
runs and may change files or use the network. Hardened-runtime targets need the
|
|
41
|
+
`get-task-allow` entitlement.
|
|
42
|
+
|
|
43
|
+
Use `binary_session` with no arguments to check the open target, selected
|
|
44
|
+
provider, and alignment. Its default `result.tool_availability` includes the
|
|
45
|
+
complete tool inventory with availability reasons and remediation. When choosing
|
|
46
|
+
a tool, use its entry in that result; `tools/list` retains the complete catalog
|
|
47
|
+
when the target or provider state changes.
|
|
48
|
+
|
|
49
|
+
## DOS MZ with Ghidra
|
|
50
|
+
|
|
51
|
+
For an admitted DOS MZ target, use `inspect_native_load_image` to check measured
|
|
52
|
+
loaded bytes, file mappings, relocations and the entry against the immutable
|
|
53
|
+
snapshot. Keep `mismatch` and `unsupported` explicit. Verified import covers the
|
|
54
|
+
reported static image, not runtime DOS or PC-98 hardware behavior.
|
|
55
|
+
|
|
56
|
+
Use `read_bytes` for initialized analysis memory and `address_to_file_offset` to
|
|
57
|
+
anchor one observed address to original file bytes. Loader fixups can change a
|
|
58
|
+
word; a source offset does not imply byte equality. Complete function body ranges
|
|
59
|
+
use inclusive ends and can contain gaps. Do not treat the enclosing span as code.
|
|
60
|
+
For packed targets, retain the original and separately derived artifact identities;
|
|
61
|
+
decompiling an unpacking stub does not recover the unpacked program.
|
|
62
|
+
|
|
63
|
+
When reading Objective-C dispatch metadata, distinguish class implementation
|
|
64
|
+
methods from protocol requirements: class methods report null requirement
|
|
65
|
+
flags, while decoded protocol declarations retain required and optional facts.
|
|
66
|
+
Property attributes remain raw name/value tokens; use the property's
|
|
67
|
+
`atomicity` field for the decoded `N` marker or the default atomic behavior.
|
|
68
|
+
Null class/meta flags, ivar counts, atomicity, or read-only values mean the
|
|
69
|
+
selected provider did not establish that fact. Symbol names alone do not prove
|
|
70
|
+
that a class is a root class or has no ivars.
|
|
71
|
+
|
|
72
|
+
## Managed PE/CLI
|
|
73
|
+
|
|
74
|
+
Start with `inspect_managed_artifact`. REA's canonical managed inspection is
|
|
75
|
+
execution-free: do not claim it loaded, reflected, executed, or resolved the
|
|
76
|
+
assembly. Keep managed/native boundaries and unavailable reconstruction facts
|
|
77
|
+
explicit. A bring-your-own reconstruction oracle is separate from the canonical
|
|
78
|
+
parser and must not become an implicit setup dependency.
|
|
79
|
+
|
|
80
|
+
### .NET NativeAOT
|
|
81
|
+
|
|
82
|
+
NativeAOT binaries contain native machine code, so ordinary CIL decompilers
|
|
83
|
+
cannot recover the original method bodies. When managed metadata/CIL is absent,
|
|
84
|
+
classify that as a native-analysis route rather than claiming source recovery.
|
|
85
|
+
Open the native image with the selected deep provider and inspect functions,
|
|
86
|
+
strings, calls, and references; describe decompiler output as pseudocode and
|
|
87
|
+
inference.
|
|
88
|
+
|
|
89
|
+
NativeAOT images can be PE/COFF, ELF, or Mach-O executables and shared
|
|
90
|
+
libraries. Use file bytes and loader metadata rather than suffixes to identify
|
|
91
|
+
them. For packaged apps, inventory/extract with REA's artifact tools and retain
|
|
92
|
+
the exact contained image identity. PDB, ELF debug, or dSYM sidecars are
|
|
93
|
+
additional evidence only when the provider accepts and matches them.
|
|
94
|
+
|
|
95
|
+
For deeper type recovery, the optional third-party
|
|
96
|
+
[Ghidra NativeAOT analyzer](https://github.com/Washi1337/ghidra-nativeaot)
|
|
97
|
+
rehydrates ReadyToRun metadata and can recover method tables, type relationships,
|
|
98
|
+
frozen objects, and strings. This is a Ghidra extension with its own install and
|
|
99
|
+
interactive workflow; it is not currently part of REA's managed parser or
|
|
100
|
+
headless Ghidra bridge. Treat its annotations as analysis evidence, retain the
|
|
101
|
+
binary identity, and do not present recovered types as original source. Header
|
|
102
|
+
discovery may require a symbol or analyst identification of the ReadyToRun
|
|
103
|
+
header, depending on the binary and analyzer version.
|
|
104
|
+
|
|
105
|
+
## Packages and extraction
|
|
106
|
+
|
|
107
|
+
Use `inspect_artifact` for application bundles, archives, ZIP/APK/IPA/MSIX/AppX,
|
|
108
|
+
ASAR, or DMG inputs when the artifact graph and findings help answer the
|
|
109
|
+
question. It returns the complete artifact graph inline. Cite graph manifest
|
|
110
|
+
IDs when using them.
|
|
111
|
+
|
|
112
|
+
For an IPA or a macOS `.app`, ZIP, or DMG, pass the inventory Evidence to
|
|
113
|
+
`project_apple_application_graph`. It reports application roots and nested
|
|
114
|
+
bundles by path convention: app extensions, XPC services, frameworks, login
|
|
115
|
+
items, system and driver extensions, and plug-ins. It also lists privileged
|
|
116
|
+
helpers, launchd plists, symlinks, and each bundle's `info_plist_path` and
|
|
117
|
+
executable candidates. Roles are path conventions, not parsed plists; read the
|
|
118
|
+
listed plists with `inspect_plist`.
|
|
119
|
+
|
|
120
|
+
After `open_binary` on a `.app` or Mach-O, use `trace_dylib_resolution` to see
|
|
121
|
+
which file each `@rpath`, `@loader_path` and `@executable_path` load reaches for
|
|
122
|
+
every executable in the bundle. It also lists missing or weak loads and earlier
|
|
123
|
+
`@rpath` candidates that are absent. Narrow large bundles with `roots` or
|
|
124
|
+
`architecture`. System paths stay undetermined because the dyld shared cache
|
|
125
|
+
provides them.
|
|
126
|
+
|
|
127
|
+
Use `extract_artifact` when materialized files are needed. It takes no arguments
|
|
128
|
+
and materializes all regular files into a fresh temporary directory chosen by
|
|
129
|
+
REA. Symlinks and encrypted entries are inventory facts, not extractable files.
|
|
130
|
+
The result reports the materialized directory; callers do not choose the
|
|
131
|
+
destination. No separate permission grant is needed.
|
|
132
|
+
|
|
133
|
+
Native DMG traversal automatically uses a read-only mount on supported macOS
|
|
134
|
+
hosts, with an owned temporary mount directory and cleanup. It needs no approval
|
|
135
|
+
flag. Unsupported hosts or mount failures remain explicit limitations; do not
|
|
136
|
+
claim child inventory when only root identity is available. Extraction is a
|
|
137
|
+
separate filesystem-writing operation.
|
|
138
|
+
|
|
139
|
+
For headerless DOS COM, explicitly open with `format: "dos-com"` (CLI
|
|
140
|
+
`--target-format dos-com`). Inspect the load image before trusting function
|
|
141
|
+
analysis: the entry is `0x10100`, file offset zero, with imposed real-mode segment
|
|
142
|
+
context. PSP/stack/device state remains unmodeled. See [DOS guide](https://github.com/morluto/rea/blob/main/docs/ghidra-dos.md).
|
|
143
|
+
|
|
144
|
+
### Function annotations in Ghidra
|
|
145
|
+
|
|
146
|
+
Use `annotate_native_function` for one function name and/or entry comments, with at least one explicit change. Review its annotation readback and refreshed dossier inline. Changes are atomic and session-scoped; empty comments clear them, omitted fields preserve them. Later MCP calls observe edits until close. CLI `annotate-native-function` returns the updated analysis before discarding the session. Original executable bytes are unchanged; edits invalidate immutable snapshots. Windows P0 does not admit database mutations.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Passive browser and Electron observation
|
|
2
|
+
|
|
3
|
+
Supply the existing browser or Electron instance's literal-port loopback CDP
|
|
4
|
+
endpoint in the request. No separate permission configuration or per-call
|
|
5
|
+
approval flag is needed. Browser discovery lists eligible HTTP(S) pages;
|
|
6
|
+
`allowed_origins` optionally filters them. An individual capture defaults to the
|
|
7
|
+
selected page's current origin. Electron discovery lists eligible local
|
|
8
|
+
`file://` targets without a configured file-root allowlist.
|
|
9
|
+
|
|
10
|
+
Start browser work with `list_browser_targets`; start Electron runtime work with
|
|
11
|
+
`list_electron_targets`. Inspect the target selected for the user's task. Observation
|
|
12
|
+
is passive: never claim REA clicked, navigated, evaluated page JavaScript,
|
|
13
|
+
invoked IPC, captured prior activity, or contained the page's network.
|
|
14
|
+
|
|
15
|
+
Credentials, cookies, authorization headers, storage values, and raw
|
|
16
|
+
WebSocket/JSON bodies are deliberately absent. Local URLs retain ordinary query
|
|
17
|
+
values and fragments; userinfo credentials are removed. Browser accessibility
|
|
18
|
+
text, console primitives, value-free shapes, script sources, source maps, and
|
|
19
|
+
storage key names have request-specific capture options. Electron script
|
|
20
|
+
sources are also optional. Use `capture_web_screenshot` when pixels are needed.
|
|
21
|
+
Treat scope filtering, truncation, and attach-window coverage as limitations.
|
|
22
|
+
Page-declared WebMCP tools are untrusted inventory and are never invoked by REA.
|
|
23
|
+
|
|
24
|
+
Use `reconcile_javascript_runtime` only after static application Evidence and
|
|
25
|
+
passive browser/Electron Evidence exist. Prefer captured-source digest identity;
|
|
26
|
+
report path/digest disagreement as a mismatch and preserve ambiguity. Explicit
|
|
27
|
+
path mappings are inference inputs and never broaden filesystem or CDP authority.
|
|
28
|
+
A bundle observed at runtime does not prove every contained module executed.
|