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_sourcecarries the original source insourcesContent.apk_debuggablelets a debugger attach andrun-asread app data. - High, web. A shipped, inline, or publicly reachable source map gives original file paths.
eval_devtool_bundleis a dev bundle that carries each module path.bundle_secretlooks 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_unpackedleaves 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_artifactscans 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_urlfetches a live page, checks its same-site bundles, followssourceMappingURL, and probes the.mapfile. Third-party scripts are not fetched.list_checksreturns 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
.ipaand an Android App Bundle (.aab) are not unpacked yet. Scan the.appinside the.ipa, or a universal APK built from the bundle.