Mobile App Penetration Testing (iOS & Android)
In-depth testing of your iOS and Android apps and the backend they talk to, aligned with OWASP MASVS.
Free open-source tool
One tool for mobile app security triage. Point AppSleuth at an IPA, APK, APKS or AAB and get a scan, a one-page summary, a build-to-build diff and an audit of the data the app stores. Offline by default.
Runs on your own computer. Nothing is sent to us.
Recommended
One command installs AppSleuth from PyPI. It uses only the Python standard library. For the experimental runtime checks, install it with the extra: pipx install "appsleuth[runtime]".
pipx install appsleuthSource code
The full source, the README, the tests and the MIT licence. Clone it and install it with pipx from the folder, or run it in place with python3 -m appsleuth.
git clone https://github.com/RansomWhisker/AppSleuth.git
cd AppSleuth
pipx install .appsleuth scan app.ipaappsleuth info app.apkappsleuth diff old newappsleuth sbom app.apkappsleuth endpoints app.ipaappsleuth links app.apkappsleuth cloud app.apkappsleuth dataappsleuth runtimeappsleuth app.ipa on its own is short for scan.
Only use AppSleuth on apps and devices you own or are authorised to test.
Scan an app. The terminal shows the important findings; the full report is written as HTML, Markdown and JSON.
$ appsleuth scan com.example.shop.ipa -o report
com.example.shop 1.1 [IPA]
[HIGH] App Transport Security disabled globally (NSAllowsArbitraryLoads=true)
Info.plist NSAppTransportSecurity
[MEDIUM] Main binary not compiled as PIE
Shop
[LOW] No stack-canary symbol found in main binary (heuristic)
Shop
… 3 lower-severity finding(s) in the report (use --show INFO to list)
1 High 1 Medium 1 Low 3 Info
Reports: report/report.html report.md report.jsonReal output from a test app we built with deliberate weaknesses.
--fail-on HIGH--fail-on-regression HIGH-o DIR--format json--full--show INFO--min-confidence confirmed--ignore-file FILE--redactHow to use the result
appsleuth diff in your build pipeline catches a build that turns off transport security, adds a cleartext host or changes signer before it ships.Background
AppSleuth reads the app file on your computer and sends nothing anywhere, with no telemetry. Three checks use the network, and only when you ask:
sbom --cves sends library names and versions, nothing else, to the OSV.dev vulnerability database. Results are cached for 24 hours.links --check-network downloads the public app-link files (assetlinks.json, apple-app-site-association) of the domains the app claims.cloud --check sends read-only, unauthenticated requests to the app's own cloud backends and records only the HTTP result, never the data. Use it only on apps you're authorised to test.Placeholder secrets are dropped, public client IDs are reported as information only, JWTs must decode, and cleartext URLs are played down when the platform already blocks cleartext. Add your own rules in .appsleuth-ignore. Nothing is silently lost: report.json lists everything that was demoted, dropped or ignored, and why.
appsleuth data shows found tokens and passwords in full so you can verify them, which makes its reports sensitive. Add --redact to mask them. Pulled files are extracted defensively and databases are opened read-only.
AppSleuth is for apps and devices you own or are authorised to test: your own apps, apps you're engaged to assess, and security research where the law allows.
FAQ
Yes. AppSleuth is free and open source under the MIT licence. Install it with pipx install appsleuth, or get the source from GitHub. It uses only the Python standard library.
No. AppSleuth runs on your own computer, has no telemetry and works offline by default. Three checks use the network only when you ask: sbom --cves sends library names and versions to the OSV.dev vulnerability database, links --check-network downloads the public app-link files of the domains the app claims, and cloud --check sends read-only requests to the app's own cloud backends. Nothing is ever sent to us.
iOS apps as IPA files, and Android apps as APK, split-APK bundles (APKS, XAPK) and Android App Bundles (AAB). Use getIPA or getAPK to pull an app off your own device first.
No. Findings are leads for a person to review. Each one has a severity and a confidence, AppSleuth filters common false positives, and report.json lists everything it demoted or dropped. A clean result on a still-encrypted IPA means nothing, because AppSleuth can't see its code: it warns you at the top of every report.
Yes. scan --fail-on HIGH exits with code 3 when a finding at or above that severity remains, and diff --fail-on-regression HIGH exits with code 4 when a new build gets worse. Both write JSON, Markdown and HTML reports.
Only apps and devices you own or are authorised to test. The cloud --check option in particular sends requests to an app's backends, so use it only with permission.
In-depth testing of your iOS and Android apps and the backend they talk to, aligned with OWASP MASVS.