Skip to main content

AppSleuth

A tool by rudranetra.com · more at rudranetra.com/tools

One tool for mobile app security triage. Works on macOS, Linux and Windows (device pulls on Windows are experimental). Analyses IPA, APK, APKS/XAPK and AAB. Python standard library only.

Command What it does
appsleuth scan app.ipa Static security scan (secrets, ATS / network config, exported components, weak crypto, hardening, hybrid web layer)
appsleuth info app.apk One-screen summary: identity, signing, permissions, exported components, libraries, posture flags
appsleuth diff old new Compare two builds: files by category, posture, findings, and a list of regressions
appsleuth data Pull an app's data container from a jailbroken iPhone (SSH) or an Android device (adb) and audit it, or audit a directory you already pulled

appsleuth <file> is shorthand for scan.

Install

pipx install appsleuth   # recommended
pip install .          # or, from a clone: gives you the `appsleuth` command
python3 -m appsleuth …   # or run in place

Examples

appsleuth scan app.ipa --fail-on HIGH
appsleuth info RSWealth.apks --full
appsleuth diff v1.apk v2.apk --fail-on-regression
appsleuth data --ios --host 9 -b com.example.app
appsleuth data --android -p com.example.app --method auto
appsleuth data --audit-dir ./pulled --platform android

Reports (report.json/md/html) are written to -o DIR.

Encrypted IPAs: if the main binary (or a framework) is still FairPlay-encrypted, AppSleuth cannot see its code, so it prints a warning and puts it at the top of every report. A clean result on such a file does not mean the app is secure; re-dump it decrypted and scan again.

appsleuth runtime (experimental)

Observe what a running app really does, using Frida: root/jailbreak checks, plaintext HTTP actually requested, ciphers (ECB, DES), credentials written to SharedPreferences/NSUserDefaults, secrets in logs, debuggable WebViews.

pip install "appsleuth[runtime]"          # adds Frida; frida-server must run on the device
# (agent sources: appsleuth/runtime_js/agents; rebuild with `npm install && npm run build` there)
appsleuth runtime --android com.example.app --seconds 90
appsleuth runtime --ios com.example.app --spawn

It is observe-only (no bypasses, nothing patched) and never stores values, only key names and descriptions. Use the app during the window: it can only report what it sees. Status: iOS has been tested on a real jailbroken device (Dopamine, Frida 17) against two apps; Android has been built the same way but not yet tested on a device. The pip Frida version must match the frida-server on the phone. Only calls made while the probe runs are visible, and results are leads, not proof. Probes count only calls from the app's own code, not from the jailbreak's tweak loader.

Keeping false positives low

  • At detection: placeholder and sample secrets dropped; public client identifiers (Google API keys, OAuth client IDs, Razorpay key IDs) reported as INFO; JWTs must decode; PEM needs a real body; whole-word crypto matching; digests, UUIDs and identifiers filtered from the entropy scan; documentation/schema URLs ignored; launcher activities not "exported"; Swift binaries not flagged for stack canaries.
  • Corroboration (triage): cleartext URLs are demoted when ATS or the Android target SDK already blocks cleartext; config-split APKs don't repeat base-manifest findings.
  • Yours: --ignore-file (default .appsleuth-ignore) with title:, location:, evidence:, fingerprint:, severity: rules and -- reason. --min-severity, --min-confidence.
  • Nothing is silently lost: report.json has a triage section listing everything demoted, dropped, ignored or hidden. --no-triage shows raw output.

Findings are leads for manual review, not confirmed vulnerabilities; each carries a confidence.

appsleuth data safety

Values are redacted by default (--show-values shows a short preview, never the full secret). Pulled archives are extracted defensively (regular files only, no links, no traversal, size/count caps); SQLite is opened read-only with an authorizer; XML with a DOCTYPE is refused; host/user/package inputs are validated and shell-quoted. Only use it on devices and apps you are authorised to test.

Tests

python3 -m unittest discover -s tests -t .

Licence

MIT © Rudranetra India Private Limited — rudranetra.com

Metadata

Release files for appsleuth 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for appsleuth 1.1.0
File Size Uploaded Provenance Actions
appsleuth-1.1.0.tar.gz 271.8 kB With provenance Details for appsleuth-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for appsleuth 1.1.0
File Interpreter ABI Platform Actions
appsleuth-1.1.0-py3-none-any.whl Python 3 none any Details for appsleuth-1.1.0-py3-none-any.whl

Total release size: 540.7 kB

Release files / appsleuth-1.1.0.tar.gz

Download URL appsleuth-1.1.0.tar.gz
Size 271.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f1c575528d145d76a5a96e79e00ab84b3b7a1288175bb3bd2e6dc9aa65feb62e
BLAKE2b-256 checksum
How to use checksums
c47c20ffdc707f8e828900bb5539d934059b99bcadb8758ebcc6352c330e976b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

Release files / appsleuth-1.1.0-py3-none-any.whl

Download URL appsleuth-1.1.0-py3-none-any.whl
Size 268.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7f14e211584b108bdc1235aaa066af1303c6598465c66454ce223f0786ff9f77
BLAKE2b-256 checksum
How to use checksums
296a413f0ae015d51f68ca878f091a7e65abb5aade95d2e951b7c507bbc1a165
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

Security for appsleuth 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for appsleuth-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 6, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page