diff options
author | heqnx <root@heqnx.com> | 2025-05-22 17:02:58 +0300 |
---|---|---|
committer | heqnx <root@heqnx.com> | 2025-05-22 17:02:58 +0300 |
commit | 223d860cb20305dcfe71a18167dcac59a9ad6139 (patch) | |
tree | 9fe52272e38e485b5ac55728e8ddc100fbc898c7 /README.md | |
parent | 30c8bcdbfb562d06012ce9b1e7d84f9f57e67b11 (diff) | |
download | go-shellcode2uuid-223d860cb20305dcfe71a18167dcac59a9ad6139.tar.gz go-shellcode2uuid-223d860cb20305dcfe71a18167dcac59a9ad6139.zip |
added rust stubs
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 79 |
1 files changed, 65 insertions, 14 deletions
@@ -1,13 +1,13 @@ # go-shellcode2uuid -`go-shellcode2uuid` is an offensive security utility that encodes arbitrary binary shellcode into UUID strings, generating C and Python stubs to decode and execute the shellcode at runtime. It supports Linux and Windows platforms, with optional single-byte XOR encoding for obfuscation. This is a golang implementation of the popular technique written in many other programming lanauges with multiple authors. +`go-shellcode2uuid` is an offensive security utility that encodes arbitrary binary shellcode into UUID strings, generating Python, C and Rust stubs to decode and execute the shellcode at runtime. It supports Linux and Windows platforms, with optional single-byte XOR or 16bit random key RC4 encryption/decryption for obfuscation. This is a golang implementation of the popular technique written in many other programming lanauges with multiple authors. > **WARNING**: This tool is intended for **authorized security assessments only**. Misuse may violate laws or regulations. The author disclaims any responsibility for unlawful use. Always obtain explicit permission before conducting any security tests. ## Features - **UUID encoding**: Converts raw shellcode bytes into UUID string literals for easy embedding. -- **Multi-platform stubs**: Generates testing stubs for C (Linux and Windows), and Python. +- **Multi-platform stubs**: Generates testing stubs for Python, C (Linux and Windows), Rust. - **XOR or RC4 encryption**: Supports single-byte XOR or 16bit RC4 random key encryption/decryption for lightweight obfuscation. - **Automatic shellcode padding**: Pads shellcode to a multiple of 16 bytes to fit UUID size. @@ -59,14 +59,28 @@ Usage of ./go-shellcode2uuid-linux-amd64: -rc4 enable rc4 encryption with 16bit random key -stub string - stub language to output (c, cwin, py) + stub language to output (py, c, cwin, rs) -xor enable single-byte xor encoding with random key ``` ## Examples -### Generate a Windows C stub with XOR encoding enabled: + +### Generate a Python stub with RC4 encryption: + +``` +$ ./go-shellcode2uuid-linux-amd64 -file shellcode_linux.bin -rc4 -stub py +[inf] shellcode size (54 bytes) is not a multiple of 16, will pad with nullbytes +[inf] using rc4 key: r24OlLLBQr6Ay8rL +ef4cd858-172a-5494-d0f2-1aec40ea5813 +00ccb780-888c-ea60-0353-85d24303e0a9 +3627567b-6603-5074-4beb-a8c1b23c7211 +c73d284b-b64d-d337-4ec5-3be297937f8f +[inf] stub written to stub.py +``` + +### Generate a Windows C stub with XOR encryption: ``` $ ./go-shellcode2uuid -file shellcode_win.bin -xor -stub cwin @@ -92,20 +106,57 @@ c9549fd8-3420-1a60-169c-e7fc6919a75b 7964791c-1c1c-1c1c-1c1c-1c1c1c1c1c1c [inf] stub written to stub.c -$ x86_64-w64-mingw32-gcc -o stub.exe stub.c -Wl,--nxcompat -Wl,--dynamicbase +$ head -10 stub.c +// x86_64-w64-mingw32-gcc -o stub.exe stub.c -Wl,--nxcompat -Wl,--dynamicbase +#include <windows.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> + +#define ORIGINAL_SHELLCODE_LENGTH 276 + +const char* uuid_strings[] = { + "33874c2b-3f27-0fcf-cfcf-8e9e8e9f9d9e", ``` -### Generate a Python stub with RC4 encoding: +### Generate a Windows Rust stub with XOR encryption: ``` -$ ./go-shellcode2uuid-linux-amd64 -file shellcode_linux.bin -rc4 -stub py -[inf] shellcode size (54 bytes) is not a multiple of 16, will pad with nullbytes -[inf] using rc4 key: r24OlLLBQr6Ay8rL -ef4cd858-172a-5494-d0f2-1aec40ea5813 -00ccb780-888c-ea60-0353-85d24303e0a9 -3627567b-6603-5074-4beb-a8c1b23c7211 -c73d284b-b64d-d337-4ec5-3be297937f8f -[inf] stub written to stub.py +go-shellcode2uuid-linux-amd64 -file shellcode_win.bin -xor -stub rs +[inf] shellcode size (276 bytes) is not a multiple of 16, will pad with nullbytes +[inf] using xor key: 0x92 +6eda1176-627a-5292-9292-d3c3d3c2c0c3 +c4daa340-f7da-19c0-f2da-19c08ada19c0 +b2da19e0-c2da-9d25-d8d8-dfa35bdaa352 +3eaef3ee-90be-b2d3-535b-9fd39353707f +c0d3c3da-19c0-b219-d0ae-da934219121a +929292da-1752-e6f5-da93-42c219da8ad6 +19d2b2db-9342-71c4-da6d-5bd319a61ada +9344dfa3-5bda-a352-3ed3-535b9fd39353 +aa72e763-de91-deb6-9ad7-ab43e74acad6 +19d2b6db-9342-f4d3-199e-dad619d28edb +9342d319-961a-da93-42d3-cad3cacccbc8 +d3cad3cb-d3c8-da11-7eb2-d3c06d72cad3 +cbc8da19-807b-c56d-6d6d-cfda28939292 +92929292-92da-1f1f-9393-9292d328a319 +fd156d47-2972-8fb8-98d3-2834072f0f6d +47da1156-baae-94ee-9812-6972e79729d5 +81e0fdf8-92cb-d31b-486d-47f1f3fef1bc +f7eaf792-9292-9292-9292-929292929292 +[inf] rust stub written to stub/src/main.rs +[inf] stub written to stub/src/main.rs + +$ head -10 stub/src/main.rs +// rustup target add x86_64-pc-windows-gnu +// cargo build --release --target x86_64-pc-windows-gnu +// +// rustup target add x86_64-unknown-linux-gnu +// cargo build --release --target x86_64-unknown-linux-gnu +#[cfg(windows)] +use winapi::ctypes::c_void; +#[cfg(unix)] +use std::ffi::c_void; +use std::ptr; ``` - The tool prints the generated UUID strings to stdout and writes the stub source file (`stub.c` or `stub.py`). |