random loader name

This commit is contained in:
KingKDot
2026-08-19 18:16:28 -05:00
parent c0560b0598
commit a489c4368b
5 changed files with 97 additions and 28 deletions
+30
View File
@@ -1,3 +1,5 @@
use std::time::{SystemTime, UNIX_EPOCH};
fn main() {
let root_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let mh_dir = std::path::Path::new(&root_dir).join("vendor/minhook");
@@ -22,5 +24,33 @@ fn main() {
.file(mh_src.join(hde))
.compile("libminhook.a");
generate_loader_entry();
println!("cargo:rerun-if-changed=vendor/minhook");
println!("cargo:rerun-if-changed=build.rs");
}
fn generate_loader_entry() {
let seed = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos() as u64
^ (std::process::id() as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15);
let name = format!("x{:06x}", seed & 0xFFFF_FF);
let src = format!(
"// Generated by build.rs — do not edit.\n\
// Randomized per-build reflective loader export name.\n\
pub(crate) const LOADER_EXPORT: &[u8] = b\"{name}\\0\";\n\
\n\
#[unsafe(no_mangle)]\n\
pub extern \"system\" fn {name}(lpParameter: usize) -> usize {{\n\
\x20 crate::reflective::loader_impl(lpParameter)\n\
}}\n"
);
let out_dir = std::env::var("OUT_DIR").unwrap();
std::fs::write(std::path::Path::new(&out_dir).join("loader_entry.rs"), src)
.expect("failed to write loader_entry.rs");
println!("cargo:rerun-if-changed=loader_entry.rs");
}