Skip to main content

A tool to embed python code into a runnable DuckyScript on mac os

Project description

🦆 Quackdoor

CI codecov

Honk Honk!
Quackdoor is a CLI tool written in Python that generates DuckyScript to execute arbitrary Python code on a target machine. It is best used for crafting payloads for Flipper Zero's BadUSB app.


🔧 Features

  • Converts Python scripts into executable DuckyScript payloads
  • Supports external Python libraries (via -r and -p flags)
  • Tailored for use with macOS and Zsh environments
  • Ideal for authorized security testing and educational purposes

⚠️ Limitations & Considerations

  • The target system must have Python 3 installed
  • All local Python code must reside in a single file; other local modules will not be compiled into the payload
  • External libraries are supported and will be installed globally on the target via pip
  • Payload may leave recoverable traces on the target system—use with caution
  • Assumes the Zsh shell and standard macOS filesystem on the target

🚀 Getting Started

Clone the repository:

git clone https://github.com/your-org/quackdoor.git

Generate a payload:

cd quackdoor
python3 quackdoor.py -i your_script.py -o output_file_name.txt

Optional flags for additional customization:

  • -r dependency1 dependency2 – Provide a space delimited list of dependencies to install
  • -p – Pip-time, or how long for the resulting DuckyScript to wait after running pip install (if there are dependencies provided)

✅ Development Best Practices

We follow the GitHub Flow for all development work:

  1. Create a new branch from main:

    git checkout -b feature/my-feature
    
  2. Make your changes and commit them:

    git commit -m "#123 Brief description of the change"
    
    • Always reference the GitHub issue number with a #, e.g. #42
    • Write clear and descriptive commit messages
  3. Push your branch:

    git push origin feature/my-feature
    
  4. Open a Pull Request targeting the main branch

  5. Request review and ensure all checks pass

  6. Once approved, squash and merge


📄 License

MIT License. See LICENSE for details.


🛡️ Disclaimer

This software is provided for educational and authorized testing purposes only.
The author is not responsible for misuse, damage, or legal consequences resulting from the use of this tool.

Use responsibly. Honk responsibly. 🦆

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

quackdoor-0.1.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

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

quackdoor-0.1.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file quackdoor-0.1.0.tar.gz.

File metadata

  • Download URL: quackdoor-0.1.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quackdoor-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3aee7f649ff618283a5192fbe0fa2bac20fec331efccdb3a8d8cf73658cda2c8
MD5 3ea8be48ba7ca96f3e8cd92688f6542e
BLAKE2b-256 f7a5c6ceb54cadbd069351ccdccba7d6f29108144de53fc6e66dab96f794b05b

See more details on using hashes here.

File details

Details for the file quackdoor-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: quackdoor-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quackdoor-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ba441bc4b493c0b01a5c471b11675ea41ef7fbbb4b2656964294b7753d11a83e
MD5 6125e3ec4fdba2095e7c4428296f1b76
BLAKE2b-256 5747c1e33ca5ed2934e7675a3162e834be72ed5cc3151c4b752c2ebc46ae8aef

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