MiraiSignHandler —— Mirai对接Sign签名服务器,解决登录code=45失败和签名消息发送风控
-
MiraiSignHandler —— Mirai对接Sign签名服务器,解决code=45登录失败和签名风控检测
注意:Mirai-2.15.0的FixProtocolVersion已经内置了对签名服务器的支持,已经不再需要本项目进行支持维护,请查阅官方相关文档。本贴已弃用
这是什么?
最近腾讯加大了对Bot的管控,Mirai几乎全军覆没 code=45
不过好在已经有大神完美破解了code=45的Sign签名验证
因为Mirai官方一直没有更新,自己又比较急着用,所以我就先下手为强了
目前本人已经成功越过code=45,Bot已完美正常工作使用方式:
1.下载并使用mirai-core-all-2.15.0-抢先体验版
因为官方的mirai还没有支持Sign签名功能,说会在2.15.0正式版支持,但大家可能急着用,因此这里构建了抢先体验版可以立刻下载
在官方发布2.15.0正式版之后,就不需要使用我的抢先体验版了2.添加本插件所需的前置库
gson
为了处理Json数据,使用gson作为前置,请将其放到libs里
FixProtocolVersion-1.8.4-魔改版
不同QQ版本签名不同,这里支持了8.9.58,也就是FixProtocolVersion-1.8.4的协议版本。
但因为FixProtocolVersion自带了一个energy(tlv544),对接后完全使用签名认证服务器的energy签名,不用FixProtocolVersion带的,防止冲突,请下载使用我魔改过移除了energy的FixProtocolVersion3.搭建签名认证服务器
参见此处:https://github.com/fuqiuluo/unidbg-fetch-qsign
需使用txlibs为8.9.58的这两个
端口需要设定为11053(插件代码里写的端口)4.下载和安装我的修复插件
MiraiSignHandler.jar
添加到前置,在Bot运行之前加入以下代码:FixProtocolVersion.update(); //先执行FixProtocolVersion的修复,我的插件才能获取正确的协议版本 MiraiSignHandler.register();
5.运行Mirai
需要以ANDROID_PHONE协议运行,使用密码登录
你应该会看到后台在运行过程中多了很多getSign/getEnergy fire/response的日志,fire说明触发需要签名,response说明签名结果获得,如果都有说明你的程序已经正常工作常见问题解答:
Q:我没能搭建好签名认证服务器/签名认证服务器工作不正常或崩溃
A:请联系项目unidbg-fetch-qsign的作者而不是我,我是本插件的作者,但不是unidbg-fetch-qsign的作者
Q:可以支持mirai-console或者其他的吗?
A:可以,但我会在2.15.0正式版发布后再做支持
Q:你一定保证我折腾之后能登录上去吗?
A:我能告诉你我的code=45已经解决了,毫无疑问是有效果的。但没人能保证你一定登的上去,这要看tx的心情
Q:源码会发到github上吗?
A:会,但是还是那个原因,我会在官方更新2.15.0正式版之后再发源码到github
Q:为什么都登录完了还一直在刷Sign的日志
A:因为在正常发消息过程中,偶尔也会出现签名验证去检查风控你,这就是为什么某些Bot运行着突然就被踢下线或无法发送消息出去的缘故
Q:通过code=45登录验证之后,一个小时后被冻结了
A:这是很正常的,TX还会检测你的聊天信息,像机器人的时候就会把你冻结掉,你可以人工解冻,在这之后再次被冻结的概率会明显降低
Q:能更换其他登陆协议吗?
A:目前只支持安卓手机登陆,因为txlibs是从安卓QQ的apk里拿的
Q:能更换其他协议版本吗?
A:可以,首先你要修改Mirai的使用协议版本(如FixProtocolVersion更新导致的版本变化),然后请自行更换签名服务器里的txlibs为对应正确版本的才能登录(去QQ官方下载手机QQ.apk,然后把里面的libs so文件拿出来放到签名服务器下面)。本插件会自动获取当前协议版本运行。 -
好好好,已经成功登录了
-
-
-
-
-
施工完毕!
等到2.15.0正式版发布之后,这个插件依然是可以用的。
届时会把插件正式发布
群众的力量就像弹簧,你压的越紧,弹力就越大。 -
-
-
-
"群众的力量就像弹簧,你压的越紧,弹力就越大。" 感谢楼主以及楼主的这句话。
(可惜窝只会用mirai console 乌乌 坐等更新)
-
@WorldLeen tx:我******,你等着吧,我现在就加强风控力度,所有使用 Mirai 设备登录的 QQ 全部封号
-
-
@cssxsh
噢噢 原来这个和楼主是一样的嘛,不好意思我去试试,谢谢你 -
感谢楼主 现在本地能登陆了 但是碰到了一个问题
在本地idea里的时候起,加载的是
2023-07-01 13:52:35 W/EncryptService.alert: Encrypt service was loaded: application.miraisignhandler.SignEncryptService@55d98bbb
但是打包完放上服务器
2023-07-01 13:42:19 W/EncryptService.alert: Encrypt service was loaded: xyz.cssxsh.mirai.tool.TLV544Provider@5e13f156
加载的就变成这样了,但是就会报错然后我发现我用的FixProtocolVersion竟是1.5... 换成1.8后 本地变得和服务器上一样报错了
java.lang.AbstractMethodError: Receiver class xyz.cssxsh.mirai.tool.TLV544Provider does not define or inherit an implementation of the resolved method 'abstract void initialize(net.mamoe.mirai.internal.spi.EncryptServiceContext)' of interface net.mamoe.mirai.internal.spi.EncryptService. at net.mamoe.mirai.internal.network.components.EcdhInitialPublicKeyUpdaterImpl.initializeSsoSecureEcdh(EcdhInitialPublicKeyUpdater.kt:123)
-
@Sunosay 好的,已经发现问题,马上修复
-
@Sunosay
已经修复了,主楼帖子已经编辑
因为FixProtocolVersion自带了一个energy(tlv544),对接后完全使用签名认证服务器的energy签名,不用FixProtocolVersion带的,防止冲突,请下载使用我魔改过移除了energy的FixProtocolVersion
请看【使用方式】的【2】,下载【FixProtocolVersion-1.8.4-魔改版】替换之即可 -
@WorldLeen 非常感谢!bot终于又活了,45的这段日子太绝望了
-
为什么要魔改
你在 MiraiSignHandler 里把 priority 覆盖一下不就行了吗
/** * 基本 SPI 接口 * @since 2.8.0 */ // stable since 2.15 public interface BaseService { /** 使用优先级, 值越小越先使用 */ public val priority: Int get() = 0 }
-
@cssxsh 老版本接口和新版本不一样,启动了直接报抽象方法未继承错误,没办法。。。
-
大佬知道这是什么问题吗?
-
@guizaipiao 你没有按照第二步使用我发的FixProtocolVersion-1.8.4-魔改版 替换之
-
@WorldLeen 登上去了,感谢大佬,太牛了 厉害
-
@WorldLeen 在 MiraiSignHandler —— Mirai对接Sign签名服务器,解决登录code=45失败和签名消息发送风控 中说:
4.下载和安装我的修复插件
MiraiSignHandler.jar
添加到前置,在Bot运行之前加入以下代码:
FixProtocolVersion.update(); //先执行FixProtocolVersion的修复,我的插件才能获取正确的协议版本
MiraiSignHandler.register();上面说的操作,是需要 java -jar 执行那个jar包,还是怎么操作,不太明白“添加到前置”具体是什么意思,感谢大佬回复
-
@ctfshow
你用的是mirai-core-all吗?
这篇帖子针对的是使用mirai-core-all,自行编程使用mirai的用户的,如果是其他mirai可能看不懂
意思是这是个JAR库,引用这个库,然后在主类加入这部分代码就可以工作了 -
你好师傅,是使用的mirai-core-all-2.15.0-ea.jar,然后使用docker环境部署了验证
docker run -d --restart=always --name qsign -p 8080:8080 -e ANDROID_ID={android_id} xzhouqd/qsign:8.9.63
然后更新了魔改版的 fix-protocol-version-1.8.4-disabletlv.jar
下载了gson-2.10.1.jar 到libs目录
现在就是不太会用 MiraiSignHandler.jar 这个插件,看需要怎么操作比较好
-
还有就是 想请问下 ANDROID_ID={android_id} 这里的 {android_id} 在哪里获取,或者是说可以自己随便定义还是?