Skip to content

StringKe/terminal-farm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QQFramBot

通过注入 QQ 小程序进程实现的 QQ 农场自动化机器人。在真实客户端内操作,不逆向协议,不伪造客户端。

原理

QQ 农场运行在 QQEXMiniProgram(Electron 37 / Cocos Creator)中。通过 LLDB 将 dylib 注入主进程,dylib 在 V8 主线程启动一个 TCP RPC 服务,Rust bot 连接 RPC 向游戏页面注入 JS 并执行操作。

                    LLDB dlopen
qqbot-loader  ───────────────────►  QQEXMiniProgram 主进程
                                         │
                                    inject.dylib
                                    uv_async → V8 主线程
                                    启动 rpc_server.js
                                         │
                                    TCP :random_port
                                         │
qqbot (Rust)  ◄──────────────────►  rpc_server.js
   │                                     │
   │  eval_js("...")            webContents.executeJavaScript()
   │                                     │
   └──────────────────────────►  游戏页面 V8 context
                                    cc.director / GameGlobal / qq
                                    Cocos Creator Scene API

前置条件

  • macOS,SIP 已关闭(csrutil disable
  • QQ 桌面版已安装,QQ 农场小程序已打开
  • Rust toolchain
  • Xcode Command Line Tools(提供 lldbcccodesign

使用

# 1. 打开 QQ 农场小程序

# 2. 注入(自动编译 dylib、部署到 sandbox、注入、健康检查)
cargo run -p qqbot-loader

# 3. 探索场景树(查看农场结构)
cargo run -p qqbot -- --port <端口> --explore

# 4. 自动化运行
cargo run -p qqbot -- --port <端口>

端口号由 qqbot-loader 输出,也写入 ~/Library/Containers/com.tencent.qqexminiprogram/Data/rpc_port.txt

项目结构

inject/
  inject.c          C dylib,一次性注入器(uv_async + V8 API)
  Makefile           编译 + 签名 + 部署到 sandbox

scripts/
  rpc_server.js      TCP RPC 服务(运行在 Electron 主进程)
  game_bridge.js     Cocos Creator 游戏 API 桥接层

crates/
  qqbot-loader/      注入加载器(编译 → 部署 → LLDB 注入 → 健康检查)
  qqbot/             自动化 bot(RPC 客户端 + 农场逻辑 + 调度器)

技术细节

注入链路:dylib 的 __attribute__((constructor)) 在 dlopen 时执行,通过 uv_async_send 将回调调度到 V8 主线程。回调用 V8 C++ API(Script::Compile / Script::Run)执行 bootstrap JS,bootstrap 通过 process.mainModule.require('fs') 读取 rpc_server.js 并用 vm.runInThisContext 执行。

RPC 协议:每条消息 = 4 字节大端长度 + JSON。请求 {"id":1, "js":"..."} → 响应 {"id":1, "ok":true, "result":...}

游戏访问process.mainModule.require('electron').webContents.fromId(N).executeJavaScript() 将 JS 注入到游戏页面的 V8 context,该 context 有完整的 Cocos Creator API(cc.directorcc.find、场景节点树)。

已验证的农场结构

  • FarmMapComp:4x6 网格
  • LandComp:24 块地(grid_0_0 ~ grid_3_5
  • PlantComp:24 个植物槽,gridX/gridY != -1 表示已种植

与 terminal-farm 的区别

terminal-farm 通过逆向 WebSocket 协议直连服务器,需要处理 WASM 加密、设备指纹伪造、行为上报模拟。协议更新即失效。

本项目在真实 QQ 客户端内操作,所有网络通信由客户端原生处理。不涉及协议逆向、加密解密、反作弊对抗。代价是需要 macOS + SIP 关闭 + QQ 客户端运行。

About

QQ 经典农场或者微信经典农场自动化挂机工具 — 全屏终端 UI + 多账号 + HTTP API | Bun + TypeScript + Ink

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages