From 7c54342c9f99b1d2ac5156a982aa512b93536f04 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sun, 5 Mar 2023 17:58:28 +0800 Subject: [PATCH] feat: tlv544 --- client/builders.go | 15 +++++++++++++++ internal/tlv/t544.go | 23 +++++++++++++++++++++++ warpper/codec.go | 3 +++ 3 files changed, 41 insertions(+) create mode 100644 internal/tlv/t544.go create mode 100644 warpper/codec.go diff --git a/client/builders.go b/client/builders.go index addb57b6..d1609e0f 100644 --- a/client/builders.go +++ b/client/builders.go @@ -18,6 +18,7 @@ import ( "github.com/Mrs4s/MiraiGo/client/pb/structmsg" "github.com/Mrs4s/MiraiGo/internal/proto" "github.com/Mrs4s/MiraiGo/internal/tlv" + "github.com/Mrs4s/MiraiGo/warpper" ) var ( @@ -101,6 +102,17 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) { tlv.T521(0), tlv.T525(tlv.T536([]byte{0x01, 0x00})), ) + if warpper.DandelionEnergy != nil { + salt := binary.NewWriterF(func(w *binary.Writer) { + // util.int64_to_buf(bArr42, 0, (int) uin2); + // util.int16_to_buf(bArr42, 4, u.guid.length); // 故意的还是不小心的 + w.Write(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt64(uint64(c.Uin)) })[:4]) + w.WriteBytesShort(c.Device().Guid) + w.WriteBytesShort([]byte(c.version().SdkVersion)) + w.WriteUInt32(9) // sub command + }) + t.Append(tlv.T544Custom("810_9", salt, warpper.DandelionEnergy)) + } req := c.buildOicqRequestPacket(c.Uin, 0x0810, t) r := network.Request{ Type: network.RequestTypeLogin, @@ -372,6 +384,9 @@ func (c *QQClient) buildTicketSubmitPacket(ticket string) (uint16, []byte) { if c.sig.T547 != nil { t.Append(tlv.T(0x547, c.sig.T547)) } + if warpper.DandelionEnergy != nil { + t.Append(tlv.T544(uint64(c.Uin), "810_2", 2, c.version().SdkVersion, c.Device().Guid, warpper.DandelionEnergy)) + } req := c.buildOicqRequestPacket(c.Uin, 0x0810, t) r := network.Request{ Type: network.RequestTypeLogin, diff --git a/internal/tlv/t544.go b/internal/tlv/t544.go new file mode 100644 index 00000000..f1415a1f --- /dev/null +++ b/internal/tlv/t544.go @@ -0,0 +1,23 @@ +package tlv + +import "github.com/Mrs4s/MiraiGo/binary" + +func T544(userId uint64, moduleId string, subCmd uint32, sdkVersion string, guid []byte, signer func(string, []byte) []byte) []byte { + return binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt16(0x544) + salt := binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt64(userId) + w.WriteBytesShort(guid) + w.WriteBytesShort([]byte(sdkVersion)) + w.WriteUInt32(subCmd) + }) + w.WriteBytesShort(signer(moduleId, salt)) // temporary solution + }) +} + +func T544Custom(moduleId string, salt []byte, signer func(string, []byte) []byte) []byte { + return binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt16(0x544) + w.WriteBytesShort(signer(moduleId, salt)) + }) +} diff --git a/warpper/codec.go b/warpper/codec.go new file mode 100644 index 00000000..45741140 --- /dev/null +++ b/warpper/codec.go @@ -0,0 +1,3 @@ +package warpper + +var DandelionEnergy func(string, []byte) []byte