Skip to main content

Unpacking framework for common android malware

Project description

🫙 kavanoz 🫙

Statically unpacking common android banker malware. Ever wanted to get payload from packed malware without running android emulator ? Me neither.

:eyes: Installation

pip install kavanoz

To install from source, clone the repository and do an editable install with -e. Which means if you edit or add new plugins to the project it will be used without reinstalling.

git clone https://github.com/eybisi/kavanoz.git
cd kavanoz
pip install -e .

:zap: Usage

from cmdline

kavanoz /tmp/filepath

You can use -vvv parameter to print verbose logs. (useful for debugging plugins)

as python library

from kavanoz.core import Kavanoz
from kavanoz import utils

utils.set_log("DEBUG")
k = Kavanoz(apk_path="tests/test_apk/coper.apk")
for plugin_result in k.get_plugin_results():
    if plugin_result["status"] == "success":
        print("Unpacked")
        print(plugin_result)
        break

:snake: Scripts:

:gear: Development

Make sure to install kavanoz as editable (with -e). To add new plugins just create new file in loader folder. Extend Unpacker class from unpack_plugin.py file. Define start_decrypt function with your implementation.

def start_decrypt(self, apk_object: APK, dexes: "list[DEX]"):

Add following function to make early exit from plugin.

def lazy_check(self,apk_object:APK, dexes: "list[DEX]"):

If extraction is successful assign self.decrypted_payload_path with extracted file path. You can use helper functions from unpacker class:

  • get_array_data
  • get_smali
  • find_method(class_name,method_name,descriptor="")
  • check_and_write_file(file_data) : checks file has dex, zip and zlib headers and writes unpacked dex with name : "external-{m[:8]}.dex"

Make sure to run python -m unittest before opening a PR. In order to get test apk files, use git lfs pull command.

:book: Tips

  • self.dexes hold dex objects. You can get class with dex.get_class(smali_annotation_of_class).
  • You can use get_smali function and give target method obj to get smali represantation of target method. Then apply some regex to get data from smali. There are lots of defined regexs in smali_regexes.py file to lookup.
  • Most of the time packers use file from asset folder. You can get files with self.apk_object.get_files()
  • Most of the time packers use Application class to start unpacking sequence. Use application = self.apk_object.get_attribute_value("application", "name") to get application class defined in manifest file.

Thanks:

apkdetect.com for unique samples to work with.

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

kavanoz-0.0.6.tar.gz (431.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kavanoz-0.0.6-py3-none-any.whl (441.5 kB view details)

Uploaded Python 3

File details

Details for the file kavanoz-0.0.6.tar.gz.

File metadata

  • Download URL: kavanoz-0.0.6.tar.gz
  • Upload date:
  • Size: 431.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for kavanoz-0.0.6.tar.gz
Algorithm Hash digest
SHA256 18cd374f58ca84bd5cea8325e4c11f940a9783146ba4da7df6c777dfd179d631
MD5 4b3515a76c884168c82cbed5c6b461b8
BLAKE2b-256 3bbf93c721d70ce3c6e30108e71b5724d20d4a1c31f9b9d7096fa3c4b7a41321

See more details on using hashes here.

File details

Details for the file kavanoz-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: kavanoz-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 441.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for kavanoz-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 a1e9e7af03745d74924f6977b8bfe42a92a3a4ada9e43074e7d9c01d671c2049
MD5 59ace18e8671a209973447321d43e99d
BLAKE2b-256 c016784ab84660944e848800bc48b2b17eeda4302d633c27d1d4b236a1375e9a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page