HanSoBored/Android-Mem-Kit
GitHub: HanSoBored/Android-Mem-Kit
Android-Mem-Kit 是一个专为安全研究设计的轻量级纯 C 库,提供 Android 原生层的内存补丁、函数 Hook 和符号解析功能。
Stars: 9 | Forks: 3
# Android-Mem-Kit
**用于 Android 安全研究的轻量级原生插桩库**
[](LICENSE)
[]()
[]()
Android-Mem-Kit 是一个用于 Android 原生插桩的极低开销纯 C 库。它提供了内存补丁、函数 Hook 和符号解析功能,专为**安全研究、调试和教育目的**而设计。
## ⚠️ 免责声明
本库适用于:
- ✅ **安全研究**(分析应用安全性、逆向工程)
- ✅ **教育目的**(学习 Android 内部机制、Hook 技术)
- ✅ **应用调试**(理解原生代码行为)
- ✅ **恶意软件分析**(恶意应用的动态分析)
- ✅ **渗透测试**(需获得授权)
**不适用于:**
- ❌ 游戏作弊或绕过游戏保护
- ❌ 绕过生产环境应用程序的安全措施
- ❌ 任何非法活动或未经授权的访问
**请始终负责任地并在法律允许的范围内使用。**
## 功能特性
| 功能 | 实现方式 | 描述 |
| :--- | :--- | :--- |
| **内存补丁** | 自定义 (基于 mprotect) | 跨页安全内存补丁,支持绕过 XOM |
| **函数 Hook** | [ShadowHook](https://github.com/bytedance/android-inline-hook) | 带有拦截、代理链和记录的内联 Hook |
| **符号解析** | [XDL](https://github.com/hexhacking/xdl) | 绕过 Android 7+ 链接器限制 |
| **IL2CPP 支持** | 内置 | Unity 应用分析与插桩 |
### 为什么选择纯 C?
- **二进制体积小**:<100KB 的额外开销
- **简单的 NDK 集成**:无需 FFI 桥接或复杂的构建配置
- **直接访问 JNI/NDK**:与 Android 框架的原生 C 集成
- **现代化工具链**:利用久经考验的库
## 快速开始
### 1. 前置条件
```
# 需要 NDK r25b 或更新版本
export ANDROID_NDK_HOME=/path/to/your/android-ndk
```
### 2. 克隆与配置
```
git clone https://github.com/HanSoBored/Android-Mem-Kit.git
cd Android-Mem-Kit
git submodule update --init --recursive
```
### 3. 构建
```
# 默认构建
make
# 构建并包含测试
make test
# 自定义 ABI
make ANDROID_ABI=armeabi-v7a
# 清理构建
make clean && make
# 使用 CMake 自定义构建 (用于子项目)
cmake -B build -DMEMKIT_BUILD_SHARED=OFF -DCMAKE_TOOLCHAIN_FILE=...
cmake --build build
# 构建并包含示例
cmake -B build -DBUILD_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE=...
cmake --build build
```
### 4. 基本用法
```
#include "memkit.h"
#include
#define LOG_TAG "MyResearch"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
static int (*orig_SSL_read)(void* ssl, void* buf, int num) = NULL;
static int my_SSL_read(void* ssl, void* buf, int num) {
LOGI("SSL_read: buf=%p, size=%d", buf, num);
return orig_SSL_read(ssl, buf, num);
}
__attribute__((constructor))
void init() {
memkit_hook_init(SHADOWHOOK_MODE_UNIQUE, false);
void* stub = memkit_hook_by_symbol(
"libssl.so", "SSL_read",
(void*)my_SSL_read,
(void**)&orig_SSL_read
);
if (stub) LOGI("SSL_read hooked!");
}
```
## 文档
| 文档 | 内容 |
|----------|---------|
| **[docs/USAGE.md](docs/USAGE.md)** | 完整的 API 参考、拦截 API、记录、运行时配置、DL 回调、故障排除 |
| **[docs/RECIPES.md](docs/RECIPES.md)** | 常见模式:SSL Pinning 绕过、完整性检查、函数跟踪 |
| **[docs/SECURITY_RESEARCH.md](docs/SECURITY_RESEARCH.md)** | 合规研究示例 |
| **[docs/MIGRATION.md](docs/MIGRATION.md)** | 从 Rust 版本迁移的指南 |
## 项目结构
```
Android-Mem-Kit/
├── include/
│ └── memkit.h # Public API header (~790 lines)
├── src/
│ ├── memory.c # Memory patching (mprotect-based)
│ ├── hooking.c # Basic hook/unhook + error handling
│ ├── hooking_flags.c # V2 hook API with mode flags
│ ├── intercept.c # Intercept API (pre-call CPU context inspection)
│ ├── records.c # Records API (operation logging)
│ ├── runtime_config.c # Runtime configuration
│ ├── dl_callbacks.c # DL init/fini callbacks
│ ├── il2cpp.c # IL2CPP symbol resolution
│ ├── il2cpp_safe.c # IL2CPP safe call helpers (sigsetjmp/siglongjmp)
│ └── xdl_wrapper.c # xDL wrapper layer
├── examples/
│ └── main.c # Complete usage example
├── docs/ # Documentation
└── deps/ # Submodules: shadowhook, xdl
```
## 已知问题
### Android 15 上的 ShadowHook 错误 12
在 **Android 15 (API 35)** 上使用 ShadowHook 时,你可能会在 `memkit_hook_init()` 期间遇到**错误代码 12**(`MK_ERRNO_INIT_LINKER`)。这是由 Android 15 中内部链接器行为的变更引起的,该变更影响了 ShadowHook 的 Hook 机制。
**受影响版本:** ShadowHook < v1.0.10
**变通方法:**
- 将 ShadowHook 固定到 **v1.0.10 或更高版本**,其中包含 Android 15 兼容性修复。
- 如果使用本地依赖,请更新子模块:
cd deps/shadowhook
git checkout v1.0.10 # 或更高版本
- 如果通过 git 获取(`USE_LOCAL_DEPS=OFF`),CMakeLists.txt 已经获取了包含该修复的 v1.3.0。
**跟踪状态:** 参见上游问题 [bytedance/android-inline-hook#91](https://github.com/bytedance/android-inline-hook/issues/91) 了解最新状态。
### 子项目构建
将 memkit 作为子项目(`add_subdirectory`)构建时,请确保设置 `-DMEMKIT_BUILD_SHARED=OFF` 以构建静态库。对于子项目,默认值为 `OFF`,对于独立构建,默认值为 `ON`。
## 致谢
本项目使用了优秀的开源库:
- **[ShadowHook](https://github.com/bytedance/android-inline-hook)** by ByteDance - Android 内联 Hook
- **[XDL](https://github.com/hexhacking/xdl)** by HexHacking - 动态链接器绕过
- **[Dobby](https://github.com/jmpews/Dobby)** - 轻量级 Hook 框架(最初灵感)
- **[KittyMemory](https://github.com/MJx0/KittyMemory)** - 内存补丁库(最初灵感)
## 许可证
MIT License - 详见 [LICENSE](LICENSE) 文件。
## 支持
- **Issues**: [GitHub Issues](https://github.com/HanSoBored/Android-Mem-Kit/issues)
- **Discussions**: [GitHub Discussions](https://github.com/HanSoBored/Android-Mem-Kit/discussions)
*专为安全研究社区构建。请负责任地使用。*
标签:Android, Android底层, Bash脚本, DAST, DSL, IL2CPP, Native Hook, NDK, ShadowHook, Unity分析, XDL, 云资产清单, 内存修改, 内存插桩, 内存补丁, 函数Hook, 客户端加密, 恶意软件分析, 符号解析, 逆向工程, 链接器