90 年代末 IRC 客户端风格的 TUI,用于对受密码保护的 GoFile 分享进行字典遍历。
它只与文档化的 REST API 通信,并将
速率限制视为硬性规则:顺序请求、保守的默认间隔、
对 429 / error-rateLimit 采用指数退避冷却,并在连续 429 后
自动暂停,以免客户端触发 IP 封禁。
作者: @abraxas_null · github.com/abraxas · abraxaslabs.tech · [email protected]
仓库: github.com/abraxas/GoFileX

截图是一次实时会话。分享 id、API token、账户 UUID 以及 找到的密码均已打码。产生该截图的搜寻仍在进行中;参见 相关笔记 以及下方的博客系列。
@YogSoth0 宣传了一场
致敬 TESO 的寻宝活动:先是 GoFile,然后是加密二进制文件。GoFile
这一层是一个受密码保护的公开分享。API 将该关卡暴露为
GET /contents/{id}?password=<sha256-hex>。GoFileX 就是我
编写的客户端,以便在不超出未公开的列表配额、
不招致 IP 封禁的情况下遍历这道关卡。
文章(分享密码隐去):
本仓库中的配套笔记: docs/this-is-not-your-password.md。
请仅对你拥有或已获得明确许可测试的分享使用本工具。
寻宝 / CTF 规则仍算作许可。紧循环调用
GET /contents 直到 GoFile 忘记你的 IP,
则不算。
来自 gofile.io/api 以及官方 Web 客户端
(wt.obf.js、
/myprofile):
| 规则 | GoFileX 的行为 |
|---|---|
| 一个账户,复用 token | 每个会话执行一次 POST /accounts;存储在 ~/.gofilex/sessions/ |
GET /contents/{id} 带有 Premium 标记 | 发送与官方 Web 客户端相同的 X-Website-Token,以便访客可以读取公开分享。来自 /myprofile 的 Premium token 是文档化的路径。 |
| 密码参数是明文的 SHA-256 十六进制 | 每次猜测在离开本机前都会先进行哈希 |
error-rateLimit / HTTP 429 → 退避 | 列表调用之间默认 3s(下限 1.5s),任何 API 调用之间间隔 1s。429 使用指数冷却 15s × 2ⁿ(上限 8 分钟)并将巡航速度加倍;连续 3 次 429 后暂停 |
| 确切限制未公开;反复 429 可能导致 IP 封禁 | 间隔下限为 1.5s。/rate 不会低于该值。超时后暂停直到 /heartbeat |
GET /servers ≤ 1 / 10s | 不调用 |
密码长度在本地被过滤为文档所述的 4–100 字符 范围,因此过短/过长的行永远不会消耗一次列表调用。
关于该协议的进一步阅读:
Python 3.10+(python.org)。从 github.com/abraxas/GoFileX 克隆:
git clone [email protected]:abraxas/GoFileX.git
cd GoFileX
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m gofilex
可选参数:
.venv/bin/python -m gofilex \
--session ctf1 \
--target https://gofile.io/d/YOURSHARE \
--wordlist ~/lists/high-signal.txt \
--wordlist ~/lists/nordpass.txt
如果会话没有 token,会在 /guest 上铸造一个访客账户。保留
该 token —— 对访客而言,这是返回该账户的唯一途径。如果
你已有 GoFile 账户(尤其是 Premium),请粘贴来自
gofile.io/myprofile 的 token:
/token YOUR_API_TOKEN
没有默认目标。在 /heartbeat 或 /start 之前,用 --target
或 /target 将客户端指向某个分享。
| 命令 | 作用 |
|---|---|
/help | 命令列表 |
/heartbeat | 一次 GET /contents(计入列表预算;不重试)。/probe 是别名 |
/wl add FILE [FILE…] | 将字典加入队列;按顺序运行,从保存的行恢复 |
/wl all | 将 wordlists/custom/ 下找到的所有列表加入队列,然后是 wordlists/public/ |
/start /pause /resume /stop | 遍历队列 |
/try password | 单次尝试 |
/rate 5 | 列表调用之间的秒数(最小 1.5,默认 3) |
/stats | 刷新 GET /accounts/{id}(用量 / 等级) |
/dl [dir] | 命中后下载文件 |
/session name | 切换可复用会话 |
/target <url|id> | 切换 GoFile 分享;进度按 id 分别保留 |
/targets | 列出本会话中存储的每个 GoFile id |
/quit | 保存并退出 |
F1 = 帮助,Ctrl-S = 开始,Ctrl-P = 暂停。
所有重要内容都会在每次密码尝试后写入
~/.gofilex/sessions/<name>.json(原子替换,权限 0600)。断电
或 /quit 会留下相同的检查点。
每个会话存储:
idle / paused / running / found)python -m gofilex 会重新打开上一个会话(~/.gofilex/active.json)。
使用 --session other 或 /session other 进行单独的搜寻。/target
另一个 id 会创建一个新任务并复制当前字典的路径
(进度从 0 开始)。切换回来会恢复该 id 的行。
循环在崩溃后不会自动启动(这样已失效的 GoFile IP
就不会被反复冲击)。/start 会从保存的行继续。
以前写入 ~/.onefilex/ 的安装会在首次启动时迁移到
~/.gofilex/。
GoFileX 不附带字典。请自备。参见 wordlists/README.md 了解公开来源:
将高信号 / OSINT 列表放在前面。/wl all 会将 wordlists/custom/
排在 wordlists/public/ 之前。完整的 rockyou.txt 以每次猜测 3 秒计算
需要数年的 API 时间;不要这样做。
一个 Premium token。GET /contents 文档说明仅限 Premium。铸造访客
token 是为了让客户端可以复用一个账户;以访客身份列出
他人的分享取决于 GoFile 是否接受官方 Web 应用发送的
website-token 头。如果 /heartbeat 返回
error-notPremium,请用 /token 粘贴来自
gofile.io/myprofile 的 Premium token。
我也无法生成一个就是寻宝答案的字典。那正是 寻宝的意义所在。阅读帖子,阅读附近的帖子,构建列表,将 GoFileX 指向它。
仅离线。不调用 api.gofile.io。
.venv/bin/pip install pytest
.venv/bin/pytest -q
| 本仓库 | github.com/abraxas/GoFileX |
| 作者 | @abraxas_null |
| GitHub | github.com/abraxas |
| 博客 | abraxaslabs.tech |
| 邮箱 | [email protected] |
| GoFile | gofile.io · API · FAQ · profile / token |
| 寻宝帖子 | YogSoth0 |
| 提示仓库 | Yog-Sotho/Fortinet-Hunter-2026 |
| TESO | teso.scene.at(存档) · 7350wurm |
| 系列 | 第 0 阶段 · 第 1 阶段 · 第 2 阶段 |