Rust Shellcode Encoder

Marius Schwarz 35624d3acf added README %!s(int64=4) %!d(string=hai) anos
img 35624d3acf added README %!s(int64=4) %!d(string=hai) anos
src 15f76536bb initial %!s(int64=4) %!d(string=hai) anos
.gitignore 15f76536bb initial %!s(int64=4) %!d(string=hai) anos
Cargo.lock 15f76536bb initial %!s(int64=4) %!d(string=hai) anos
Cargo.toml 15f76536bb initial %!s(int64=4) %!d(string=hai) anos
README.md 35624d3acf added README %!s(int64=4) %!d(string=hai) anos

README.md

Shellc0der

Installation

$ git clone https://git.swrzm.de/msc/shellc0der
$ cd shellc0der
$ cargo run

Usage

shellc0der -i <input.bin> -o <output.bin>
  • The input/output files are raw (non-encoded) shellcode

Function

The basic structure of the encoded shellcode looks like this:

1) The initial shellcode gets encoded via XOR, in the following way:

Note: Every Block is a single byte

2) A random decoder-stub is generated, that is setup in front of the encoded payload 3) The registers used in the stub are randomly generated on each run 4) Additionally, dead code snippets (random snippets & random # of snippets) are inserted into the stub 5) Steps 1-4 can be repeated for arbitrary rounds, as seen below:

Credits

The inspiration came from: