← Blog’a dön

← Back to blog

Reverse Shield: what a shipped app gives a reverse engineer

MCP guide · App hardening

Reverse Shield tells you what a shipped build gives a reverse engineer for free. A web bundle, an Electron app, an APK, a native binary, and a .NET assembly land in the same report.

Reverse-engineering tools can take an app that has no source and explain how a feature works, down to the binary. This server is the other side of that: point it at your own build. It reports what jadx, ILSpy, Hopper, or the browser devtools would get with no effort, and the fix for each item.

Everything except scan_url runs locally and offline. It has its own parsers for ASAR, the Electron fuse wire, binary AndroidManifest, DEX, ELF, Mach-O, and PE/.NET metadata. apktool, jadx, and binutils are not required.

What it is for

When you hand an agent a build with no source and ask how a feature works, these are the traces the other side receives:

  • Web — shipped, inline, or publicly reachable source maps, an unminified bundle, a key in client code, and internal hosts.
  • Electron — RunAsNode, inspect, NODE_OPTIONS, and ASAR integrity fuses, unpacked app code, and code inside app.asar.
  • Android — the debuggable flag, missing R8 or ProGuard, the signing scheme, backup of app data, a plain React Native bundle, and an unstripped .so.
  • Native — debug info, symbols, get-task-allow, hardened runtime, signing, PIE, NX, RELRO, and a stack canary. ELF, Mach-O, and PE.
  • .NET — missing obfuscation, an embedded PDB, and leaked build paths.

What it flags

Critical and high findings are where a reverse engineer gets closest to the original source.

  • Critical. sourcemap_embeds_source carries the original source in sourcesContent. apk_debuggable lets a debugger attach and run-as read app data.
  • High, web. A shipped, inline, or publicly reachable source map gives original file paths. eval_devtool_bundle is a dev bundle that carries each module path. bundle_secret looks for a working credential in client code.
  • High, Electron. A RunAsNode or inspect fuse opens a Node runtime or a debugger inside the signed app. electron_app_unpacked leaves app code as an editable folder.
  • High, Android. Without obfuscation, jadx prints real names. A plain React Native bundle is readable. An unsigned APK leaves no evidence it was tampered with.
  • High, native and .NET. Debug info and unstripped symbols expose named functions. An embedded PDB brings ILSpy or dnSpy output close to the original source.
  • Medium and low. An unminified bundle, an APK that allows backup, a v1-only signature, missing PIE, NX, RELRO, or a canary, and a leaked build path. Native hardening checks are exploit-mitigation signals more than reverse-engineering ones, so they are reported low or medium.

Three tools

  • scan_artifact scans a file or directory: an APK, .app, Electron folder, app.asar, ELF, Mach-O, PE, .NET binary, JS bundle, source map, or build output folder.
  • scan_url fetches a live page, checks its same-site bundles, follows sourceMappingURL, and probes the .map file. Third-party scripts are not fetched.
  • list_checks returns the check catalog, what each finding gives away, and how to fix it.

Directory walks include dist/, build/, and out/. node_modules, version control, and cache folders are skipped. A macOS .app or Electron folder found inside is scanned as one unit: its fuses, its ASAR, and its own executable. Bundled third-party frameworks are not scanned separately.

Install

Package @guardbee/mcp-reverse-shield. Claude or Cursor config:

{
  "mcpServers": {
    "guardbee-reverse-shield": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-reverse-shield"]
    }
  }
}

From the command line, fail on high and above:

npx @guardbee/mcp-reverse-shield scan ./dist --fail-on=high

A live URL can also be written as SARIF. The file produced in CI is what you upload to GitHub code scanning. Optional guardbee.yml sets fail-on, max-files (default 5000), and exclude paths.

Limits

  • Obfuscation is judged from names, not control flow. A build that only renames passes. String encryption and control-flow flattening are not measured.
  • Web checks see what is shipped. They cannot tell whether a key is meant to be public. Keys such as a Firebase web key are restricted on the server. Rotate or restrict it, then add the path to exclude.
  • An iOS .ipa and an Android App Bundle (.aab) are not unpacked yet. Scan the .app inside the .ipa, or a universal APK built from the bundle.

npm · All MCP servers

Paylaş

Share

Sitenizin risk skorunu görün — 14 gün ücretsiz deneme.

See your site’s risk score — 14-day free trial.