mamoe / mirai

高效率 QQ 机器人支持库
https://mirai.mamoe.net
GNU Affero General Public License v3.0
14.5k stars 2.55k forks source link

code=45 登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。 #2561

Closed Dakkakk closed 1 year ago

Dakkakk commented 1 year ago

问题描述

已经通过 #2552 中提到的方法修改protocolVersion

object FixProtocolVersion {
    fun fix() {
        try {
            val MiraiProtocolInternal = Class.forName("net.mamoe.mirai.internal.utils.MiraiProtocolInternal")
            val field = MiraiProtocolInternal.fields[0]
            val companion = field[Any::class.java]
            val protocols = companion.javaClass.getMethod("getProtocols\$mirai_core")
                .invoke(companion) as EnumMap<*, *>
            val pad = protocols[MiraiProtocol.ANDROID_PAD]
            /*
        * apkId: String,
            id: Long,
            ver: String,
            sdkVer: String,
            miscBitMap: Int,
            subSigMap: Int,
            mainSigMap: Int,
            sign: String,
            buildTime: Long,
            ssoVersion: Int,
            canDoQRCodeLogin: Boolean = false,
        * */
            val padClass: Class<*> = pad!!.javaClass
            val padData: Map<String, Any> = hashMapOf(
                "id" to 537151218,
                "ver" to "8.9.33.10335",
                "sdkVer" to "6.0.0.2534",
                "buildTime" to 1673599898L,
            )
            for (f in padClass.fields) {
                f.isAccessible = true
                if (padData.containsKey(f.name)) {
                    f[pad] = padData[f.name]
                }
                f.isAccessible = false
            }
            val phone = protocols[MiraiProtocol.ANDROID_PHONE]
            val phoneData: Map<String, Any> = hashMapOf(
                "id" to 537151682,
                "ver" to "8.9.33.10335",
                "sdkVer" to "6.0.0.2534",
                "buildTime" to 1673599898L,
            )
            for (f in padClass.fields) {
                f.isAccessible = true
                if (padData.containsKey(f.name)) {
                    f[phone] = phoneData[f.name]
                }
                f.isAccessible = false
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
}

但是尝试登录时还是返回code=45, title=禁止登录, message=登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。 有尝试抓手q的网络包,能识别的内容里有一个537151685,把id换成这个值结果还是没用。 ANDROID_PAD返回的结果是一致的; ANDROID_WATCH返回code=238, title=禁止登录, message=请使用手Q扫描二维码或短信登录。 MACOSIPAD返回code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面,

复现

用以上提到的FixProtocolVersion修复版本后启动bot

mirai-core 版本

2.14.0

bot-protocol

ANDROID_PHONE

其他组件版本

No response

系统日志

No response

网络日志

No response

补充信息

No response

cssxsh commented 1 year ago

这个方法只能解决 ANDROID_PHONEANDROID_PADcode=235 问题 code=45 现在没有任何解决方案

dmlgzs commented 1 year ago

缺少tlv544了,这不只是风控 解决方法就是补齐tlv

Dakkakk commented 1 year ago

tlv544是什么

dmlgzs commented 1 year ago

tlv544是什么

可以参考 MiraiGo/go-cqhttp 或者 oicq 的第三方维护分叉 t544 的计算在 libfekit.so 里面

Dakkakk commented 1 year ago

好的谢谢,我去看看

landall commented 1 year ago

这个方法只能解决 ANDROID_PHONEANDROID_PADcode=235 问题 code=45 现在没有任何解决方案

我今天遇到了更严厉的情况。

mirai-core 2.14.0,所有协议全部是code=235

并且,我用该服务器的VPN时,QQ的PC版本客户端(关于里显示的是QQ 9.6.9)也提示版本过低。

应该是对某个QQ号直接执行了按IP禁止登录?或者提高了版本的要求?

dmlgzs commented 1 year ago

我今天遇到了更严厉的情况。

mirai-core 2.14.0,所有协议全部是code=235

并且,我用该服务器的VPN时,QQ的PC版本客户端(关于里显示的是QQ 9.6.9)也提示版本过低。

应该是对某个QQ号直接执行了按IP禁止登录?或者提高了版本的要求?

PCQQ 9.6.x 确实都是版本低了,要新的 NTQQ了(目前只有 mac 和 Linux) 手机 QQ 的提示才有意义

zhaodice commented 1 year ago

缺少tlv544了,这不只是风控 解决方法就是补齐tlv

gocq实现了tlv544(api)但依然有部分人提示版本过低,事情可能没有那么简单

landall commented 1 year ago

我今天遇到了更严厉的情况。 mirai-core 2.14.0,所有协议全部是code=235 并且,我用该服务器的VPN时,QQ的PC版本客户端(关于里显示的是QQ 9.6.9)也提示版本过低。 应该是对某个QQ号直接执行了按IP禁止登录?或者提高了版本的要求?

PCQQ 9.6.x 确实都是版本低了,要新的 NTQQ了(目前只有 mac 和 Linux) 手机 QQ 的提示才有意义

我第一次遇到PC版本的QQ都登录不上的情况,毕竟这个版本也是2022年下半年发布的了。

说起来,QQ真的打算用NTQQ替代现在的DirectUI版本的QQ么,不怕直接客户端被外挂js么……

dmlgzs commented 1 year ago

gocq实现了tlv544(api)但依然有部分人提示版本过低,事情可能没有那么简单

t544 可以解决新设备 code45 的禁止登录 至于已经黑了的老 guid 没办法了

zhaodice commented 1 year ago

gocq实现了tlv544(api)但依然有部分人提示版本过低,事情可能没有那么简单

t544 可以解决新设备 code45 的禁止登录 至于已经黑了的老 guid 没办法了

那不对啊,我是随机生成的设备信息

dmlgzs commented 1 year ago

那不对啊,我是随机生成的设备信息

你是 title 禁止登录还是温馨提示? 另外其实除了t544,还缺了 t545 的 qimei 和 t548 的 PoW 测试数据以及 t542 的一个固定数据,可能这几个也需要补齐

zhaodice commented 1 year ago

那不对啊,我是随机生成的设备信息

你是 title 禁止登录还是温馨提示? 另外其实除了t544,还缺了 t545 的 qimei 和 t548 的 PoW 测试数据

这就不知道了,因为gocq的错误信息只提示内容,不提示错误代码和title,麻烦

dmlgzs commented 1 year ago

这就不知道了,因为gocq的错误信息只提示内容,不提示错误代码和title,麻烦

我用的 oicq 是半个月前加了个 t544 就没有出现禁止登录也没有版本过低了 MiraiGo 的 iPad 的 subid 和 mirai 的都是旧的,或许 aPad 就不会了?

zhaodice commented 1 year ago

这就不知道了,因为gocq的错误信息只提示内容,不提示错误代码和title,麻烦

我用的 oicq 是半个月前加了个 t544 就没有出现禁止登录也没有版本过低了 MiraiGo 的 iPad 的 subid 和 mirai 的都是旧的,或许 aPad 就不会了?

aPad也是版本过低,难顶

Dakkakk commented 1 year ago

好的谢谢,我去看看 发现不太看得懂(倒

dmlgzs commented 1 year ago

aPad也是版本过低,难顶

看看这个 oicq 的? https://github.com/Icalingua-plus-plus/Icalingua-plus-plus 如果这个也不能登录那估计不止t544有问题 (不过这个开源的里面的 t544 不是调用 api 而是传了一个错误的,需要自己改成获取到的)

Sunosay commented 1 year ago

我现在是大号用mirai 每个协议都不行(aPad和手机都是45 mac是23x) 但是用icqq 手机和mac有设备锁然后收短信即可登录.小号是没问题

dmlgzs commented 1 year ago

我现在是大号用mirai 每个协议都不行(aPad和手机都是45 mac是23x) 但是用icqq 手机和mac有设备锁然后收短信即可登录.小号是没问题

icqq 就是上面那个的移植v1的到 oicq v2 的版本,也可以试试

dmlgzs commented 1 year ago

aPad也是版本过低,难顶

版本低应该不是t544的问题,应该只有code45是

MrY-Cat commented 1 year ago

似乎手机QQ昨晚又更新了个新版本

MrY-Cat commented 1 year ago

似乎手机QQ昨晚又更新了个新版本

然后一堆就变45了(悲)

balrogsxt commented 1 year ago

似乎手机QQ昨晚又更新了个新版本 +1 昨晚上凌晨突然就登录不上了,一直版本过低

Dakkakk commented 1 year ago

是的,昨天晚上连服务器都用不了了

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年3月11日(星期六) 下午3:44 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [mamoe/mirai] code=45 登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。 (Issue #2561)

似乎手机QQ昨晚又更新了个新版本 +1 昨晚上凌晨突然就登录不上了,一直版本过低

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

kotlinnut commented 1 year ago

两个机器人都崩了,协议旧了,该换了QAQ

ykinsoul commented 1 year ago

我也遇到同样的问题,不过FixProtocolVersion 更新到1.2.0之后使用MACOS协议可正常登录了

kotlinnut commented 1 year ago

我刚刚用fix-protocol-version1.2.0也可以正常登录了,不知道可以存活多久

Pika-Lee commented 1 year ago

我刚刚用fix-protocol-version1.2.0也可以正常登录了,不知道可以存活多久

我试了1.2.0也不行,删除/bot/QQ后还是提示45,四个号全部阵亡。。

kotlinnut commented 1 year ago

我刚刚用fix-protocol-version1.2.0也可以正常登录了,不知道可以存活多久

我试了1.2.0也不行,删除/bot/QQ后还是提示45,四个号全部阵亡。。

协议换成PAD试试,我用PAD可以正常登录

cssxsh commented 1 year ago

我刚刚用fix-protocol-version1.2.0也可以正常登录了,不知道可以存活多久

我试了1.2.0也不行,删除/bot/QQ后还是提示45,四个号全部阵亡。。

你需要使用 MACOS 协议

Him188 commented 1 year ago

2570