工作原理
你写的就是普通 Go
Gomaton 不发明新语言、不搞脚本沙盒。你的工程是一个标准 Go module,import "gomaton.dev/sdk/..." 调用能力,同时可以自由混写标准库和任意第三方库 —— 全部编进同一个原生二进制、单运行时,所以没有跨边界的别扭,泛型 / 反射 / cgo 都随你用。
一次 F7 背后发生了什么
插件本身只是个薄壳,真正干活的是内核 agov,它按顺序做四件事:
- 换身编译 —— 把工程里的 SDK 空壳临时替换成真身,用 Android NDK 交叉编译成目标 ABI 的原生可执行文件(
GOOS=android,cgo 开启)。 - 部署 —— 把二进制 + 原生库 + 资源推到设备
/data/local/tmp/<项目名>/。 - 运行 —— 在设备上以
LD_LIBRARY_PATH指向随行库启动进程。 - 跟日志 —— 把设备进程的输出实时转发回工具窗,结尾
EXIT=0。
新电脑缺 Go / NDK / garble 时,agov 会自动下载到 ~/.autogov,你不用配环境。
能力藏在原生库里
看得见的 Go 是薄胶水,真正值钱的算法都在编进二进制的原生库中:
| 能力 | 载体 |
|---|---|
| 找色 / 找图 / 触控注入 | libagovkit.so |
| 模板匹配 | OpenCV(libopencv_java4.so) |
| 文字识别(OCR) | libppocr.so |
| 目标检测(YOLO) | libyolo.so |
| 控件树 / 采集 / 注入桥 | utils.dex(编译好的 dex) |
点击是怎么发生的
触控默认走 injectInputEvent 框架桥(低延迟、原生多指、跨 ROM);拟人滑动曲线在 dex 里生成。桥不可用时可回退到底层 /dev/input 注入。
发布时混淆
编译加 -g(或设置里勾"代码混淆"),产物会经 garble 混淆:重命名标识符、加密字符串字面量(运行时解密)。功能不变,逆向门槛显著提高。
识别 + 控制,混合而非绑死
Gomaton 是自研薄栈:定位可以用坐标、控件树、找图、OCR、YOLO 任意组合,不绑单一方案 —— 屏幕上看得见的任意 App(抖音 / TikTok / Temu / 小红书……)都能操作。