曾经写了一篇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 | # 下载docker安装脚本,一键安装 |
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 | # 开放防火墙端口(用docker默认的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,注意版本。
解压后可以看到两个目录bin
和lib
,在主目录下创建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 | .\bin\unidbg-fetch-qsign.bat --host=127.0.0.1 --port=8080 --count=1 --library=txlib\8.9.63 --android_id=d890fd5ae11be94d |
双击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上均试过没有问题,感谢提出解决方案的大佬。