Intimate Surveillance Detection Instrument - Phone privacy scanner
Project description
IPV Spyware Discovery (ISDi) Tool
ISDi tool checks Android or iOS devices for apps that can be used for surveillaince (a.k.a "stalkerware", "spouseware", "spyware" apps). ISDi's technical details are included in "Clinical Computer Security for Victims of Intimate Partner Violence" (USENIX 2019). The blacklist is based on apps crawled in "The Spyware Used in Intimate Partner Violence" (IEEE S&P 2018).
Contribution Guidelines
For more information about contributing to ISDi, see the contribution guidelines.
Installing ISDi :computer:
ISDi currently supports macOS, Linux, and Termux/Android. If you are using a Windows device, you can use the Windows Subsystem for Linux 2 (WSL2), which can be installed by following these instructions. After this, follow the remaining instructions as a Linux user would.
Option 1: Install via pip (Recommended)
The easiest way to install ISDi is via pip:
pip install isdi
Then run ISDi with:
isdi run
Option 2: Install from Source (Development)
Clone the repository and install in development mode:
git clone https://github.com/stopipv/isdi.git
cd isdi
pip install -e .
Then run ISDi with:
isdi run
System Requirements
Python
- Python 3.8 or higher is required
- Check your version:
python3 --version - On macOS, install via:
brew install python - On Linux (Debian/Ubuntu):
sudo apt install python3 python3-pip
Operating System Dependencies
macOS:
brew bundle
# Or manually:
brew install --cask android-platform-tools
Linux (Debian/Ubuntu):
sudo apt install adb
Windows Subsystem Linux (v2):
- Install
adbin Windows and ensure it's in PATH - Install
pymobiledevice3via pip (done automatically withpip install isdi)
Termux/Android: See TERMUX_INSTALL.md for Android device setup.
Running ISDi
After ISDi is installed, with an Android or iOS device plugged in and unlocked, run:
isdi run
ISDi will start a local web server on port 6200. Open your browser to http://localhost:6200 for the ISDi UI.
Note: On first run, ISDi will download the app information database (~47MB) from GitHub. This may take a minute depending on your internet connection. An internet connection is required for the first run.
Command Options
isdi run # Normal mode
isdi run --debug # Debug mode (verbose logging)
DEBUG=1 isdi run # Alternative debug flag
isdi --help # Show all options
Then navigate to the URL shown in the terminal. Click on "Scan Instructions" and follow the instructions to prepare your device for the scan.
It should look something like this:
Connect a device and click on the suitable button Android or iOS. Give it a
nickname and click "Scan now". (Please connect one device at a time.) It
will take a few seconds for the scan to complete. We are working to have all
scan results done at once on Android, but for the time being please leave the
device plugged in when clicking on apps on the scan results table.
After the scan, the UI will look something like this:
Consultation form data
ISDi is intended to be used by advocates for victims of intimate partner violence in
a clinical setting;
you can add detailed notes about a victim's tech abuse situation
by clicking "Start Consult Form" on ISDi's homepage. The results
will be saved in data/fieldstudy.db and can be viewed/edited
by navigating to /form/edit.
Some consult form data may not be relevant for use in
other organizations (e.g., the meeting location being
in a borough of New York City). Please consider adapting the form
for your needs. One can do this by modifying the Client class in
isdi and use sa.create_all() (sa is obtained by wrapping SQLAlchemy over
the Flask app) to obtain the new
schema. Then place the new schema in schema.sql by updating the clients_notes table.
Debugging Tips
Android
Check device connection:
adb devices
iOS
Check device connection:
pymobiledevice3 usbmux list
General
- Run ISDi with
--debugflag for verbose logging - Check logs in
~/.local/share/isdi/logs/ - File issues on GitHub with error messages
Termux/Android
See TERMUX_INSTALL.md for Termux-specific troubleshooting.
Downloaded data
The data downloaded and stored in the study are the
following. 1. A sqlite database containing the feedback and actions taken by
the user. 2. phone_dump/ folder will have dump of some services in the
phone. (For Android I have figured out what are these, for iOS I don't know
how to get those information.)
Android
The services that we can dump safely using dumpsys are the
following.
- Application static details:
packageSensor and configuration info: location,media.camera,netpolicy,mountResource information:cpuinfo,dbinfo,meminfoResource consumption:procstats,batterystats,netstats,usagestatsApp running information:activity,appops
See details about the services in notes.md
iOS
Only the appIds, and their names. Also, I got "permissions" granted
to the application. I don't know how to get install date, resource usage, etc.
(Any help will be greatly welcomed.)
Code Structure
-
src/isdi/scanner/- Core scanning logicparse_dump.py- Parses device dumps (Android/iOS)android_permissions.py- Android permission analysisprivacy_scan_android.py- Android privacy scanningblocklist.py- Stalkerware/spyware blocklist managementlightweight_df.py- CSV/data processing (pandas-free)db.py- SQLite database operationspmd3_wrapper.py- Termux-compatible pymobiledevice3 wrapper
-
src/isdi/web/- Flask web applicationtemplates/- HTML templates for the web UIstatic/- CSS, JavaScript, and imagesschema.sql- Database schema (embedded in code)forms/- WTForms for consultation formsmodel/- SQLAlchemy modelsview/- Flask route handlers
-
src/isdi/scripts/- Shell scripts for device interactionandroid_scan.sh- Android device scanningios_scan.sh- iOS device scanning
-
src/isdi/data/- Static data and reference filesapp-flags.csv- App classification metadataapp-info.db- Cached app informationandroid_permissions.csv- Android permission databaseios_permissions.json- iOS permission database
TODO 1.
https://docs.google.com/document/d/1fy6RTo9Gc0rBUBHAhKfSmqI99PSPCBsAdEUIbpGIkzQ/edit
2. How to figure out off-store apps in Android and iOS? Check the installer in
3. For iOS, how to find out app installation dates,
resource usage, etc? 4. Explore viability of
WebUSB and
WebADB.adb shell pm packages -i
See notes.md for other developer helps.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file isdi_scanner-1.0.5.tar.gz.
File metadata
- Download URL: isdi_scanner-1.0.5.tar.gz
- Upload date:
- Size: 3.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62ca05a258c71581eeb25ab9aaddfe03a07d26d51c0675edf4cb8533a4db75a8
|
|
| MD5 |
8be60e0dfcfbe9e4309721089047e1f0
|
|
| BLAKE2b-256 |
90f6ff407736502a3e2e4c5a16026dc83d6d6d264fe37a191114fe336b1d2511
|
File details
Details for the file isdi_scanner-1.0.5-py3-none-any.whl.
File metadata
- Download URL: isdi_scanner-1.0.5-py3-none-any.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3cbc9e04b3378d2e7388f921d38e829b2d9e6bc76a23d3576acaf866062fe84
|
|
| MD5 |
a28c611f087d6cf3db178e03358f1c6d
|
|
| BLAKE2b-256 |
8a00b0a9f7582831fcd6bdd5ebedd4d04409454d39fb0842ff9d037a4e344c21
|