mirai 登录全解


mirai-core 用户请自行查阅相关文档,我相信你们能做到
如果你不知道什么是 mirai-core,这篇文档是适合你的。

新手教程

不要尝试跳过新手教程玩 mirai。
https://docs.mirai.mamoe.net/ConsoleTerminal.htmlopen in new window

解决滑动验证码(滑块验证)不在本文档的范畴内,请自行想办法解决。

现状

服务器大力推行 security sign、energy sign 等,目前 mirai 不添加外部签名服务的情况下已经非常难登录了。
对于纯粹的用户(非开发者)来说,部署和使用签名服务阻力稍大,
经常会出现让开发者头疼的反馈(用法错误、不看中文报错)。
本文尽可能列举出目前可用的方法以及注意事项,以供参考。

有问题加群 1047497524 问,本文档没有涉及到的问题将帮助我改进文档。

什么是签名服务?

2.15.0 正式版起,mirai 开放了 tlv544 加密以及 sso 签名的接口,
意味着可以通过对接外部服务对数据包进行加密,
以满足服务器要求,让机器人作为“正常QQ用户”登录并聊天。

对于一般通过的 mirai-console 用户来说,
外部签名服务要生效,就需要通过插件对接 mirai 的接口。

从下文选择一个插件,开始吧。

怎么使用其它协议登录?

这是玩 mirai 最基础的命令,避免有一些跳过新手教程的整合包用户不知道,这里解释一下。

login <账号> <密码> [协议]

不需要输入 <>[]

假如,我们在使用 fix-protocol-version + magic-signer-guide,需要使用 8.9.58 协议登录。

先在 mirai 启动的时候看看日志输出的各协议版本信息
找到 8.9.58 对应的协议,
如果没有这个协议版本,需要用命令下载更新协议,在下文 fix-protocol-version 部分有说明。

假如我们已经找到了,比如

2023-07-21 11:45:13 I/fix-protocol-version: 当前各协议版本日期:
ANDROID_PHONE  8.9.63.11390  2023-05-26T10:46:18+08:00
ANDROID_PAD    8.9.58.11170  2023-05-26T10:46:18+08:00

那么我们需要登录的协议就是 ANDROID_PAD
不要无脑抄,根据自己的日志输出情况决定!!!
不要无脑抄,根据自己的日志输出情况决定!!!
不要无脑抄,根据自己的日志输出情况决定!!!

假如我们要登录的机器人QQ号是 114514,密码是 sodayo,那么登录命令就是

login 114514 sodayo ANDROID_PAD

少用整合包

安装签名服务涉及到你的账号安全,
来源不明的整合包、签名服务有可能包含恶意软件
除非整合包来自你可信的来源,否则一律不要使用整合包

登录时的警告是警告,不是报错

这是签名服务已成功注册的标志。

2.15.0 正式版起,如果你安装了签名服务,
登录时将会使用日志记录器 EncryptService.alert 的警告等级,打印出签名服务的文件位置信息。

这是在告诉你,你正在使用签名服务,可能会有信息泄露的风险,请不要使用来源不明的签名服务。

仅此而已,并不是报错。

日志记录器是日志每行开头在时间后面的东西。 比如 2023-07-21 11:45:14 I/Logger: Hello World. Logger 是日志记录器,用来分辨日志是在什么地方打印的。 I 是日志等级,Info(信息) 的缩写,除此之外还有 W(arn)警告、E(rror)错误、V(erbose)详细、D(ebug)调试 等日志级别。

不是所有报错都需要上报

有的报错是提示你哪里做错了,要求你改正,
你应当先认真阅读报错开头的信息,
如果是英文的可以先翻译再阅读

当你判断这个问题不是你能解决的之后再上报给开发者。

比如【请检查签名服务可用性】,应该先看签名服务是不是开着的,签名服务的配置和插件的配置对不对得上等等。

装了签名服务还是 45

两种可能:

  • 一是签名服务没配置好
  • 二是冻结或者封号引起的 code=45,老实活跃聊天等状态解除,或者换号吧。

成功的迹象

如果在完成滑动验证码后出现短信验证,很大几率已经成功了。

提示

以下是签名服务相关插件

fix-protocol-version

临时协议修复。
https://mirai.mamoe.net/topic/2386open in new window
对接多个签名服务,自带协议版本更新。

优点是选择和备用方案比较多,更新跟进快,缺点是对用户来说配置稍微复杂。

相信很多用户已经用过了,这里先把注意事项写前面。

使用的签名服务版本必须要和协议版本相同,
比如 8.9.58 协议不能用 8.9.63 的签名服务,

登录之前必须检查这两个版本是否相同。

