4 releases
new 0.2.0 | Apr 19, 2025 |
---|---|
0.1.2 | Apr 18, 2025 |
0.1.1 | Apr 18, 2025 |
0.1.0 | Apr 18, 2025 |
#78 in #hook
118 downloads per month
1.5MB
170 lines
Contains (ELF lib, 250KB) libs/arm64-v8a/libdobby.so, (static library, 245KB) libs/arm64-v8a/libdobby.a, (static library, 200KB) libs/armeabi-v7a/libdobby.a, (static library, 200KB) libs/x86/libdobby.a, (static library, 200KB) libs/x86_64/libdobby.a, (ELF lib, 105KB) libs/armeabi-v7a/libdobby.so and 2 more.
Dobby Rust Wrapper
这是一个 Dobby 库的 Rust 绑定,用于轻量级、多平台、多架构的函数 hook 操作,专为 Android 平台设计。
安装
将依赖添加到您的Cargo.toml
文件中:
[dependencies]
dobby-wrapper = "0.1.0"
注意: 此库依赖于Dobby库,需要正确配置Android NDK和库文件才能工作。
功能特性
- 通过 CXX 实现的 Rust 风格绑定
- 为常用操作提供安全的包装器
- 支持访问底层 API
- 支持 Dobby 支持的所有架构
交叉编译支持
该库设计为在 macOS 或其他平台上交叉编译至 Android 目标平台。支持以下 Android 架构:
armeabi-v7a
(32位 ARM)arm64-v8a
(64位 ARM)x86
(32位 x86)x86_64
(64位 x86)
项目结构
dobby-wrapper/
├── include/ # Dobby 头文件目录
├── libs/ # 不同架构的预编译库文件
│ ├── x86/ # x86 架构的库文件
│ ├── x86_64/ # x86_64 架构的库文件
│ ├── armeabi-v7a/ # 32位 ARM 库文件
│ └── arm64-v8a/ # 64位 ARM 库文件
├── .cargo/ # Cargo 配置文件
│ └── config.toml # Android 交叉编译配置
└── src/ # Rust 源码
├── lib.rs # 主要的 Rust 绑定
└── main.rs # 示例代码
使用方法
1. 准备 Dobby 库文件
您需要从 https://github.com/kreedzZhao/Dobby 获取并编译 Dobby 库。
编译完成后,将生成的库文件(静态库或动态库)放入相应架构的目录:
libs/x86/
- 32位 x86 库libs/x86_64/
- 64位 x86 库libs/armeabi-v7a/
- 32位 ARM 库libs/arm64-v8a/
- 64位 ARM 库
本项目目前使用静态库(.a
文件)进行链接。
2. 配置 Android NDK
首先,确保您已安装Android NDK。通常通过Android Studio或直接下载。设置NDK路径:
编辑 .cargo/config.toml
文件,更新您的NDK路径:
[target.aarch64-linux-android]
linker = "/path/to/your/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
ar = "/path/to/your/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
rustflags = ["-C", "link-arg=-Wl,--allow-multiple-definition"]
# 其他目标架构类似...
3. 交叉编译到 Android
设置 Rust 工具链支持 Android 目标平台:
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
rustup target add x86_64-linux-android
使用提供的脚本一键编译所有架构:
./build-android.sh
或者分别编译各个架构:
cargo build --target aarch64-linux-android # 针对 arm64-v8a
cargo build --target armv7-linux-androideabi # 针对 armeabi-v7a
cargo build --target i686-linux-android # 针对 x86
cargo build --target x86_64-linux-android # 针对 x86_64
编译结果在 target/<平台>/debug/
目录或使用脚本时在 release/
目录。
4. 在 Android 项目中使用
在 Android 项目中使用这个绑定,您需要将编译好的 Rust 库和 Dobby 库一起打包到您的 Android 应用中。
在您的 Rust 项目中添加以下依赖:
[dependencies]
dobby-wrapper = { path = "path/to/dobby-wrapper" }
API 文档
基本用法
use dobby_wrapper;
use std::os::raw::c_void;
// 获取 Dobby 版本
let version = dobby_wrapper::get_version();
// 符号解析
unsafe {
let address = dobby_wrapper::symbol_resolver("libc.so", "printf");
if !address.is_null() {
// 使用解析到的地址进行操作
}
}
// 函数 Hook
unsafe {
extern "C" fn my_replacement_func() {
println!("函数被拦截!");
}
let address: *mut c_void = /* 要 hook 的函数地址 */;
let mut original: *mut c_void = std::ptr::null_mut();
let result = dobby_wrapper::hook(
address,
my_replacement_func as *mut c_void,
&mut original as *mut *mut c_void
);
if result == 0 {
println!("Hook 成功");
}
}
故障排除
如果遇到链接问题,检查以下几点:
- 确保 NDK 路径正确且 NDK 版本兼容
- 检查
.cargo/config.toml
中的链接器路径是否正确 - 验证
libs/
目录下有正确的库文件
许可证
本 Rust 绑定使用与 Dobby 相同的 Apache-2.0 许可证。
No runtime deps
~0–1.2MB
~13K SLoC