1、先安装环境

 https://www.rust-lang.org/learn/get-started 

上来就要我的C盘啊

算了,不要倔,给它

说是装好了


2、开始

 http://www.qfrost.com/posts/rust-hook/ 


rustup install nightly
rustup default nightly
rustc --version



显示更新的最新的当夜版本,这很新啊。。


cargo init
cargo add retour



type type_LoadLibraryA = extern "system" fn(PCSTR) -> HINSTANCE;
static hook_LoadLibraryA: Lazy<GenericDetour<type_LoadLibraryA>> = Lazy::new(|| {
    let ori: type_LoadLibraryA = unsafe{std::mem::transmute(utils::win::get_proc_address("kernel32.dll", "LoadLibraryA").unwrap())};
    return unsafe { GenericDetour::new(ori, hooked_LoadLibraryA).unwrap() };
  });

extern "system" fn hooked_LoadLibraryA(lpFileName: PCSTR) -> HINSTANCE {
    let file_name = unsafe { CStr::from_ptr(lpFileName.as_ptr() as _) };
    
    let ret_val = hook_LoadLibraryA.call(lpFileName);
    println!(
        "hooked_LoadLibraryA lpFileName = {:?} ret_val = {:#X}",
        file_name, ret_val.0
    );
    return ret_val;
}

pub fn register_hook() -> anyhow::Result<()> {
    unsafe{ hook_LoadLibraryA.enable()?; }
    Ok(())
}

然后把这一段扔到main.rs里面去


最后

cargo run一下

这家伙竟然是在这个时候才开始下载依赖的