No version for distro humble. Known supported distros are highlighted in the buttons above.
No version for distro jazzy. Known supported distros are highlighted in the buttons above.
No version for distro kilted. Known supported distros are highlighted in the buttons above.
No version for distro rolling. Known supported distros are highlighted in the buttons above.
Repository Summary
Description | A comprehensive plug-in injection toolset |
Checkout URI | https://github.com/axhlzy/injectutils.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-06-25 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
magic_enum | 0.9.5 |
README
基本思路
- 将dobby,xdl,keystone,capstone,lief 等库看成插件库,实现他们的lua绑定
- 通过注入的方式(ptrace / /proc/mem)的方式进行指定pid的注入
- socket通信实现工具和宿主机的通信[ 这里的宿主机可以是安卓自己或者是windows/linux… ],当前为了测试方便,不跨平台,就在当前命令行交互 ( 其实也想使用到更上层好用的gprc/thrift做调用封装,先记录一下想法,先把大体功能跑起来后续再说怎么改把… )
-
交互目前使用命令行repl命令行补全的方式交互(使用replxx做命令行补全的交互),后续可以考虑客户端的实现(python或者是其他语言编写的交互作为前端)
目标
脱离frida的使用,更加自由的使用
定制化
工具化
的插件库
当前情况
当前用的是lua绑定,后面也可以考虑使用JavaScript虚拟机,后续可以考虑使用到protobuf之类的协议库方便上层语言的封装调用
- 两个启动方式 [ 注入 / 仅启动(调试测试用) ]
- 绑定库
-
keystone(ks) capstone(cs、dis) - BIND_BREAKPOINT (b)
- linker (somain, wait, disp_soinfo_link, disp_link_map_head, get_soinfo, show_soinfo, show_symtab, find_soinfo)
- process (getpid, getppid, getgid, geteuid, getuid, getpagesize, getcwd, now)
- signal (raise, cont)
- xdl (info, iteratePhdr, addressInfo, xdl_open, xdl_close, xdl_sym, xdl_dsym)
- others(demangleName、findsyms、syms)
- ……
-
- 功能封装
- linker wait (断点下在call_constructors,等待so加载,获取基础soinfo信息)
- …
TODO
- 封装 nativehook 前后端 ( Dobby, frida-gum, xhook, bhook )
-
封装 javahook 前后端( pine, YAHFA ) 、 加入测试性功能Java断点 REF:doc JVMTI REF:frida jvmti.js REF:android jvmti.h
一些其他问题
- 关于libart部分的代码,虽然clone下来了,但是也只是用作新增代码补全的参考,实际上只用到了头文件,并没有把它们编译进去,这里就涉及到一个问题,如何链接到libart原本的函数,原本的思路是直接pull出手机中的libart.so 然后写一个module让它动态链接的,但是发现安卓高版本是不让我们直接访问系统lib的(但是这个好像有办法解决,暂时没空研究),所以换了个思路直接写一个fakelibart编译进源码, 去把我们后续可能用到的函数全部代理出来,使用xdl解析出来转为函数指针封装其调用,让编译器在静态链接的时候能找到就可以了
- 关于rpc想使用双向流,但是又考虑到后续可能会进行函数封装给到客户端的js或者lua虚拟机调用,双向流展示倒是方便了,但是不太适合客户端虚拟机
Lua 绑定使用到 LuaBridge / LuaBridge3 后者更香 文档
备选
JavaScript虚拟机有很多备选
- hermes Facebook 专门为 React Native 框架在移动端(Android 和 iOS)设计的 JS 引擎
- V8 Google Chrome 浏览器使用的 JS 引擎, 支持最新的 ECMAScript 标准特性
- QuickJS 体积极小启动速度非常快
- Duktape 轻量级支持的 ECMAScript 标准相对较旧(主要支持 ES5/ES6 部分特性),性能和功能不如 V8、JSC 或 QuickJS擎, 多了一个inline repl
- jerryscript ECMAScript 标准支持有限,移动端性能也不太行
- mujs
- ChakraCore 来自微软的ERROR: Unsupported target processor: aarch64 (-.-!)
总体还是觉得v8比较舒服(除了编译麻烦点),配合dobby hook函数可以使用到lambda,命令行使用起来更简洁
UnityHook参考项目
- UnityResolve 只是简单测试过安卓平台,单文件实现很简洁很香
- IL2CPP_Resolver 还没测试
- BNM-Android
Inject的参考代码 (自己把自己注入到unity游戏中)
- AndKittyInjector 最完备的实现
- AndroidPtraceInject 注释非常清晰
- TinyInjector …
- linjector-rs / intruducer injection using /proc/mem
- NullTrace-Injector
JDB CALL IMPL
- 后续也可以绑定进去lua虚拟机,主打一个手动实现jdb在安卓上的调试器功能
- 至于怎么开启jdwp线程参考 这里 jdwp.ts#L243
与Lua虚拟机交互
- 安卓本地端创建一个socket服务器,远端windows/linux使用python或者再编译一个命令行程序用来与安卓通信
使用说明
使用的话还是很常规的操作
` push uinjector to /data/local/tmp `
` adb shell monkey -p com.xxx.xxx -c android.intent.category.LAUNCHER 1 -> start app `
` adb shell pidof com.xxx.xxx -> get pid `
` setenforce 0 `
File truncated at 100 lines see the full file
CONTRIBUTING
No version for distro galactic. Known supported distros are highlighted in the buttons above.
No version for distro iron. Known supported distros are highlighted in the buttons above.
No version for distro melodic. Known supported distros are highlighted in the buttons above.
No version for distro noetic. Known supported distros are highlighted in the buttons above.