agentleFS
FirzusFirzus/agent-skills/skills/engineering/reverse-engineer/SKILL.md

reverse-engineer

Skill4 starsChanged 20 days agoMITView on GitHub

Reverse engineer shipped software quickly with compact, cited evidence. Covers Electron/asar apps, native PE/ELF/Mach-O binaries and Node addons, Go/Rust/.NET binaries, APKs and minified JS bundles. Use to explain how a feature works, trace IPC channels and native calls, extract versions and dependencies, or decompile one function.

22 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use debug-issue, orchestrate and 1 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • NVIDIASkill

    debug-issue

    Use when the user asks to debug, investigate, or fix a GitHub issue or supplies a repository bug report.

    Also in 3 projects that use this

  • varun29ankuSSkill

    orchestrate

    This skill should be used when the user asks to 'orchestrate a task', 'break down work into parallel agents', 'coordinate subtasks', 'run agents in parallel', or mentions 'multi-agent'. Decomposes complex tasks into tracked subtasks, dispatches parallel subagents, and coordinates until completion.

    Also in 3 projects that use this

  • MicrosoftSkill

    handoff

    Compact the current conversation into a handoff document for another agent to pick up.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 18 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Search, then read slices around the hits.

    line 14

“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

reverse-engineer

The reverse-engineer MCP tools never run the target. They write only to their own cache, plus a private Ghidra work folder in the temp directory when the cache path contains a dot folder such as ~/.cache; the third-party tools keep their own settings in the home folder. Every fact they return cites file:line:col, file@0xoffset, a symbol or a string. A long result ends with a cache file path: page it with read or filter it with search instead of calling the tool again. Installing this skill does not install the server (the npm package reverse-engineer, source in mcp/reverse-engineer of https://github.com/Firzus/agent-skills): when its tools are not available, use Without the MCP server.

Rules

  • Turns cost more than bytes. Plan 2 to 4 calls: one map call, one or two targeted slices, then answer. Stop as soon as every requested item has evidence: a fact a tool already showed needs no second check.
  • Route first: triage(path) on an unknown file or folder; skip it when the prompt already names the type.
  • Search, then read slices around the hits. Minified code: read(path, start=LINE, col=COL, length=1500) around a hit.
  • Answer from evidence. Mark each claim seen (cite file:line:col, file@offset, a symbol or a string), inferred, or unknown. Not found means unknown, not absent. Static reading is not observed execution.
  • Work on the given files. Never launch the target unless the user asks.

First move

TargetCallThen
Electron app: app dir, resources/, or app.asarelectron_surface(path, focus=<word,synonym>)usually answer; else one read at a cited location
Unknown file or foldertriage(path)follow its next: line
JS bundle or any source treesearch(path, pattern, regex?, glob?)read(path, start, col)
Native binary or .node addonbinary_inventory(path)binary_inventory(path, part=strings, filter=RE); decompile for logic
Go or Rust binarybuildinfo(path, filter=DEP)nothing else for versions
Logic inside native codedecompile(path, containing=STRING)decompile(path, function=ADDRESS)
.NET assembly, APK, DEX, JARmanaged(path)managed(path, type=Name) or search(root, ...)

Tool notes:

  • electron_surface: focus filters IPC channels and lists matching identifiers in main and preload code, classes first with their method names. Give two or three short stems from the question and their synonyms, comma-separated (audio,microphone,mic). The addon section lists names that the addon contains and that JS calls: the JS to native boundary. IPC is grouped by call site, including app wrappers; the listen/send role is inferred from the callee name. Hash mismatches on unpacked .node files are common (signed after packaging): report them as unverified, not as tampering.
  • binary_inventory: the summary shows imports per library (the capability map), exports, the JS-visible names of a Node addon, and notable strings with offsets.
  • decompile: the first call runs a Ghidra analysis (about a minute for 1 MB) and caches every function; later calls are instant. containing maps a string to the functions that use it. Decompiled code is inferred structure: name what it calls (APIs, constants, strings).

Without the MCP server

With Node.js 24.11+, the same tools run as a CLI: npx -y reverse-engineer@0.1.0-alpha.2 <tool> <path> --pattern X --glob '*.js'. Otherwise use the shell (batch independent probes in one call with echo '--- name' markers and cap output with head):

NeedWindows (Git Bash or PowerShell)macOS / Linux
Extract asarnpx -y @electron/asar extract app.asar Xsame
Search extracted coderg -uu -o '.{0,150}NEEDLE.{0,150}' X --glob '!node_modules'same
Strings of a binaryrg -a -o '[ -~]{6,}' Fstrings -a -n 6 F
Imports, exportsdumpbin /imports /exports F (Visual Studio)otool -L, nm -gU, nm -u; readelf -dW, nm -D
Go build infogo version -m F; without Go, the rg line belowsame
DecompileGhidra analyzeHeadless with a post script that exports C, such as mcp/reverse-engineer/ghidra/ExportDecompiled.javasame, or r2 -qc 'aaa; pdc @ sym.X' F
.NET / APKilspycmd -p -o X F / jadx -d X a.apk, then searchsame
rg -a -o '(path|mod|dep)\t[^\t]+\t?[^\t]*' F   # Go build info without Go

Tools installed per user (see below) are not on PATH: call them by full path, such as <tools root>/jadx/bin/jadx or <tools root>/ghidra_*/support/analyzeHeadless, with JAVA_HOME set to <tools root>/jdk-21* (macOS: its Contents/Home).

Missing third-party tools

decompile needs Ghidra and JDK 21; managed needs jadx and JDK 21, or ilspycmd. When one of them reports a missing tool, or the shell route needs one, install it with references/install-tools.md (per-user, no admin rights, no restart), and meanwhile keep going with triage, binary_inventory and search.

Speed patterns

  • Electron features: go from the native boundary inward. Addon function, then the calling class, then the IPC registration in main, then the preload that exposes it.
  • A channel has a producer and a consumer; electron_surface lists both sides with locations.
  • Imports and strings usually explain a small binary before any decompilation.
  • Comparing versions: diff inventories (channels, addon names, dependencies) before code.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.