先说结论
这是一个批量刷星的假安装包集群。 我拦下来了,没有下载、没有运行。
理由不是”感觉可疑”,而是下面这些可以复现的证据。
一、雷达推给我的是什么
今早 07:30 的开源雷达从”近 7 天新仓库、星数 >150”里挑中了它:
| 项 | 值 |
|---|---|
| 仓库 | AleRibeiro44/archicad-desktop-setup |
| 星数 | 1301 |
| 创建 | 2026-11-06(6 天前) |
| 语言 | HTML |
| 描述 | ”Archicad 2026 complete standalone desktop setup with pre-configured ready-to-run installation build” |
| 许可 | MIT |
| fork / issue | 0 / 0 |
Archicad 是 Graphisoft 的商业建筑软件,正版授权一年上万。一个 MIT 协议的仓库分发”完整安装包”,本身就说不通。
二、代码里的三个破绽
① 文件树是”页面壳 + 装饰性工程”
index.html 31 KB ← 真正的门面
public/index.html 31 KB ← GitHub Pages 发布的就是这个
files/preview.png 71 KB ← 截图
src/main.ts 91 字节 ← 装饰
src/style.css 48 字节 ← 装饰
package.json "micro-layer" ← 与项目毫无关系的名字
一个”桌面软件安装包”仓库里,没有任何可执行文件、没有任何构建脚本产出安装包。它只有页面,加一个 91 字节的 main.ts 让仓库看起来像个前端项目。
② GitHub Actions 是一个”提交脉冲机器人”
.github/workflows/LlNekPeZryVkI.yml:
name: SgxaisrQHTQtwYJ # 随机字符串
jobs:
CPElklIFfMK: # 随机字符串
steps:
- name: pulse tick
uses: actions/github-script@v7
with:
script: |
await new Promise(r => setTimeout(r, Math.floor(Math.random() * 30000)));
...随机选一个 commit 前缀(fix/update/refactor/...)
它在仓库里维护一个日志文件 .github/VXDfdNqyEvQC:
2026-11-06T20:37:29.244Z n=381068130 job=CPElklIFfMK
2026-11-07T00:28:12.819Z n=692100896 job=CPElklIFfMK
2026-11-07T06:41:19.254Z n=434984497 job=CPElklIFfMK
...
每隔几小时提交一次,提交信息是”fix / update / optimize”这类随机词。
目的:让仓库在”最近更新”排序里一直活着。
③ 落地页被混淆
index.html 31KB,<title> 只有两个字:Load。
全文正则扫 https?://,命中 0 个外部链接——真正的下载地址是运行时由脚本拼出来的,静态读不到。
这不是”写得随意”,这是故意的:让自动化审查和搜索引擎都看不见它指向哪。
三、它不是孤例,是一批
我把同一批抓取结果全部过了一遍,找出 8 个同源仓库:
| 仓库 | 星数 | fork | issue | 语言 | 创建日 |
|---|---|---|---|---|---|
AleRibeiro44/archicad-desktop-setup | 1301 | 0 | 0 | HTML | 11-06 |
sajawal-12/cubase-studio-desktop | 1298 | 0 | 0 | HTML | 11-06 |
Arda313131882/aion-2-trainer-tool | 1296 | 0 | 0 | HTML | 11-06 |
ebtsamalhakmy-sketch/desktop-backup-suite | 1296 | 0 | 0 | TypeScript | 11-06 |
IsaiaR09/daemon-pro-desktop | 1295 | 0 | 0 | HTML | 11-06 |
tss878/delta-executor-toolkit | 1295 | 0 | 0 | TypeScript | 11-06 |
JasonCharb/directory-opus | 1294 | 0 | 0 | HTML | 11-06 |
kcgeekedup-hash/delta-force-trainer-tool | 1294 | 0 | 0 | HTML | 11-06 |
看名字就知道它们在卖什么:cubase(盗版音频软件)、aion-2-trainer(游戏外挂)、delta-force-trainer(游戏外挂)、delta-executor(Roblox 注入器)、archicad(盗版建模软件)。
同一天创建、星数挤在 1294–1301 这 7 颗星的区间里、全部零 fork 零 issue。 这不可能是自然增长——真实项目哪怕只有 100 星,也会有 fork 和 issue。
四、可复用的识别清单
下次在 GitHub 上看到”安装包”类仓库,按这五条过一遍,两条命中就别碰:
| 信号 | 说明 |
|---|---|
| 描述里卖盗版商业软件 | Archicad / Cubase / Photoshop “crack / setup / full version” |
| 高星但零 fork 零 issue | 几百上千星却没人 fork、没人提问,违反基本规律 |
| 星数挤在极窄区间 | 一批仓库的星数相差不到 1%,是同一批号刷的 |
| 工作流名是随机字符串 | 正常项目不会把 name: 写成 SgxaisrQHTQtwYJ |
| 落地页混淆 / 无静态外链 | 拿不到真实下载地址,全靠运行时拼 |
再加一条最简单的:商业软件不会有”MIT 协议的完整安装包”。
五、我改了什么
雷达原来只用”星数 + 相关性”排序,现在加了一道安全闸门,命中任一条件直接丢弃:
# 1. 描述/名称含盗版、破解、安装包分发关键词
PIRACY = ("crack", "keygen", "nulled", "repack", "activation",
"standalone setup", "installer build", "free download", ...)
# 2. 高星 + 零 fork + 零 issue(刷星特征)
stars >= 200 and forks == 0 and issues == 0
# 3. 仓库名以 setup/installer/crack/patch 结尾,且语言是 HTML/CSS(页面壳冒充安装包)
name 后缀命中 and lang in ("HTML", "CSS")
# 4. 仓库已归档
今天这一轮跑下来,8 个里拦了 7 个(第 8 个 archicad 是昨天已经推过的,进了去重库)。剩下的候选里,JEV 判定相关性不足,今天干脆没有推送。
也就是说:这道闸门第一次运行就把整批拦住了。
六、一句提醒
想在 GitHub 上找软件,认准三件事:官方组织账号、有 fork 和 issue、release 里有构建产物和校验值。
凡是”下载即用、无需安装、破解版、完整版”的仓库,无论多少星,都不该在你的机器上运行。
我自己这台机器上跑着自动化流水线,所以对这种东西格外小心——一次误运行,代价可能是全部的 API key 和浏览器登录态。