5 个版本
0.2.3 | 2023年12月13日 |
---|---|
0.2.2 | 2023年12月13日 |
0.2.0 | 2023年4月15日 |
0.1.1 | 2022年8月26日 |
#3 in #detour
9KB
56 代码行,不包括注释
Crochet
这个包是一个基于 detour 的简单运行时钩织库,并且大量受到 skyline-rs(我大量借鉴了他们的优秀项目,所以建议您去看看)的启发。
安装
[dependencies]
crochet = "0.2"
用法
use winapi::ctypes::c_int;
use winapi::shared::minwindef::{BOOL, DWORD, HINSTANCE, LPVOID, TRUE, UINT};
use winapi::shared::windef::HWND;
use winapi::um::winnt::{DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, LPCWSTR};
#[no_mangle]
#[allow(non_snake_case, unused_variables)]
extern "system" fn DllMain(dll_module: HINSTANCE, call_reason: DWORD, reserved: LPVOID) -> BOOL {
match call_reason {
DLL_PROCESS_ATTACH => {
crochet::enable!(messageboxw_hook).expect("Could not enable messageboxw hook")
}
DLL_PROCESS_DETACH => {
crochet::disable!(messageboxw_hook).expect("Could not disable messageboxw hook")
}
_ => {}
}
TRUE
}
#[crochet::hook(compile_check, "user32.dll", "MessageBoxW")]
fn messageboxw_hook(hwnd: HWND, _text: LPCWSTR, caption: LPCWSTR, u_type: UINT) -> c_int {
let text = "Tu as fait mouche, Mouche !\0"
.encode_utf16()
.collect::<Vec<u16>>();
call_original!(hwnd, text.as_ptr(), caption, u_type)
}
许可证
MIT
依赖项
~3–10MB
~109K SLoC