Skip to content
Deckard performs static and dynamic analysis on APKs to extract Xposed hooks
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
hooklib copy to script folder Aug 23, 2018
reports add reports folder Aug 23, 2018
package.json update dependencies affected by security alerts Feb 18, 2019
requirements.txt explicitly requires bash Oct 30, 2018


Deckard is a static/dynamic analysis tool for Xposed modules written in Python 3. The main executable is located in src/ The native library logging hooks via dynamic analysis is located in hooklib, which also contains scripts to provision a pre-configured emulator in hooklib/emulator.


$ ./
usage: src/ <static|dynamic|show> <path_to.apk|>
  • static will perform static analysis on a supplied Xposed module APK and write a report.
  • dynamic will perform dynamic analysis and write a report. Additional setup is required, see below for further instructions.
  • show opens a report file in the web GUI.


Deckard in action analyzing GravityBox:

overview hook detail


  • Python 3
  • Node.js and Yarn
  • Docker (for dynamic analysis)

In order to use Deckard, required third party Python modules can be installed to a virtual environment using The setup script will also run yarn install to download the necessary dependencies for the web UI (Bootstrap, jQuery, etc.).

A wrapper is provided to execute Deckard within this virtual environment.

Dynamic Analysis using the Android Emulator (recommended)

A Dockerfile is provided to boot up a container running the Android emulator. It will also patch the emulator images to preload the dynamic analysis library.

  1. Build the dynamic analysis helper library (hooklib), e.g. by using hooklib/
  2. Place the Xposed module to analyze in hooklib/emulator/apks. If you are aware of external applications targeted by the module, place them in the same folder.
  3. Run the emulator and pipe the device's logcat to the Deckard application, like so: ./hooklib/emulator/ | ./ dynamic hooklib/emulator/apks/xposed_module.apk.
  4. If the module needs additional stimulation, for instance launching a specific application, you can use the VNC viewer provided at http://localhost:6080 (replace localhost if Docker is on a different host).

The first boot take a few minutes. Initial setup also requires a reboot that will be performed automatically. Deckard will print incoming hook messages. Once you are finished with capture, hit CTRL-C to stop the container and save the report.

Dynamic Analysis using a real device/custom emulator

If you'd like to perform dynamic analysis on a real device or with custom emulator setups, additional setup steps are required:

  • The Android SDK and NDK need to be installed
  • The native library in hooklib/needs to be compiled using ndk-build
    • If you have a working installation of Docker, you can use hooklib/ to compile the native library in a prepared environment
  • An emulator or real device with root privileges and write access to the system partition is required:
    • When using the Android emulator, enable persistent system partition writes and set SELinux to permissive mode by supplying the -writable-system -selinux permissive commandline parameters.
    • Xposed needs to be installed on the device. The script can be used to install Xposed on emulated devices.
    • The binary that was previously compiled in hooklib/libs/$ARCH/ needs to be installed on the target device, e.g. to /system/lib/
    • needs to be preloaded before Zygote, e.g. by setting the environment variable in the Zygote service configuration. Usually, adding setenv LD_PRELOAD /system/lib/ to /init.zygote32.rc is sufficient.
  • Reboot the device and pipe the logcat output to Deckard.
You can’t perform that action at this time.