Python wrapper to use FlowDroid APK analyzer.
Project description
PyFlowDroid
Python wrappers for FlowDroid Apk analyzer. This project was built with two goals in mind:
- Automate the creation of a FlowDroid environment out-of-the-box
- Allow the usage of FlowDroid from Python code
1. Installation
1.1 Prerequisites
Make sure you have:
- A working version of java in the PATH of your environment.
- A working version of python in the PATH of your environment.
- A working version of git in the PATH of your environment.
1.2 Installing pyFlowDroid
You can get it from pypi using pip:
$ pip install pyflowdroid
Then, you need to run an additional command to make pyflowdroid download and install FlowDroid and the required resources to use it:
$ python -m pyflowdroid install
2. Using pyflowdroid as a Python library
You can use this script as a guide for downloading and analyzing apk files with pyflowdroid:
import pyflowdroid
# Path to a folder where the apks are stored
apkfolder = "./apks"
# If you need test apks, you can dowload the desired amount
# from a given provider into a destination folder
pyflowdroid.fetch(10, 'cubapk.com', apkfolder)
# Analyze all the apks in a folder
apk_count, leaks_count, leaky_apps = pyflowdroid.analyze(apkfolder)
# Analyze a single apk
flowdroid_logs = pyflowdroid.analyze_apk('./apks/test.apk')
3. Using pyflowdroid as a command line tool
The main advantage of using pyflowdroid as a command line tool over using FlowDroid directly is the automatic gathering of resources required to execute the flow analysis. pyflowdroid comes bundled with all the required resources to allow a quick analysis of apk files.
To analyze an .apk file with the default pyflowdroid setup, just run:
$ python -m pyflowdroid analyze path/to/file.apk
Similarly, you can perform a flow analysis on all the apks inside a folder:
$ python -m pyflowdroid analyze path/to/folder/
This should store raw FlowDroid logs for each analyzed apk and then show a general report like the following:
################################################################################
# PYFLOWDROID REPORT #
################################################################################
Analized: 5
Leaks found: 2
Leaky apps:
- 'path/to/folder/app1.apk'
- 'path/to/folder/app3.apk'
If you want to get some test apks, pyflowdroid includes a download function to fetch apks from a given provider. Current available providers are:
To fetch apks from a provider, just run:
$ python -m pyflowdroid download amount path/to/store/apks/ provider_name
For instance, to download 10 apk files from cubapk.com, run:
$ python -m pyflowdroid download 10 ./myapks/ cubapk.com
4. Contributing to pyflowdroid
If you want to add any features to pyflowdroid you will need to get a development enviroment.
4.1 Fetching the project source code
You can clone the github repository by executing:
$ git clone https://github.com/gvieralopez/pyFlowDroid
$ cd pyFlowDroid
4.2 Installing pyFlowDroid dependencies
You can install them with poetry by executing:
$ poetry shell
$ poetry install
$ poetry build
4.3 Download FlowDroid and its dependencies
This step will download and install FlowDroid. After doing this you can use FlowDroid with or without pyFlowDroid wrappers. Simply run:
$ python -m pyflowdroid install
4.4 Making your changes appear in the project
Just make a Pull Request.
4.5 Quality Assurance:
Run tests:
$ pytest
Type checking:
$ mypy
Code style:
$ flake8
4.6 Pending features
- Improve cli interface with hints on the parameters
- Improve cli interface with parameters all supported API functions
- Recognize in runtime when Flowdroid and depencies were not installed
- Add new apk providers
- Write pytest unit tests
- Write documentation
Project details
Release history Release notifications | RSS feed
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
Hashes for pyflowdroid-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5385f40c0803873de6fc8463ed0635fcc3228d2f7a954ad1dea7486898ba6d79 |
|
MD5 | 74babb19055b50bad91f40a9be61e690 |
|
BLAKE2b-256 | 2b73b65f5f23680973627344f60fd60a27f52edee02cd7422a796251f29f5d83 |