From 6cf8030d3c03b83ba9bc15feac76cfb558ee84d3 Mon Sep 17 00:00:00 2001 From: KomeiDiSanXian <2211213431@qq.com> Date: Mon, 10 Jul 2023 07:15:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?update:=20=E5=85=BC=E5=AE=B9=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=B0v1.1.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/gocq/login.go | 36 ++++++++++++++++++++++++++++--- cmd/gocq/main.go | 1 + internal/base/flag.go | 4 ++++ modules/config/config.go | 2 ++ modules/config/default_config.yml | 5 +++++ 5 files changed, 45 insertions(+), 3 deletions(-) diff --git a/cmd/gocq/login.go b/cmd/gocq/login.go index 5909af0d1..b000d9e37 100644 --- a/cmd/gocq/login.go +++ b/cmd/gocq/login.go @@ -270,10 +270,14 @@ func energy(uin uint64, id string, appVersion string, salt []byte) ([]byte, erro if !strings.HasSuffix(signServer, "/") { signServer += "/" } - response, err := download.Request{ + req := download.Request{ Method: http.MethodGet, - URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt)), - }.Bytes() + URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v&uin=%v", id, hex.EncodeToString(salt), uin), + } + if base.IsBelow110 { + req.URL = signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt)) + } + response, err := req.Bytes() if err != nil { log.Warnf("获取T544 sign时出现错误: %v server: %v", err, signServer) return nil, err @@ -310,3 +314,29 @@ func sign(seq uint64, uin string, cmd string, qua string, buff []byte) (sign []b token, _ = hex.DecodeString(gjson.GetBytes(response, "data.token").String()) return sign, extra, token, nil } + +func register(uin int64, androidID, guid []byte, qimei36, key string) { + if base.IsBelow110 { + log.Warn("签名服务器版本低于1.1.0, 跳过实例注册") + return + } + signServer := base.SignServer + if !strings.HasSuffix(signServer, "/") { + signServer += "/" + } + resp, err := download.Request{ + Method: http.MethodGet, + URL: signServer + "register" + fmt.Sprintf("?uin=%v&android_id=%v&guid=%v&qimei36=%v&key=%s", + uin, hex.EncodeToString(androidID), hex.EncodeToString(guid), qimei36, key), + }.Bytes() + if err != nil { + log.Warnf("注册QQ实例时出现错误: %v server: %v", err, signServer) + return + } + msg := gjson.GetBytes(resp, "msg") + if gjson.GetBytes(resp, "code").Int() != 0 { + log.Warnf("注册QQ实例时出现错误: %v server: %v", msg, signServer) + return + } + log.Infof("注册QQ实例 %v 成功: %v", uin, msg) +} diff --git a/cmd/gocq/main.go b/cmd/gocq/main.go index 10ab254f2..506186595 100644 --- a/cmd/gocq/main.go +++ b/cmd/gocq/main.go @@ -166,6 +166,7 @@ func LoginInteract() { if base.SignServer != "-" && base.SignServer != "" { log.Infof("使用服务器 %s 进行数据包签名", base.SignServer) + register(base.Account.Uin, device.AndroidId, device.Guid, device.QImei36, base.Key) wrapper.DandelionEnergy = energy wrapper.FekitGetSign = sign } else { diff --git a/internal/base/flag.go b/internal/base/flag.go index e622ecaea..33ec62d3f 100644 --- a/internal/base/flag.go +++ b/internal/base/flag.go @@ -39,6 +39,8 @@ var ( AllowTempSession bool // 是否允许发送临时会话信息 UpdateProtocol bool // 是否更新协议 SignServer string // 使用特定的服务器进行签名 + Key string // 签名服务器密钥 + IsBelow110 bool // 签名服务器版本是否低于1.1.0及以下 HTTPTimeout int PostFormat string // 上报格式 string or array @@ -89,6 +91,8 @@ func Init() { UseSSOAddress = conf.Account.UseSSOAddress AllowTempSession = conf.Account.AllowTempSession SignServer = conf.Account.SignServer + Key = conf.Account.Key + IsBelow110 = conf.Account.IsBelow110 HTTPTimeout = conf.Message.HTTPTimeout } { // others diff --git a/modules/config/config.go b/modules/config/config.go index b438359a5..cf8143f5a 100644 --- a/modules/config/config.go +++ b/modules/config/config.go @@ -36,6 +36,8 @@ type Account struct { UseSSOAddress bool `yaml:"use-sso-address"` AllowTempSession bool `yaml:"allow-temp-session"` SignServer string `yaml:"sign-server"` + Key string `yaml:"key"` + IsBelow110 bool `yaml:"is-below-110"` } // Config 总配置文件 diff --git a/modules/config/default_config.yml b/modules/config/default_config.yml index 6873052f8..0d62c53eb 100644 --- a/modules/config/default_config.yml +++ b/modules/config/default_config.yml @@ -24,6 +24,11 @@ account: # 账号相关 # sign-server: 'https://signserver.example.com' # 线上签名服务器 # 服务器可使用docker在本地搭建或者使用他人开放的服务 sign-server: '-' + # 如果签名服务器的版本在1.1.0及以下, 请将下面的参数改成true + is-below-110: false + # 签名服务器所需要的apikey, 如果签名服务器的版本在1.1.0及以下则此项无效 + # 本地部署的默认为114514 + key: '114514' heartbeat: # 心跳频率, 单位秒 From 16a2ff050e68d041bb6ec56dc112571adb77c4a9 Mon Sep 17 00:00:00 2001 From: KomeiDiSanXian <2211213431@qq.com> Date: Mon, 10 Jul 2023 07:22:50 +0800 Subject: [PATCH 2/2] fix lint warning: unused-parameter --- cmd/gocq/login.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/gocq/login.go b/cmd/gocq/login.go index b000d9e37..8b1976845 100644 --- a/cmd/gocq/login.go +++ b/cmd/gocq/login.go @@ -265,7 +265,7 @@ func fetchCaptcha(id string) string { return "" } -func energy(uin uint64, id string, appVersion string, salt []byte) ([]byte, error) { +func energy(uin uint64, id string, _ string, salt []byte) ([]byte, error) { signServer := base.SignServer if !strings.HasSuffix(signServer, "/") { signServer += "/"