MJx0/AndKittyInjector

GitHub: MJx0/AndKittyInjector

基于 ptrace 的 Android 共享库注入器,支持多架构、多版本、反检测隐藏和多种注入模式。

Stars: 291 | Forks: 90

# AndKittyInjector 基于 ptrace 的 Android 共享库注入器,借助 [KittyMemoryEx](https://github.com/MJx0/KittyMemoryEx) 实现。 需要 C++17 或更高版本。
从 Android 的 /data 目录注入

支持:

- [x] 已在 Android 5.0 ~ 16 上测试 - [x] ABI arm, arm64, x86, x86_64 - [x] 通过 libhoudini.so 或 libndk_translation.so 注入模拟的 arm64 和 arm32 - [x] 一次注入多个库 - [x] 绕过 Android linker 命名空间限制 - [x] 支持 memfd dlopen - [x] 监控应用启动并注入 - [x] 自动启动应用并注入 - [x] 在 dlopen 断点处注入 - [x] 执行入口点后注入和卸载库 - [x] 从 /maps 隐藏库段 - [x] 从 native 或模拟 linker 的 solist 中隐藏库 ( dladdr & dl_iterate_phdr )

如何使用:

确保执行 chmod +x 或设置权限为 755 ``` Usage: AndKittyInjector [--help] [--version] --package --libs ... [--launch] [--watch] [--bp] [--delay ] [--memfd] [--free] [--hide] Optional arguments: -h, --help shows help message and exits -v, --version prints version information and exits --package Target package name to inject into. [required] --libs Libraries path to be injected. [nargs: 1 or more] [required] --launch Launch process and inject. --watch Monitor process start then inject. --bp Inject after breakpoint hit. --delay Delay injection in microseconds. --memfd Use memfd dlopen. --free Unload library after entry point execution. --hide Remove soinfo and remap library to anonymouse memory. ``` 示例: ``` # 启动 app 并注入 2 个 lib,延迟 1 秒 ./AndKittyInjector --package com.target.package --libs path/to/lib1 path/to/lib2 --memfd --launch --delay 1000000 ```

注意事项:

- 不要在库构造函数中启动线程,请使用 JNI_OnLoad: ``` extern "C" jint JNIEXPORT JNI_OnLoad(JavaVM* vm, void *key) { // key 1337 is passed by injector if (key != (void*)1337) return JNI_VERSION_1_6; KITTY_LOGI("JNI_OnLoad called by injector."); JNIEnv *env = nullptr; if (vm->GetEnv((void**)&env, JNI_VERSION_1_6) == JNI_OK) { KITTY_LOGI("JavaEnv: %p.", env); // ... } std::thread(thread_function).detach(); return JNI_VERSION_1_6; } ``` - 使用 --launch 或 --watch 在目标应用启动时立即注入时,您可能还需要使用 --bp 或 --delay,尤其是在注入模拟库时。 - 如果注入失败,目标应用将被强制停止。

编译:

- 确保已安装 NDK、cmake 和 make,并已添加到操作系统环境路径中。 - 设置 NDK_HOME 指向 NDK 文件夹 ``` git clone --recursive https://github.com/MJx0/AndKittyInjector.git cd AndKittyInjector/AndKittyInjector ndk-build.bat ```

致谢:

[arminject](https://github.com/evilsocket/arminject) [injectvm-binderjack](https://github.com/Chainfire/injectvm-binderjack) [TinyInjector](https://github.com/shunix/TinyInjector) [am_proc_start](https://gist.github.com/vvb2060/a3d40084cd9273b65a15f8a351b4eb0e#file-am_proc_start-cpp)
标签:ABI兼容, Android, C++17, DSL, Hakrawler, Hook, HTTP头分析, KittyMemoryEx, memfd, Native层, ptrace, Root, SO注入, SSH蜜罐, 云资产清单, 动态加载, 动态库注入, 注入器, 目录枚举, 移动安全, 绕过限制, 进程注入, 逆向工程, 隐藏注入