Telegram 群组 Telega 用户检测器:Go 语言实现
安装 VK 的 Telega 客户端,会在未经用户明确同意的情况下,将你的 Telegram ID 注册到 VK Calls 数据库中。这通过向 calls.okcdn.ru 进行匿名登录实现。从 Telegram ID 到 OK ID 的映射关系,通过无需认证的 API 即可公开访问。
基于 Go 语言的 antitelega 检测器会扫描群组,拉取成员 ID,并检查他们是否在数据库中。整个过程只需三个 HTTP 请求:匿名登录、通过外部 ID 查询 OK ID,以及解析响应。
POST https://calls.okcdn.ru/api/auth/anonymLogin
application_key=CHKIPMKGDIHBABABA
session_data={"device_id":"antitelega","version":2,...}
CHKIPMKGDIHBABABA 密钥是从 Telega APK(appId: 512001570726)中提取的。服务器会返回一个 session_key,用于后续请求。
POST https://calls.okcdn.ru/api/vchat/getOkIdByExternalId
application_key=CHKIPMKGDIHBABABA
session_key=<第一步获取>
externalId=123456789
响应中包含 ok_id 表示已注册;300 错误则表示未找到记录。
扫描器架构:从 /scan 命令到报告生成
机器人通过在“收藏消息”中输入 /scan @群组名 启动扫描。流程包括:
- 枚举成员:通过
ChannelsGetParticipants分页拉取成员列表,添加随机抖动,并过滤掉机器人和已删除账号。 - 缓存查询:检查 SQLite 缓存(TTL 6 小时)。
- 批量检查:通过工作池分发请求,带速率限制和抖动。
- 生成报告:在“收藏消息”中格式化输出,如果超过 3800 字符则分块发送。
二进制文件约 26 MB,纯 Go 实现,使用 modernc.org/sqlite,无 CGO,支持 ARM 架构。
风险级别:预设配置避免封禁
func jitteredDuration(d time.Duration, jitterPct float64) time.Duration {
factor := 1.0 + jitterPct*(2*rand.Float64()-1)
return time.Duration(float64(d) * factor)
}
抖动模拟人类行为,避免被检测。风险级别预设:
- 极度谨慎:1 个工作线程,1 req/s,30 人/页,±50% 抖动(700 人需 16 分钟)。
- 谨慎(默认):2 个工作线程,3 req/s,80 人/页,±40% 抖动(5 分钟)。
- 正常:4 个工作线程,6 req/s,150 人/页,±30% 抖动(2.5 分钟)。
- 激进:无抖动,最大速度(封禁风险高)。
用户机器人开发常见坑
- 错误设备配置:gotgproto 默认使用
GoTGProto, Helsinki,易触发封禁。修复:使用模拟 Telegram Desktop 的DeviceConfig。 - 固定间隔:精确 350 ms 是反垃圾系统的明显标志。必须使用抖动。
- API 变更:端点从
getOkIdsByExternalIds改为单数形式;密钥可能被 OK 撤销。建议将application_key配置化。
方法局限性
检测到 ok_id 只表示过去安装过 Telega,并非当前在使用。它完全镜像 Telega 的协议,无任何漏洞利用。
关键点:
- 首次 Telega
anonymLogin时创建映射。 - API 公开,密钥来自 APK。
- 用户机器人有封禁风险,使用小号。
- 缓存和抖动降低检测概率。
- 约 2000 行 Go 代码,MIT 许可。
— Editorial Team
暂无评论。