diff --git a/client/internal/auth/auth.go b/client/internal/auth/auth.go index 6415a9264..67af159fc 100644 --- a/client/internal/auth/auth.go +++ b/client/internal/auth/auth.go @@ -25,36 +25,38 @@ var ( AppVersions = map[ProtocolType]*AppVersion{ AndroidPhone: { ApkId: "com.tencent.mobileqq", - AppId: 537153294, - SubAppId: 537153294, + AppId: 537164840, + SubAppId: 537164840, AppKey: "0S200MNJT807V3GE", - SortVersionName: "8.9.35.10440", - BuildTime: 1676531414, + SortVersionName: "8.9.63.11390", + BuildTime: 1685069178, ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D}, - SdkVersion: "6.0.0.2535", - SSOVersion: 19, + SdkVersion: "6.0.0.2546", + SSOVersion: 20, MiscBitmap: 150470524, SubSigmap: 0x10400, MainSigMap: WLOGIN_A5 | WLOGIN_RESERVED | WLOGIN_STWEB | WLOGIN_A2 | WLOGIN_ST | WLOGIN_LSKEY | WLOGIN_SKEY | WLOGIN_SIG64 | 1<<16 | WLOGIN_VKEY | WLOGIN_D2 | WLOGIN_SID | WLOGIN_PSKEY | WLOGIN_AQSIG | WLOGIN_LHSIG | WLOGIN_PAYTOKEN, // 16724722 + QUA: "V1_AND_SQ_8.9.63_4194_YYB_D", Protocol: AndroidPhone, }, AndroidPad: { ApkId: "com.tencent.mobileqq", - AppId: 537152242, - SubAppId: 537152242, + AppId: 537164888, + SubAppId: 537164888, AppKey: "0S200MNJT807V3GE", - SortVersionName: "8.9.35.10440", - BuildTime: 1676531414, + SortVersionName: "8.9.63.11390", + BuildTime: 1685069178, ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D}, - SdkVersion: "6.0.0.2535", - SSOVersion: 19, + SdkVersion: "6.0.0.2546", + SSOVersion: 20, MiscBitmap: 150470524, SubSigmap: 0x10400, MainSigMap: WLOGIN_A5 | WLOGIN_RESERVED | WLOGIN_STWEB | WLOGIN_A2 | WLOGIN_ST | WLOGIN_LSKEY | WLOGIN_SKEY | WLOGIN_SIG64 | 1<<16 | WLOGIN_VKEY | WLOGIN_D2 | WLOGIN_SID | WLOGIN_PSKEY | WLOGIN_AQSIG | WLOGIN_LHSIG | WLOGIN_PAYTOKEN, // 16724722 + QUA: "V1_AND_SQ_8.9.63_4194_YYB_D", Protocol: AndroidPad, }, AndroidWatch: { @@ -163,6 +165,7 @@ type AppVersion struct { MiscBitmap uint32 SubSigmap uint32 MainSigMap uint32 + QUA string Protocol ProtocolType } @@ -251,5 +254,6 @@ type appVersionFile struct { MiscBitmap uint32 `json:"misc_bitmap"` MainSigMap uint32 `json:"main_sig_map"` SubSigmap uint32 `json:"sub_sig_map"` + QUA string `json:"qua"` ProtocolType ProtocolType `json:"protocol_type"` } diff --git a/client/internal/network/transport.go b/client/internal/network/transport.go index f5a017c75..3692f4043 100644 --- a/client/internal/network/transport.go +++ b/client/internal/network/transport.go @@ -2,6 +2,7 @@ package network import ( "strconv" + "strings" "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client/internal/auth" @@ -21,6 +22,96 @@ type Transport struct { // conn *TCPClient } +var WhiteListCommands = ` +ConnAuthSvr.fast_qq_login +ConnAuthSvr.sdk_auth_api +ConnAuthSvr.sdk_auth_api_emp +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoBarrage +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoComment +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoFollow +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoLike +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoPush +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoReply +FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.PublishFeed +FeedCloudSvr.trpc.videocircle.circleprofile.CircleProfile.SetProfile +friendlist.addFriend +friendlist.AddFriendReq +friendlist.ModifyGroupInfoReq +MessageSvc.PbSendMsg +MsgProxy.SendMsg +OidbSvc.0x4ff_9 +OidbSvc.0x4ff_9_IMCore +OidbSvc.0x56c_6 +OidbSvc.0x6d9_4 +OidbSvc.0x758 +OidbSvc.0x758_0 +OidbSvc.0x758_1 +OidbSvc.0x88d_0 +OidbSvc.0x89a_0 +OidbSvc.0x89b_1 +OidbSvc.0x8a1_0 +OidbSvc.0x8a1_7 +OidbSvc.0x8ba +OidbSvc.0x9fa +OidbSvc.oidb_0x758 +OidbSvcTrpcTcp.0x101e_1 +OidbSvcTrpcTcp.0x101e_2 +OidbSvcTrpcTcp.0x1100_1 +OidbSvcTrpcTcp.0x1105_1 +OidbSvcTrpcTcp.0x1107_1 +OidbSvcTrpcTcp.0x55f_0 +OidbSvcTrpcTcp.0x6d9_4 +OidbSvcTrpcTcp.0xf55_1 +OidbSvcTrpcTcp.0xf57_1 +OidbSvcTrpcTcp.0xf57_106 +OidbSvcTrpcTcp.0xf57_9 +OidbSvcTrpcTcp.0xf65_1 +OidbSvcTrpcTcp.0xf65_10 +OidbSvcTrpcTcp.0xf67_1 +OidbSvcTrpcTcp.0xf67_5 +OidbSvcTrpcTcp.0xf6e_1 +OidbSvcTrpcTcp.0xf88_1 +OidbSvcTrpcTcp.0xf89_1 +OidbSvcTrpcTcp.0xfa5_1 +ProfileService.getGroupInfoReq +ProfileService.GroupMngReq +QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoComment +QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoReply +QChannelSvr.trpc.qchannel.commwriter.ComWriter.PublishFeed +qidianservice.135 +qidianservice.207 +qidianservice.269 +qidianservice.290 +SQQzoneSvc.addComment +SQQzoneSvc.addReply +SQQzoneSvc.forward +SQQzoneSvc.like +SQQzoneSvc.publishmood +SQQzoneSvc.shuoshuo +trpc.group_pro.msgproxy.sendmsg +trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLoginUnusualDevice +trpc.o3.ecdh_access.EcdhAccess.SsoEstablishShareKey +trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Access +trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Establish +trpc.o3.ecdh_access.EcdhAccess.SsoSecureAccess +trpc.o3.report.Report.SsoReport +trpc.passwd.manager.PasswdManager.SetPasswd +trpc.passwd.manager.PasswdManager.VerifyPasswd +trpc.qlive.relationchain_svr.RelationchainSvr.Follow +trpc.qlive.word_svr.WordSvr.NewPublicChat +trpc.qqhb.qqhb_proxy.Handler.sso_handle +trpc.springfestival.redpacket.LuckyBag.SsoSubmitGrade +wtlogin.device_lock +wtlogin.exchange_emp +wtlogin.login +wtlogin.name2uin +wtlogin.qrlogin +wtlogin.register +wtlogin.trans_emp +wtlogin_device.login +wtlogin_device.tran_sim_emp +` + func (t *Transport) packBody(req *Request, w *binary.Writer) { pos := w.FillUInt32() if req.Type == RequestTypeLogin { @@ -45,12 +136,8 @@ func (t *Transport) packBody(req *Request, w *binary.Writer) { w.WriteUInt16(uint16(len(t.Sig.Ksid)) + 2) w.Write(t.Sig.Ksid) - - secSign := t.PackSecSign(req) - w.WriteUInt32(uint32(len(secSign) + 4)) - w.Write(secSign) } - if wrapper.AllowSignSendMsg != nil && wrapper.AllowSignSendMsg() && req.CommandName == "MessageSvc.PbSendMsg" { + if strings.Contains(WhiteListCommands, req.CommandName) { secSign := t.PackSecSign(req) w.WriteUInt32(uint32(len(secSign) + 4)) w.Write(secSign) @@ -69,7 +156,10 @@ func (t *Transport) PackSecSign(req *Request) []byte { if wrapper.FekitGetSign == nil { return []byte{} } - sign, extra, token, err := wrapper.FekitGetSign(uint64(req.SequenceID), strconv.FormatInt(req.Uin, 10), req.CommandName, "V1_AND_SQ_8.9.50_3898_YYB_D", req.Body) + sign, extra, token, err := wrapper.FekitGetSign(uint64(req.SequenceID), strconv.FormatInt(req.Uin, 10), req.CommandName, t.Version.QUA, req.Body) + if err != nil { + return []byte{} + } m := &pb.SSOReserveField{ Flag: 0, Qimei: t.Device.QImei16, diff --git a/wrapper/codec.go b/wrapper/codec.go index 259a958ef..8a6f1b721 100644 --- a/wrapper/codec.go +++ b/wrapper/codec.go @@ -3,5 +3,3 @@ package wrapper var DandelionEnergy func(uint64, string, string, []byte) ([]byte, error) var FekitGetSign func(uint64, string, string, string, []byte) ([]byte, []byte, []byte, error) - -var AllowSignSendMsg func() bool