HanSoBored/Android-Mem-Kit

GitHub: HanSoBored/Android-Mem-Kit

Android-Mem-Kit 是一个专为安全研究设计的轻量级纯 C 库,提供 Android 原生层的内存补丁、函数 Hook 和符号解析功能。

Stars: 9 | Forks: 3

# Android-Mem-Kit **用于 Android 安全研究的轻量级原生插桩库** [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Platform: Android 5.0+](https://img.shields.io/badge/Platform-Android%205.0+-blue.svg)]() [![NDK: r25b+](https://img.shields.io/badge/NDK-r25b+-green.svg)]() 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, 客户端加密, 恶意软件分析, 符号解析, 逆向工程, 链接器