Skip to main content

Official Certified Edible Dinosaurs CTF toolkit.

Project description

The official Certified Edible Dinosaurs CTF toolkit. pwnypack attempts to provide a toolset which can be used to more easily develop CTF solutions.

To import all of pwnypack into your global namespace, use:

>>> from pwny import *

I promise that effort will be put into not exposing unnecessary stuff and thus overly polluting your global namespace.

For an example, check out the Big Prison Fence example in the wiki.

Motivation

After seeing the excellent pwntools by Gallopsled, I got interested in building my own CTF toolkit. pwntools is much more complete so you should probably use that. pwnypack was created mostly out of curiosity.

Modules

pwnypack contains a variety of modules which can be imported individually if you do not want to import everything:

>>> import pwnypack.packing

The available modules are listed below.

pwnypack.target

This module defines a Target class that exposes information about a target platform. The Target exposes the machine architecture (x86/x86_64/arm/etc), the endianness of the platform (little/big) and the word size (32/64 bit). It is used throughout pwnypack to determine how to parse or generate machine specific structures.

If you do not specify the endianness or word size explicitly, they will assume the default for the configured architecture.

A global default target is created as target which defaults to an x86 or x86-64 platform depending on the host machine’s word size.

You can change the properties of a target (and the default target) to match the properties of the machine you’re working with. If you’re working with multiple platform at the same time you can create multiple instances of Target which you pass to the various targetable functions.

A Target can also assume properties of a different instance of Target. This can be useful because the ELF parser generates subclasses of Target.

Examples:

>>> from pwny import *
>>> target.arch
<Architecture.x86_64: 62>
>>> target.endian
<Endianness.little: 1>
>>> target.bits
64
>>> target.arch = Architecture.x86
>>> target.arch
<Architecture.x86: 3>
>>> target.endian
<Endianness.little: 1>
>>> target.bits
32
>>> target.assume(ELF.parse('exploit-me'))

pwnypack.packing

Contains functions to pack and unpack structures for the default or a given target platform.

pwnypack.util

Contains various utility methods. Currently a de Bruijn sequence generator and a function to find the first occurence of a string in a de Bruijn sequence.

pwnypack.flow

Contains a set of classes that provide a consistent and easy to learn and use interface to a subprocess or a socket. Fairly trivial to extend to other channel types.

pwnypack.asm

Contains a function that invokes nasm for you for a given target platform.

pwnypack.elf

Contains a parser for ELF header structures.

pwnypack.codec

Contains various methods to transcode strings.

  • xor performs a cyclic exclusive or operation on a string.

  • rot13 performs rot13 ‘encryption’ on a string.

  • caesar performs caesar cipher encryption on a string.

  • enhex/dehex convert to/from hex.

  • enb64/deb64 convert to/from base64.

  • frequency performs frequency analysis on a string.

Contributors

Just me for now. If you want to contribute, feel free to fork & create a pull request on GitHub.

License

pwnypack is distributed under the MIT license.

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

pwnypack-0.5.2.tar.gz (12.5 kB view hashes)

Uploaded Source

Supported by

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