chromatic 安装指南:从源码构建到跑通验证的新手教程
【免费下载链接】chromaticUniversal modifier for Chromium/V8 | 广谱注入 Chromium/V8 的通用修改器项目地址: https://gitcode.com/gh_mirrors/be/chromatic
chromatic 是 BetterNCM 的整体重写继任者,一个广谱注入 Chromium/V8 的通用修改器。这篇 chromatic 安装教程带你从零完成构建与验证,适合想给内置 Chromium 内核的客户端写注入脚本的开发者。
先认识 chromatic:它是干嘛的、给谁用
老读者应该知道 BetterNCM。作者离开网易云音乐方向后把相关代码整体重写、改名 chromatic,老项目就此停更——所以这篇 chromatic 安装教程,同时也是很多"BetterNCM 配置方法"搜索者的新入口。
- 它做什么:在带 Chromium/CEF/V8 内核的客户端进程里运行 JS 脚本,实现原生函数拦截、内存读写扫描、软件/硬件断点、内存访问监控。
- 适合谁:插件脚本作者、客户端逆向与自动化爱好者、需要给自家 Chromium 应用加调试钩子的开发者。
- 支持范围:Windows、Linux、macOS、Android,架构覆盖 x64 与 arm64;项目仍处于活跃开发阶段。
技术上就一句话带过:C++23 编写,xmake 组织构建,内置 QuickJS 当脚本引擎,配套 capstone 反汇编、libffi 调原生函数、asmjit 运行时生成代码、libtcc 现场编译 C 代码。
chromatic 安装前检查清单:环境要求
📋 动手前把下面几样备齐,每项都是"缺了必卡"的:
- C++ 编译器:GCC 12 及以上,或 Clang 15 及以上,或 Windows 上的 Visual Studio 2022(MSVC)。为什么:代码按 C++23 标准编写,编译器太老直接编译不过。
- xmake:为什么:它是唯一的构建入口,拉依赖、编译、链接全靠它,不需要你自己配 CMake。
- Node.js + 包管理器(pnpm):为什么:脚本层用 TypeScript 编写,必须先构建出 JS 产物,核心库编译时会把这个产物打进静态库。
- Git:为什么:拉取源码。
- 64 位且内置 Chromium/CEF/V8 内核的目标应用:为什么:底层指针与调用约定全部按 64 位编写,x64 / arm64 之外的环境(比如 32 位程序)不在支持范围内,别硬试。
从源码一键装完:chromatic 构建四步走
拉取源码
执行git clone https://gitcode.com/gh_mirrors/be/BetterNCM。
成功标志:本地出现源码目录,根目录下能看到xmake.lua和src文件夹。
先构建脚本层
进入src/core/typescript目录,安装依赖并执行构建脚本。
成功标志:src/core/typescript/dist下生成了index.js。
执行 xmake build 全量编译
在仓库根目录执行xmake build。
成功标志:build目录下出现三类产物——chromatic-core 静态库、chromatic-test 测试可执行文件、chromatic-injectee 共享库(Windows 是.dll,Linux 是.so,macOS 是.dylib)。
跑一遍自带测试套件
执行xmake run chromatic-test。
成功标志:输出出现[ PASSED ]汇总且没有任何[ FAILED ],至此 chromatic 编译安装完成。
一步验证:确认 chromatic 真的装对了
✅ 光看测试全绿还不够。验证分两步:
- 重跑一次
xmake run chromatic-test,确认全绿结果可复现,而不是偶发。 - 到
build目录确认 chromatic-injectee 的共享库文件真实存在——这才是后续要放进目标应用的注入体。只跑了部分 target、或误删过 injectee 产物时,测试绿了也不代表能注入。
手动部署注入库(备选路径)
什么情况下才走这条路:你只有编译好的 injectee 产物、需要自行放入目标应用,或自动加载方式失败时,才考虑手动部署。
做法:把注入库拷贝到目标应用目录,按该应用的加载机制引入(如以 DLL 形式随主程序加载);启动目标应用后,用任务管理器或进程工具查看已加载模块,看到 injectee 库名出现即为部署成功。启动即崩溃的话,回到下面三个排坑场景自查。
chromatic 配置排坑:三个高频失败场景
🛠 翻车基本都发生在这三个位置:
链接报 undefined reference to JS_EnqueueJob
多出现在 Linux。原因是 breeze-quickjs-ng 与 breeze-js-runtime 相互引用,需要把这两个库用--start-group/--end-group包成一组再链接。仓库的 xmake 配置已经内置了这个处理,手动拼链接命令时别漏掉这组参数。
injectee 启动抛 Invalid embedded config
提示"bad magic or version",说明你手里的二进制还没被打包流程 patch 进内置配置。别把裸编译产物直接注入目标应用——要么使用官方发布包里的成品注入库,要么自己补上打包环节。
xmake build 报找不到 index.js
顺序错了。必须先在src/core/typescript构建出dist/index.js,再执行xmake build;漏掉前一步,core 静态库的链接必失败。
下一步:从跑通走向用好
装好 chromatic 只是起点,写脚本前把仓库内的 docs/zh-CN/API.md 接口文档过一遍,Process、Memory、Interceptor 三个模块能省掉大量试错时间。项目还在活跃开发中,遇到卡点直接在项目仓库提 Issue,中英文都可以。
【免费下载链接】chromaticUniversal modifier for Chromium/V8 | 广谱注入 Chromium/V8 的通用修改器项目地址: https://gitcode.com/gh_mirrors/be/chromatic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考