抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

曾经写了一篇go-cqhttp扫码登录异常的解决方法点击此处,当时go-cqhttp版本为v1.0.0,如今(2023年8月4日)已不再适用。在v1.1.0版本之后需要自建或者使用别人搭建的签名服务器,否则会返回错误代码45,这里记录下自己的操作和踩的坑。

问题描述

go-cqhttp更新版本v1.1.0之后,无法通过替换device.json文件登录,返回错误码45,需要配置签名服务器。

解决方法

1. linux操作系统解决方法

1.1 安装和启动docker

1
2
3
4
5
6
7
8
9
# 下载docker安装脚本,一键安装
curl -fsSL https://get.docker.com -o get-docker.sh
bash get-docker.sh

# 启动docker服务
systemctl start docker

# 查看docker状态,是否正常启动
service docker status

1.2 查看ANDROID_ID

如果你的device.json文件还没有删除,打开它,找到android_id值,比如我这里是d9b3a88f3cd1f951(瞎打的,总之是这样子的格式)。

如果你已经删除上面的文件,再次运行go-cqhttp,会自动生成device.json文件,同上操作。

这个参数非常重要,每次重启go-cqhttp会随机生成新的android_id值,如果使用别人的签名服务器,需要将你的device.json文件中android_id值改成别人签名服务器提供的,两者的值要对应。

1.3 自建签名服务器

实例化qsign的docker镜像:

1
2
3
4
5
6
7
8
9
10
# 开放防火墙端口(用docker默认的8080)
firewall-cmd --permanent --add-port=8080/tcp
# 重载防火墙
firewall-cmd --reload

# 运行docker
docker run -d --restart=always --name qsign -p 8080:8080 -e ANDROID_ID=d9b3a88f3cd1f951 xzhouqd/qsign:8.9.63

# 检查运行是否成功,访问主机端口没有报错就行
curl localhost:8080

映射的主机端口不要改,就用默认的8080,否则docker运行后会无法访问映射的主机端口,curl l映射的端口会出现报错curl: (56) Recv failure: Connection reset by peer,运行go-cqhttp也会出现获取协议T544报错和获取sso sign报错reset by peer!

1.4 修改config.yml

回到go-cqhttp目录,修改config.yml文件的sign-server字段,如下:

如果没有该字段,说明你的go-cqhttp版本不对,去github下载新的。

1.5 运行go-cqhttp

如果你之前用过go-cqhttp,把主目录下的data/versions/6.json文件删除,否则会因为协议版本和签名服务器的协议版本不一致导致仍然报错45,仍然提示你配置sign service!

删除6.json后,同样会让你进行滑块验证,到上面提示的网址手动滑块验证后,可能和我一样会提示账号开启了设备锁,不要慌,同样是到提示的网站,用手机QQ扫一下(不需要服务器和手机QQ在同一个网络环境),然后再次运行go-cqhttp,再次进行滑块验证即可。

成功运行~

2.windows操作系统解决方法

2.1 查看ANDROID_ID

这步和1.2一样,先从device.json获取android_id值,不再赘述。

2.2 自建签名服务器

下载这个仓库Releases · fuqiuluo/unidbg-fetch-qsign (github.com),release版本V1.0.3 JAR,注意版本。

解压后可以看到两个目录binlib,在主目录下创建txlib/8.9.86这样结构的两个文件夹,将unidbg-fetch-qsign/txlib/8.9.63 at master · fuqiuluo/unidbg-fetch-qsign (github.com)这个仓库下的两个.so结尾的文件下载到8.9.86文件夹中。

回到主目录,创建一个批处理文件run.bat

1
2
3
.\bin\unidbg-fetch-qsign.bat --host=127.0.0.1 --port=8080  --count=1 --library=txlib\8.9.63  --android_id=d890fd5ae11be94d

# 这里--port可以自定义端口,--count表示最大连接数,--library就是两个.so文件的路径,--android_id是第一步你获取的值

双击run.bat,一会儿后看到[FEKit_]info: task_handle.h:74 TaskSystem not allow是正常的。

2.3 修改config.yml,运行go-cqhttp

同1.4,1.5,不再赘述。

以上实现方式均参考自签名服务器相关问题 · Mrs4s/go-cqhttp · Discussion #2245 (github.com)

我自己在linux和windows上均试过没有问题,感谢提出解决方案的大佬。

欢迎小伙伴们留言评论~