👾 Project Spectre
Electron UI 自动化引擎
RPA · 计算机视觉 · 逆向工程 · DirectInput · WebSocket 拦截
构建于第三方 Electron 应用之上。无源代码访问权限。100% 外部操作。
[](https://python.org)
[](https://opencv.org)
[](https://chromedevtools.github.io/devtools-protocol/)
[](https://chromedevtools.github.io/devtools-protocol/)
## 问题背景
有一个基于 Electron 的桌面应用程序,其操作流程全靠手动,既重复又缓慢。没有公开的 API。没有内部文档。也无法访问源代码。
显而易见的解决方案是将其自动化。而有趣的解决方案则是从外部进行操作,将其视为一个黑盒,仅利用系统暴露出来的信息:屏幕上的像素、输入事件以及内部网络流量。
**Project Spectre** 就是这个解决方案。
## 它能做什么?
- 实时捕获并分析屏幕,通过颜色和形状检测对象(HSV + 轮廓)
- 根据每一帧画面中视觉检测到的内容,做出自主决策
- 通过 DirectInput 在硬件层级注入移动和点击指令,绕过操作系统的抽象层
- 反序列化专有的二进制文件(`.XYF`),以读取并遵循动态的导航路径
- 通过 Chrome DevTools Protocol 拦截应用的内部 WebSocket 流量,以实时审计数据
## 架构
### 1. 计算机视觉 - OpenCV + HSV
引擎使用 `mss` 以尽可能高的速度捕获每一帧。它将其转换为 HSV 颜色空间,以便通过颜色范围精确隔离出感兴趣的元素,应用形态学掩码来清理视觉噪点,并计算轮廓和矩,从而对屏幕上的目标进行地理定位。
```
hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, BLANCO_MIN, BLANCO_MAX)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
cnts, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
检测过程会在质心周围 30px 的半径范围内,使用第二层颜色(橙色)掩码来验证每个候选对象,从而精确消除误检。
### 2. .XYF 解析器 - 二进制反序列化
该应用程序使用专有的 `.XYF` 格式来存储导航坐标。通过对该格式进行逆向工程,解析器使用 `struct` 以 Little-Endian 方式读取坐标对,并验证范围以丢弃损坏的数据。
```
def cargar_coords(path):
data = open(path, 'rb').read()
coords = []
for i in range(0, len(data), 8):
if i + 8 <= len(data):
x, y = struct.unpack('
*[Tomas Guzman](https://github.com/tomasgz7)*