Skip to content

Commit

Permalink
Merge pull request #333 from 6DDUU6/master
Browse files Browse the repository at this point in the history
增加头部SsoSecureInfo代码实现
  • Loading branch information
Mrs4s committed Jun 5, 2023
2 parents 22ff004 + 425f3e4 commit 758c7b8
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
41 changes: 41 additions & 0 deletions client/internal/network/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import (

"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client/internal/auth"
"github.com/Mrs4s/MiraiGo/client/pb"
"github.com/Mrs4s/MiraiGo/internal/proto"
"github.com/Mrs4s/MiraiGo/wrapper"
"github.com/pkg/errors"
)

// Transport is a network transport.
Expand Down Expand Up @@ -41,6 +45,15 @@ 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() && req.CommandName == "MessageSvc.PbSendMsg" {
secSign := t.PackSecSign(req)
w.WriteUInt32(uint32(len(secSign) + 4))
w.Write(secSign)
}

w.WriteUInt32(0x04 + uint32(len(t.Device.QImei16)))
Expand All @@ -52,6 +65,34 @@ func (t *Transport) packBody(req *Request, w *binary.Writer) {
w.Write(req.Body)
}

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)
m := &pb.SSOReserveField{
Flag: 0,
Qimei: t.Device.QImei16,
NewconnFlag: 0,
Uid: strconv.FormatInt(req.Uin, 10),
Imsi: 0,
NetworkType: 1,
IpStackType: 1,
MessageType: 0,
SecInfo: &pb.SsoSecureInfo{
SecSig: sign,
SecDeviceToken: token,
SecExtra: extra,
},
SsoIpOrigin: 0,
}
data, err := proto.Marshal(m)
if err != nil {
panic(errors.Wrap(err, "failed to unmarshal protobuf SSOReserveField"))
}
return data
}

// PackPacket packs a packet.
func (t *Transport) PackPacket(req *Request) []byte {
// todo(wdvxdr): combine pack packet, send packet and return the response
Expand Down
19 changes: 19 additions & 0 deletions client/pb/data.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions client/pb/data.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,25 @@ syntax = "proto3";

option go_package = "github.com/Mrs4s/MiraiGo/client/pb";

message SSOReserveField {
int32 flag = 9;
string qimei = 12;
int32 newconn_flag = 14;
string uid = 16;
int32 imsi = 18;
int32 network_type = 19;
int32 ip_stack_type = 20;
int32 message_type = 21;
SsoSecureInfo sec_info = 24;
int32 sso_ip_origin = 28;
}

message SsoSecureInfo {
bytes sec_sig = 1;
bytes sec_device_token = 2;
bytes sec_extra = 3;
}

message DeviceInfo {
string bootloader = 1;
string procVersion = 2;
Expand Down
4 changes: 4 additions & 0 deletions wrapper/codec.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
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

2 comments on commit 758c7b8

@XM2510136957
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2023/06/08 17:21:35 [Recovery] 2023/06/08 - 17:21:35 panic recovered:
runtime error: invalid memory address or nil pointer dereference
D:/Program Files/Go/src/runtime/panic.go:260 (0xcfb626)
        panicmem: panic(memoryError)
D:/Program Files/Go/src/runtime/signal_windows.go:257 (0xcfb5f6)
        sigpanic: panicmem()
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/internal/network/transport.go:53 (0x1133601)
        (*Transport).packBody: if wrapper.AllowSignSendMsg() && req.CommandName == "MessageSvc.PbSendMsg" {
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/internal/network/transport.go:127 (0x1133e0e)
        (*Transport).PackPacket: t.packBody(req, w2)
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/builders.go:190 (0x114de2b)
        (*QQClient).buildQRCodeFetchRequestPacket: payload := c.transport.PackPacket(&r)
        (*Engine).handleHTTPRequest: c.Next()
C:/Users/25101/go/pkg/mod/github.com/gin-gonic/gin@v1.9.0/gin.go:576 (0x142a89c)
        (*Engine).ServeHTTP: engine.handleHTTPRequest(c)
D:/Program Files/Go/src/net/http/server.go:2936 (0xfa3ab5)
        serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
D:/Program Files/Go/src/net/http/server.go:1995 (0xf9efd1)
        (*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
D:/Program Files/Go/src/runtime/asm_amd64.s:1598 (0xd17700)
        goexit: BYTE    $0x90   // NOP

@2mf8
Copy link

@2mf8 2mf8 commented on 758c7b8 Jun 9, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2023/06/08 17:21:35 [Recovery] 2023/06/08 - 17:21:35 panic recovered:
runtime error: invalid memory address or nil pointer dereference
D:/Program Files/Go/src/runtime/panic.go:260 (0xcfb626)
        panicmem: panic(memoryError)
D:/Program Files/Go/src/runtime/signal_windows.go:257 (0xcfb5f6)
        sigpanic: panicmem()
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/internal/network/transport.go:53 (0x1133601)
        (*Transport).packBody: if wrapper.AllowSignSendMsg() && req.CommandName == "MessageSvc.PbSendMsg" {
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/internal/network/transport.go:127 (0x1133e0e)
        (*Transport).PackPacket: t.packBody(req, w2)
C:/Users/25101/go/pkg/mod/github.com/!mrs4s/!mirai!go@v0.0.0-20230605125224-758c7b8efa40/client/builders.go:190 (0x114de2b)
        (*QQClient).buildQRCodeFetchRequestPacket: payload := c.transport.PackPacket(&r)
        (*Engine).handleHTTPRequest: c.Next()
C:/Users/25101/go/pkg/mod/github.com/gin-gonic/gin@v1.9.0/gin.go:576 (0x142a89c)
        (*Engine).ServeHTTP: engine.handleHTTPRequest(c)
D:/Program Files/Go/src/net/http/server.go:2936 (0xfa3ab5)
        serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
D:/Program Files/Go/src/net/http/server.go:1995 (0xf9efd1)
        (*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
D:/Program Files/Go/src/runtime/asm_amd64.s:1598 (0xd17700)
        goexit: BYTE    $0x90   // NOP

wrapper.AllowSignSendMsg() 导致的,去掉 wrapper.AllowSignSendMsg() && 可以解决报错

Please sign in to comment.