第一次安装这个插件后需要修改 KFCFactory.json 填入签名服务对应的

  • 协议版本 ("x.x.xx": {)
  • 类型 ("type": "类型")
  • 地址、端口 ("base_url": "http://地址:端口")
  • 密钥 (剩下名字带key的就是密钥)

等参数,不填写是没有用的。插件详细页有填写例子。

出现【请检查可用性】的报错时先不要反馈
先自己检查一遍你的签名服务是不是开着的,签名服务类型对不对,端口对不对……
通常就是这些问题,你去反馈也只能得到同样的答复。

如果签名服务和协议版本对不上,可以在 mirai 用
protocol fetch 协议类型 版本 命令下载更新你需要的协议,
protocol fetch ANDROID_PAD 8.9.63

安装这个插件从来不是复杂的,复杂的是安装签名服务,
以及把签名服务的参数写进配置 KFCFactory.json 里。

好,现在正式开始配置教学。

首先安装 fix-protocol-version 最新版本启动一遍,
然后选择一个签名服务。(下面两个选一个就行了)


假定你选择

magic-signer-guide (又名 KuimiVM)
优点: 架构良好,运行稳定
缺点: 支持协议版本单一

先安装 docker (请自行搜索教程)

然后在浏览器打开项目地址 https://github.com/kiliokuara/magic-signer-guideopen in new window

然后打开终端(Windows 是 CMD),执行项目地址【使用方法】里的命令(不需要$号),执行之前可按需修改命令中的相关参数,在命令下面的“环境变量”有说明,不懂可以不改。然后确认服务已经开启。


假定你选择

unidbg-fetch-qsign
优点: 支持协议版本较多
缺点: 架构较差,运行可能不稳定

该项目已跑路,你可以寻找相关的 fork 项目续命。

将发行版解压到任意文件夹,那个文件夹应该要能看到 binlibtxlib 三个文件夹,
然后在这个文件夹打开终端(或CMD)执行以下命令

bin/unidbg-fetch-qsign --basePath=txlib/8.9.78

可以把 8.9.78 改成任意协议版本来切换签名服务版本。
签名服务配置文件在 txlib/协议版本/config.json

在配置文件中,可以在 unidbg 切换后端,dynarmicunicornkvm 三个选项开启一个关闭两个即为切换后端,遇到崩溃可尝试更换后端。

关闭 debug 可一定程度减少日志输出。


确认服务已经开启后,复制粘贴 fix-protocol-version 项目地址open in new window 里找到的
KFCFactory.json 的示例到你的 KFCFactory.json 文件,然后修改相关参数。

配置说明
base_url服务地址,包括端口号,如 http://127.0.0.1:端口,端口换成你签名服务的端口
type服务类型,可以填 fuqiuluo/unidbg-fetch-qsignkiliokuara/magic-signer-guide,用什么填什么
server_identity_keymagic-signer-guide 服务器身份密钥,在上面要执行的命令里有这个参数(SERVER_IDENTITY_KEY),默认是 vivo50
authorization_keymagic-signer-guide 客户端身份密钥,在上面要执行的命令里有这个参数(AUTH_KEY),默认是 kfc
keyunidbg-fetch-qsign 的访问密钥,在 config.json 里有,默认是 114514

如果上面的命令你没改过,相关参数你可以不改,只要复制示例配置就行了,不改就是默认的。

你也应该注意到了 KFCFactory.json 是用来将登录的不同版本协议对接到不同的签名服务的,
所以,你部署了什么签名服务,就要用它对应的协议版本登录。

怎么给协议换版本前面说了,这里就不重复了。

完成

改好之后,使用相应的协议登录就行了。

qsign

签名服务移植。
https://mirai.mamoe.net/topic/2357open in new window
unidbg-fetch-qsign 移植到 mirai,省去 http api,直接对接。

优点是配置简单,缺点是签名服务类型单一,虽可支持多 bot,但对于多 mirai 实例无法复用服务导致整体内存占用更大。

大部分用户都是单 mirai 实例单 bot,影响应该不大。

只需要到 https://github.com/MrXiaoM/qsign/releasesopen in new window 下载zip解压到 mirai 所在目录就能用了。

详细配置详见插件介绍。

完成

即装即用,直接用 ANDROID_PHONEANDROID_PAD 协议登录即可。

MiraiSignHandler

签名服务适配。
https://mirai.mamoe.net/topic/2348open in new window
对接 unidbg-fetch-qsign 1.1.0 到 mirai。

该签名服务版本较旧,且该插件固定端口,
加上作者很久没有跟进更新和承诺开源,不推荐使用

后记

没想到论坛上发布的签名服务插件不多。也好,不用我写那么多文档。