memexec
A library for loading and executing PE (Portable Executable) without ever touching the disk
Features
- Applicable to EXE and DLL (except .NET assembly)
- Cross-architecture, applicable to x86 and x86-64
- Zero-dependency
- Contains a simple, zero-copy PE parser submodule
Install
# Cargo.toml
[]
= "0.1"
Usage
Load and execute
⚠The architecture of target program must be same as current process, otherwise an error will occur
use memexec;
use File;
use Read;
/***********************************************************/
/* EXE */
/***********************************************************/
let mut buf = Vec new;
open
.unwrap
.read_to_end
.unwrap;
unsafe
/***********************************************************/
/* DLL */
/***********************************************************/
let mut buf = Vec new;
open
.unwrap
.read_to_end
.unwrap;
use DLL_PROCESS_ATTACH;
unsafe
Parse PE
PE parser could parse programs which have different architectures from current process
use PE;
// Zero copy
// Make sure that the lifetime of `buf` is longer than `pe`
let pe = PE new;
println!;
TODO
-
Replace
LoadLibrary
with callingload_pe_into_mem
recursively -
Replace
GetProcAddress
with self-implementedLdrpSnapThunk
, so as to support resolving proc address byIMAGE_IMPORT_BY_NAME.Hint
License
The GPLv3 license