Skip to main content

Shelf - Shellcode ELF convert elf to shellcode

Convert standard elf files to standalone shellcodes. Please read the following documentation and view the examples for this project to work properly

Project links

Github

Pypi

Supported architectures

  • mips
  • i386 (intel x32)
  • x86_64 (intel x64)
  • arm (32bit)
  • aarch64 (arm 64 bit)
  • RISC-V rv64

Installation:

pip install py_shelf
Python version support
  • python3

How does this work ?

The python library parses the elf and create a simple relocatable file format called shelf (shellcode elf).

The mini loader is inserted as the entry point for shelf.

the mini loader will load and relocate the shelf then it will execute it. There are no special requirements, the library contain the compiled mini loaders and resources.

The diagram below explain the format (Only work in browsers)

  classDiagram
    ShellcodeEntryPoint --|> MiniLoader
    ShellcodeEntryPoint: Shellcode containing pre mini loader logic
    MiniLoader --|> Relocation table
    MiniLoader: Contain all the logic for parsing the relocation table
    MiniLoader: fully os independent
    Relocation table --|> HOOKS Optional
    Relocation table : Contain table required for shellcode runtime relocation
    HOOKS Optional --|> SHELF
    HOOKS Optional: Read more about hooks in the documentation below
    HOOKS Optional: This section is optional and only exists if hooks are used
    SHELF: Shellcode elf - This is the compiled binary we convert into shellcode
    SHELF: This binary is stripped into only opcodes
    SHELF: fully relocatable using the relocation table

This project is intended to convert elf to os independent shellcodes. Therefor the loader never allocate memory and the shellcode format is not packed. You can just execute it, eg ...

((void (*)()) shellcode)();

follow the examples below

Creating a shellcode

Some compilation flags are required for this to work properly. You must compile the binary with -fPIE and -static take a look at the provided examples below (makefile).

shellcode is a stripped binary with no symbols and no elf information only opcodes, in order to make the shellcode this library require a binary with elf information. so make sure you are not stripping the binary before using this library

simplified make command for mips big endian

gcc example.c -fno-stack-protector -fPIE -fpic -static -nostartfiles --entry=main -o binary.out
python -m shelf --input binary.out                                     

Examples:

Makefile

Example.c

Testing your shellcode

You can use the provided shellcode Loader to test you shellcodes

qemu-mips ./shellcode_loader ./myshellcode.out

Using the shelf loader library

it is advised to use the shelf loader library to tests your shellcode here you can read more about it: Shelf loader documentation

Advanced concepts and features

for following links only work on the github page

Metadata

Release files for py-shelf 3.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-shelf 3.0.6
File Size Uploaded
py_shelf-3.0.6.tar.gz 8.7 MB Details

Release files / py_shelf-3.0.6.tar.gz

Download URL py_shelf-3.0.6.tar.gz
Size 8.7 MB
Tags Source
SHA-256 checksum
How to use checksums
786b9884a47fde4a145218eb743fc84915aaed61a73408b10f01f6e7805eb082
BLAKE2b-256 checksum
How to use checksums
5e795f8d79df78e8ed82cc31d58240bc3156cd9a26a586241575efc3af6a6745
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/44.1.1 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/2.7.18

Release history Release notifications | RSS feed

This release

3.0.6 This release

1 release file

3.0.5

1 release file

3.0.4

1 release file

3.0.3

1 release file

3.0.2

1 release file

3.0.1

1 release file

3

1 release file

2.2.8

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page