基于 Rust 的 Android 64 位 PLT hook 库。
本项目参考了 ByteHook 的任务化模型设计,使用 Rust 完全重写。
本库不兼容 ByteHook / ShadowHook 等其他 PLT hook 框架同时加载,请勿在同一进程中混用。
- 任务式 API:
init / hook_single / hook_partial / hook_all / unhook - 运行期持续新增 hook,无需"先注册完再 refresh"
caller / callee / ignore路径规则支持实例级定位(libxxx.so@0xBASE%0xINSTANCE)hub + trampoline架构,每个调用点独立管理 proxy 链- 多任务独立卸载,同一调用点可独立 unhook
- 环形调用检测,命中递归环时自动回落原函数
- 自动模式基于
dlopen / dlclose事件触发刷新,带低频兜底巡检 - ELF 遍历使用
dl_iterate_phdr,支持 SYSV / GNU hash 与 packed relocation - SIGSEGV / SIGBUS 保护槽位支持动态扩容
use std::ffi::c_void;
use srx_hook::{init, hook_single, refresh, HookMode, SrxHookErrno};
unsafe extern "C" fn my_proxy() {}
let status = init(HookMode::Manual, true);
assert_eq!(status, SrxHookErrno::Ok);
let stub = hook_single(
"libtarget.so",
None,
"target_symbol",
my_proxy as *mut c_void,
None,
std::ptr::null_mut(),
);
assert!(stub.is_some());
let r = refresh();
assert_eq!(r, SrxHookErrno::Ok);cargo build --manifest-path hook_test/Cargo.toml \
--target aarch64-linux-android --release
adb push target/aarch64-linux-android/release/hook_test \
/data/local/tmp/srx_hook_test/
adb push target/aarch64-linux-android/release/libhook_test.so \
/data/local/tmp/srx_hook_test/
adb shell chmod 755 /data/local/tmp/srx_hook_test/hook_test
adb shell /data/local/tmp/srx_hook_test/hook_test项目通过 GitHub Actions 在 x86_64 Android 模拟器上执行两级验证:
短时验证(每次 push / PR 触发):
| 参数 | 值 |
|---|---|
HOOK_TEST_MARATHON_ROUNDS |
120 |
HOOK_TEST_AUTO_MARATHON_ROUNDS |
60 |
HOOK_TEST_SOAK_ROUNDS |
1 |
HOOK_TEST_CONCURRENT_WORKERS |
16 |
HOOK_TEST_CONCURRENT_CALLS |
16 |
HOOK_TEST_LEAK_ROUNDS |
64 |
中时验证(每次 push / PR 触发):
| 参数 | 值 |
|---|---|
HOOK_TEST_MARATHON_ROUNDS |
1200 |
HOOK_TEST_AUTO_MARATHON_ROUNDS |
600 |
HOOK_TEST_SOAK_ROUNDS |
3 |
HOOK_TEST_CONCURRENT_WORKERS |
48 |
HOOK_TEST_CONCURRENT_CALLS |
48 |
HOOK_TEST_LEAK_ROUNDS |
320 |
| 环境变量 | 说明 | 默认值 |
|---|---|---|
HOOK_TEST_MARATHON |
启用手动长跑场景 | 0 |
HOOK_TEST_MARATHON_ROUNDS |
手动长跑轮次 | 4000 |
HOOK_TEST_MARATHON_REPORT_STEP |
手动长跑进度输出间隔 | 400 |
HOOK_TEST_AUTO_MARATHON |
启用自动模式长跑 | 0 |
HOOK_TEST_AUTO_MARATHON_ROUNDS |
自动模式长跑轮次 | 4000 |
HOOK_TEST_AUTO_MARATHON_REPORT_STEP |
自动模式进度输出间隔 | 400 |
HOOK_TEST_SOAK |
启用复合夜跑场景 | 0 |
HOOK_TEST_SOAK_ROUNDS |
复合夜跑轮次 | 6 |
HOOK_TEST_SOAK_REPORT_STEP |
复合夜跑进度输出间隔 | 1 |
HOOK_TEST_AUTO_RELOAD_ROUNDS |
自动重载压测轮次 | 120 |
HOOK_TEST_CONCURRENT_WORKERS |
并发压测线程数 | 72 |
HOOK_TEST_CONCURRENT_CALLS |
并发压测每线程调用次数 | 80 |
HOOK_TEST_CONCURRENT_ROUNDS |
并发压测 hook/unhook 轮次 | 80 |
HOOK_TEST_PERSISTENT_WORKERS |
持久 hook 并发线程数 | 56 |
HOOK_TEST_PERSISTENT_CALLS |
持久 hook 每线程调用次数 | 320 |
HOOK_TEST_LEAK_ROUNDS |
泄漏 smoke 轮次 | 320 |
MIT