2个版本
0.1.2 | 2023年4月18日 |
---|---|
0.1.1 | 2023年4月11日 |
0.1.0 |
|
在 操作系统 中排名第 450
2MB
1K SLoC
包含 (DOS可执行文件, 1.5MB) examples/putty_x64.exe, (DOS可执行文件, 1.5MB) examples/putty_x86.exe
rspe
简单的本地Rust反射PE加载库
功能
此项目可以使用以下方法在内存中执行RunPE
- 本地RunPE (C/C++/RUST...)
- 64位
- 32位
- .NET RunPE (C#/VB/CLR...)
- 64位 .NET RunPE 进入内存(可能查看 clroxide 库)
- 32位 .NET RunPE 进入内存(可能查看 clroxide 库)
用法
use rspe::{reflective_loader, utils::check_dotnet};
// Main function
fn main() -> Result<(), String> {
// Read the file to load into a buffer
#[cfg(target_arch = "x86_64")]
let data = include_bytes!(r#".\putty_x64.exe"#).to_vec();
#[cfg(target_arch = "x86")]
let data = include_bytes!(r#".\putty_x86.exe"#).to_vec();
// Load the file based on the target architecture
// Check if the file is a .NET assembly
if !check_dotnet(data.clone()) {
// If it is not, use the reflective loader to load the file
unsafe {
reflective_loader(data.clone());
// Using Threads (useful to bind 2nd exe to execute at the same time):
// Currently not in use, but can be used to load the pe file in a separate thread
// let handle = std::thread::spawn(move || {
// pe::loader::reflective_loader(data.clone());
// });
// let _ = handle.join();
};
} else {
panic!("This is a .NET PE file. Only native PE image are supported! Please provide a native PE image.")
}
Ok(())
}
致谢 / 参考资料
特别感谢以下个人和项目对这一项目的贡献
- memN0ps 为学习提供了有用的 winapi rust 代码
- trickster0 为学习提供了许多 OffensiveRust 代码
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE 文件。