From 8e191523f6002ee4d46977722b5bc845f0c787be Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sat, 20 Mar 2021 21:21:40 +0800 Subject: [PATCH] feat: qrcode login. --- binary/reader.go | 5 ++ binary/writer.go | 14 +++-- client/builders.go | 122 ++++++++++++++++++++++++++++++++++++- client/client.go | 46 ++++++++++++++ client/decoders.go | 82 +++++++++++++++++++++++++ client/entities.go | 23 +++++++ client/global.go | 12 ++-- protocol/packets/global.go | 19 +++++- protocol/tlv/t1.go | 2 +- protocol/tlv/t100.go | 2 +- protocol/tlv/t104.go | 2 +- protocol/tlv/t106.go | 4 +- protocol/tlv/t107.go | 2 +- protocol/tlv/t108.go | 2 +- protocol/tlv/t109.go | 2 +- protocol/tlv/t10a.go | 2 +- protocol/tlv/t116.go | 2 +- protocol/tlv/t124.go | 2 +- protocol/tlv/t128.go | 2 +- protocol/tlv/t141.go | 6 +- protocol/tlv/t142.go | 2 +- protocol/tlv/t143.go | 2 +- protocol/tlv/t144.go | 2 +- protocol/tlv/t145.go | 2 +- protocol/tlv/t147.go | 2 +- protocol/tlv/t154.go | 2 +- protocol/tlv/t16.go | 8 +-- protocol/tlv/t166.go | 2 +- protocol/tlv/t16a.go | 2 +- protocol/tlv/t16e.go | 2 +- protocol/tlv/t174.go | 2 +- protocol/tlv/t177.go | 4 +- protocol/tlv/t17a.go | 2 +- protocol/tlv/t17c.go | 2 +- protocol/tlv/t18.go | 2 +- protocol/tlv/t187.go | 2 +- protocol/tlv/t188.go | 2 +- protocol/tlv/t191.go | 2 +- protocol/tlv/t193.go | 2 +- protocol/tlv/t194.go | 2 +- protocol/tlv/t197.go | 2 +- protocol/tlv/t198.go | 2 +- protocol/tlv/t1b.go | 2 +- protocol/tlv/t1d.go | 2 +- protocol/tlv/t1f.go | 12 ++-- protocol/tlv/t2.go | 4 +- protocol/tlv/t202.go | 2 +- protocol/tlv/t33.go | 2 +- protocol/tlv/t35.go | 2 +- protocol/tlv/t400.go | 2 +- protocol/tlv/t401.go | 2 +- protocol/tlv/t511.go | 6 +- protocol/tlv/t516.go | 2 +- protocol/tlv/t521.go | 6 +- protocol/tlv/t525.go | 2 +- protocol/tlv/t52d.go | 2 +- protocol/tlv/t536.go | 2 +- protocol/tlv/t8.go | 2 +- 58 files changed, 376 insertions(+), 81 deletions(-) diff --git a/binary/reader.go b/binary/reader.go index e4a55759..c64d1958 100644 --- a/binary/reader.go +++ b/binary/reader.go @@ -62,6 +62,11 @@ func (r *Reader) ReadInt32() int32 { return (int32(b[0]) << 24) | (int32(b[1]) << 16) | (int32(b[2]) << 8) | int32(b[3]) } +func (r *Reader) ReadInt64() int64 { + b := r.ReadBytes(8) + return ((int64(b[0]) << 56) | (int64(b[1]) << 48) | (int64(b[2]) << 40) | (int64(b[3]) << 32) | int64(b[4])<<24) | (int64(b[5]) << 16) | (int64(b[6]) << 8) | int64(b[7]) +} + func (r *Reader) ReadString() string { data := r.ReadBytes(int(r.ReadInt32() - 4)) return string(data) diff --git a/binary/writer.go b/binary/writer.go index c10bae28..33e488d0 100644 --- a/binary/writer.go +++ b/binary/writer.go @@ -3,6 +3,7 @@ package binary import ( "bytes" "encoding/binary" + "encoding/hex" ) type Writer bytes.Buffer @@ -48,6 +49,11 @@ func (w *Writer) Write(b []byte) { (*bytes.Buffer)(w).Write(b) } +func (w *Writer) WriteHex(h string) { + b, _ := hex.DecodeString(h) + w.Write(b) +} + func (w *Writer) WriteByte(b byte) { (*bytes.Buffer)(w).WriteByte(b) } @@ -77,7 +83,7 @@ func (w *Writer) WriteString(v string) { } func (w *Writer) WriteStringShort(v string) { - w.WriteTlv([]byte(v)) + w.WriteBytesShort([]byte(v)) } func (w *Writer) WriteBool(b bool) { @@ -117,17 +123,17 @@ func (w *Writer) WriteUniPacket(commandName string, sessionId, extraData, body [ }) } -func (w *Writer) WriteTlv(data []byte) { +func (w *Writer) WriteBytesShort(data []byte) { w.WriteUInt16(uint16(len(data))) w.Write(data) } func (w *Writer) WriteTlvLimitedSize(data []byte, limit int) { if len(data) <= limit { - w.WriteTlv(data) + w.WriteBytesShort(data) return } - w.WriteTlv(data[:limit]) + w.WriteBytesShort(data[:limit]) } func (w *Writer) Bytes() []byte { diff --git a/client/builders.go b/client/builders.go index 84b236ec..c6aefa3b 100644 --- a/client/builders.go +++ b/client/builders.go @@ -87,7 +87,7 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) { } w.Write(tlv.T177(c.version.BuildTime, c.version.SdkVersion)) w.Write(tlv.T516()) - w.Write(tlv.T521()) + w.Write(tlv.T521(0)) w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) }) sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) @@ -111,6 +111,122 @@ func (c *QQClient) buildDeviceLockLoginPacket() (uint16, []byte) { return seq, packet } +func (c *QQClient) buildQRCodeFetchRequestPacket() (uint16, []byte) { + seq := c.nextSeq() + req := packets.BuildOicqRequestPacket(0, 0x812, crypto.ECDH, c.RandomKey, func(w *binary.Writer) { + w.WriteHex(`0001110000001000000072000000`) // trans header + w.WriteUInt32(uint32(time.Now().Unix())) + w.Write(packets.BuildCode2DRequestPacket(0, 0, 0x31, func(w *binary.Writer) { + w.WriteUInt16(0) // const + w.WriteUInt32(16) // app id + w.WriteUInt64(0) // const + w.WriteByte(8) // const + w.WriteBytesShort(EmptyBytes) + + w.WriteUInt16(6) + w.Write(tlv.T16(c.version.SSOVersion, 16, c.version.AppId, SystemDeviceInfo.Guid, []byte(c.version.ApkId), []byte(c.version.SortVersionName), c.version.ApkSign)) + w.Write(tlv.T1B(0, 0, 3, 4, 72, 2, 2)) + w.Write(tlv.T1D(c.version.MiscBitmap)) + w.Write(tlv.T1F(false, SystemDeviceInfo.OSType, []byte("7.1.2"), []byte("China Mobile GSM"), SystemDeviceInfo.APN, 2)) + w.Write(tlv.T33(SystemDeviceInfo.Guid)) + w.Write(tlv.T35(8)) + })) + }) + sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{}) + return seq, packet +} + +func (c *QQClient) buildQRCodeResultQueryRequestPacket(sig []byte) (uint16, []byte) { + seq := c.nextSeq() + req := packets.BuildOicqRequestPacket(0, 0x812, crypto.ECDH, c.RandomKey, func(w *binary.Writer) { + w.WriteHex(`0000620000001000000072000000`) // trans header + w.WriteUInt32(uint32(time.Now().Unix())) + w.Write(packets.BuildCode2DRequestPacket(1, 0, 0x12, func(w *binary.Writer) { + w.WriteUInt16(5) // const + w.WriteByte(1) // const + w.WriteUInt32(8) // product type + w.WriteUInt32(16) // app id + w.WriteBytesShort(sig) + w.WriteUInt64(0) // const + w.WriteByte(8) // const + w.WriteBytesShort(EmptyBytes) + w.WriteUInt16(0) // const + })) + }) + sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.trans_emp", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + packet := packets.BuildLoginPacket(0, 2, make([]byte, 16), sso, []byte{}) + return seq, packet +} + +func (c *QQClient) buildQRCodeLoginPacket(t106, t16a, t318 []byte) (uint16, []byte) { + seq := c.nextSeq() + req := packets.BuildOicqRequestPacket(c.Uin, 0x0810, crypto.ECDH, c.RandomKey, func(w *binary.Writer) { + w.WriteUInt16(9) + w.WriteUInt16(24) + + w.Write(tlv.T18(16, uint32(c.Uin))) + w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress)) + w.Write(binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt16(0x106) + w.WriteBytesShort(t106) + })) + //w.Write(tlv.T106(uint32(c.Uin), 0, c.version.AppId, c.version.SSOVersion, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey, 0)) + w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) + w.Write(tlv.T100(c.version.SSOVersion, c.version.AppId, c.version.MainSigMap)) + w.Write(tlv.T107(0)) + w.Write(tlv.T142(c.version.ApkId)) + w.Write(tlv.T144( + []byte(SystemDeviceInfo.IMEI), + SystemDeviceInfo.GenDeviceInfoData(), + SystemDeviceInfo.OSType, + SystemDeviceInfo.Version.Release, + SystemDeviceInfo.SimInfo, + SystemDeviceInfo.APN, + false, true, false, tlv.GuidFlag(), + SystemDeviceInfo.Model, + SystemDeviceInfo.Guid, + SystemDeviceInfo.Brand, + SystemDeviceInfo.TgtgtKey, + )) + + w.Write(tlv.T145(SystemDeviceInfo.Guid)) + w.Write(tlv.T147(16, []byte(c.version.SortVersionName), c.version.ApkSign)) + w.Write(binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt16(0x16A) + w.WriteBytesShort(t16a) + })) + w.Write(tlv.T154(seq)) + w.Write(tlv.T141(SystemDeviceInfo.SimInfo, SystemDeviceInfo.APN)) + w.Write(tlv.T8(2052)) + w.Write(tlv.T511([]string{ + "tenpay.com", "openmobile.qq.com", "docs.qq.com", "connect.qq.com", + "qzone.qq.com", "vip.qq.com", "gamecenter.qq.com", "qun.qq.com", "game.qq.com", + "qqweb.qq.com", "office.qq.com", "ti.qq.com", "mail.qq.com", "mma.qq.com", + })) + w.Write(tlv.T187(SystemDeviceInfo.MacAddress)) + w.Write(tlv.T188(SystemDeviceInfo.AndroidId)) + if len(SystemDeviceInfo.IMSIMd5) != 0 { + w.Write(tlv.T194(SystemDeviceInfo.IMSIMd5)) + } + w.Write(tlv.T191(0x00)) + if len(SystemDeviceInfo.WifiBSSID) != 0 && len(SystemDeviceInfo.WifiSSID) != 0 { + w.Write(tlv.T202(SystemDeviceInfo.WifiBSSID, SystemDeviceInfo.WifiSSID)) + } + w.Write(tlv.T177(c.version.BuildTime, c.version.SdkVersion)) + w.Write(tlv.T516()) + w.Write(tlv.T521(8)) + //w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) + w.Write(binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt16(0x318) + w.WriteBytesShort(t318) + })) + }) + sso := packets.BuildSsoPacket(seq, c.version.AppId, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) + packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) + return seq, packet +} + func (c *QQClient) buildCaptchaPacket(result string, sign []byte) (uint16, []byte) { seq := c.nextSeq() req := packets.BuildOicqRequestPacket(c.Uin, 0x810, crypto.ECDH, c.RandomKey, func(w *binary.Writer) { @@ -190,7 +306,7 @@ func (c *QQClient) buildRequestTgtgtNopicsigPacket() (uint16, []byte) { w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress)) w.Write(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x106) - w.WriteTlv(c.sigInfo.encryptedA1) + w.WriteBytesShort(c.sigInfo.encryptedA1) })) w.Write(tlv.T116(c.version.MiscBitmap, c.version.SubSigmap)) w.Write(tlv.T100(c.version.SSOVersion, 2, c.version.MainSigMap)) @@ -227,7 +343,7 @@ func (c *QQClient) buildRequestTgtgtNopicsigPacket() (uint16, []byte) { w.Write(tlv.T194(SystemDeviceInfo.IMSIMd5)) w.Write(tlv.T202(SystemDeviceInfo.WifiBSSID, SystemDeviceInfo.WifiSSID)) w.Write(tlv.T516()) - w.Write(tlv.T521()) + w.Write(tlv.T521(0)) w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) }) diff --git a/client/client.go b/client/client.go index 4a8fbed8..9c0eb18e 100644 --- a/client/client.go +++ b/client/client.go @@ -130,6 +130,7 @@ type handlerInfo struct { var decoders = map[string]func(*QQClient, *incomingPacketInfo, []byte) (interface{}, error){ "wtlogin.login": decodeLoginResponse, "wtlogin.exchange_emp": decodeExchangeEmpResponse, + "wtlogin.trans_emp": decodeTransEmpResponse, "StatSvc.register": decodeClientRegisterResponse, "StatSvc.ReqMSFOffline": decodeMSFOfflinePacket, "MessageSvc.PushNotify": decodeSvcNotify, @@ -163,6 +164,10 @@ func NewClient(uin int64, password string) *QQClient { return NewClientMd5(uin, md5.Sum([]byte(password))) } +func NewClientEmpty() *QQClient { + return NewClient(0, "") +} + func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient { crypto.ECDH.FetchPubKey(uin) cli := &QQClient{ @@ -258,6 +263,47 @@ func (c *QQClient) Login() (*LoginResponse, error) { return &l, nil } +func (c *QQClient) FetchQRCode() (*QRCodeLoginResponse, error) { + if SystemDeviceInfo.Protocol != AndroidWatch { + return nil, errors.New("only android watch protocol can login by QRCode") + } + if c.Online { + return nil, ErrAlreadyOnline + } + if c.Conn == nil { + err := c.connect() + if err != nil { + return nil, err + } + go c.netLoop() + } + i, err := c.sendAndWait(c.buildQRCodeFetchRequestPacket()) + if err != nil { + return nil, errors.Wrap(err, "fetch qrcode error") + } + return i.(*QRCodeLoginResponse), nil +} + +func (c *QQClient) QueryQRCodeStatus(sig []byte) (*QRCodeLoginResponse, error) { + i, err := c.sendAndWait(c.buildQRCodeResultQueryRequestPacket(sig)) + if err != nil { + return nil, errors.Wrap(err, "query result error") + } + return i.(*QRCodeLoginResponse), nil +} + +func (c *QQClient) QRCodeLogin(info *QRCodeLoginInfo) (*LoginResponse, error) { + i, err := c.sendAndWait(c.buildQRCodeLoginPacket(info.tmpPwd, info.tmpNoPicSig, info.tgtQR)) + if err != nil { + return nil, errors.Wrap(err, "qrcode login error") + } + rsp := i.(LoginResponse) + if rsp.Success { + c.init() + } + return &rsp, nil +} + // SubmitCaptcha send captcha to server func (c *QQClient) SubmitCaptcha(result string, sign []byte) (*LoginResponse, error) { seq, packet := c.buildCaptchaPacket(result, sign) diff --git a/client/decoders.go b/client/decoders.go index b86c4e92..c4ec61ca 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -213,6 +213,88 @@ func decodeExchangeEmpResponse(c *QQClient, _ *incomingPacketInfo, payload []byt return nil, nil } +// wtlogin.trans_emp +func decodeTransEmpResponse(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { + if SystemDeviceInfo.Protocol != AndroidWatch { // safe + return nil, nil + } + if len(payload) < 48 { + return nil, errors.New("missing payload length") + } + reader := binary.NewReader(payload) + reader.ReadBytes(5) // trans req head + reader.ReadByte() + reader.ReadUInt16() + cmd := reader.ReadUInt16() + reader.ReadBytes(21) + reader.ReadByte() + reader.ReadUInt16() + reader.ReadUInt16() + reader.ReadInt32() + reader.ReadInt64() + body := binary.NewReader(reader.ReadBytes(reader.Len() - 1)) + if cmd == 0x31 { + body.ReadUInt16() + body.ReadInt32() + code := body.ReadByte() + if code != 0 { + return nil, errors.Errorf("wtlogin.trans_emp sub cmd 0x31 error: %v", code) + } + sig := body.ReadBytesShort() + body.ReadUInt16() + m := body.ReadTlvMap(2) + if m.Exists(0x17) { + return &QRCodeLoginResponse{ + State: QRCodeImageFetch, + ImageData: m[0x17], + Sig: sig, + }, nil + } + return nil, errors.Errorf("wtlogin.trans_emp sub cmd 0x31 error: image not found") + } + if cmd == 0x12 { + aVarLen := body.ReadUInt16() + if aVarLen != 0 { + aVarLen-- // 阴间的位移操作 + if body.ReadByte() == 2 { + body.ReadInt64() // uin ? + aVarLen -= 8 + } + } + if aVarLen > 0 { + body.ReadBytes(int(aVarLen)) + } + body.ReadInt32() // app id? + code := body.ReadByte() + if code != 0 { + if code == 0x30 { + return &QRCodeLoginResponse{State: QRCodeWaitingForScan}, nil + } + if code == 0x35 { + return &QRCodeLoginResponse{State: QRCodeWaitingForConfirm}, nil + } + if code == 0x11 { + return &QRCodeLoginResponse{State: QRCodeTimeout}, nil + } + return nil, errors.Errorf("wtlogin.trans_emp sub cmd 0x12 error: %v", code) + } + c.Uin = body.ReadInt64() + body.ReadInt32() // sig create time + body.ReadUInt16() + m := body.ReadTlvMap(2) + if !m.Exists(0x18) || !m.Exists(0x1e) || !m.Exists(0x19) { + return nil, errors.New("wtlogin.trans_emp sub cmd 0x12 error: tlv error") + } + SystemDeviceInfo.TgtgtKey = m[0x1e] + return &QRCodeLoginResponse{State: QRCodeConfirmed, LoginInfo: &QRCodeLoginInfo{ + tmpPwd: m[0x18], + tmpNoPicSig: m[0x19], + tgtQR: m[0x65], + }}, nil + } + return nil, errors.Errorf("unknown trans_emp response: %v", cmd) +} + // ConfigPushSvc.PushReq func decodePushReqPacket(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { request := &jce.RequestPacket{} diff --git a/client/entities.go b/client/entities.go index 5d0e1abd..ef2a7126 100644 --- a/client/entities.go +++ b/client/entities.go @@ -15,6 +15,8 @@ var ( type ( LoginError int + QRCodeLoginState int + MemberPermission int ClientProtocol int @@ -37,6 +39,21 @@ type ( ErrorMessage string } + QRCodeLoginResponse struct { + State QRCodeLoginState + + ImageData []byte + Sig []byte + + LoginInfo *QRCodeLoginInfo + } + + QRCodeLoginInfo struct { + tmpPwd []byte + tmpNoPicSig []byte + tgtQR []byte + } + FriendInfo struct { Uin int64 Nickname string @@ -271,6 +288,12 @@ const ( SliderNeededError LoginError = 8 UnknownLoginError LoginError = -1 + QRCodeImageFetch QRCodeLoginState = 1 + QRCodeWaitingForScan QRCodeLoginState = 2 + QRCodeWaitingForConfirm QRCodeLoginState = 3 + QRCodeTimeout QRCodeLoginState = 4 + QRCodeConfirmed QRCodeLoginState = 5 + Owner MemberPermission = iota Administrator Member diff --git a/client/global.go b/client/global.go index 3f90d1bb..abe03a26 100644 --- a/client/global.go +++ b/client/global.go @@ -203,14 +203,14 @@ func genVersionInfo(p ClientProtocol) *versionInfo { } case AndroidWatch: return &versionInfo{ - ApkId: "com.tencent.mobileqq", - AppId: 537061176, - SortVersionName: "8.2.7", - BuildTime: 1571193922, + ApkId: "com.tencent.qqlite", + AppId: 537064446, + SortVersionName: "2.0.5", + BuildTime: 1559564731, ApkSign: []byte{0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D}, - SdkVersion: "6.0.0.2413", + SdkVersion: "6.0.0.236", SSOVersion: 5, - MiscBitmap: 184024956, + MiscBitmap: 16252796, SubSigmap: 0x10400, MainSigMap: 34869472, } diff --git a/protocol/packets/global.go b/protocol/packets/global.go index 46d11784..3793cc4a 100644 --- a/protocol/packets/global.go +++ b/protocol/packets/global.go @@ -55,6 +55,23 @@ func BuildOicqRequestPacket(uin int64, commandId uint16, encrypt IEncryptMethod, return p.Bytes() } +func BuildCode2DRequestPacket(seq uint32, j uint64, cmd uint16, bodyFunc func(writer *binary.Writer)) []byte { + return binary.NewWriterF(func(w *binary.Writer) { + body := binary.NewWriterF(bodyFunc) + w.WriteByte(2) + w.WriteUInt16(uint16(43 + len(body) + 1)) + w.WriteUInt16(cmd) + w.Write(make([]byte, 21)) + w.WriteByte(3) + w.WriteUInt16(0) + w.WriteUInt16(50) // version + w.WriteUInt32(seq) + w.WriteUInt64(j) + w.Write(body) + w.WriteByte(3) + }) +} + func BuildSsoPacket(seq uint16, appId uint32, commandName, imei string, extData, outPacketSessionId, body, ksid []byte) []byte { p := binary.NewWriter() p.WriteIntLvPacket(4, func(writer *binary.Writer) { @@ -95,7 +112,7 @@ func ParseIncomingPacket(payload, d2key []byte) (*IncomingPacket, error) { flag1 := reader.ReadInt32() flag2 := reader.ReadByte() if reader.ReadByte() != 0 { // flag3 - return nil, errors.WithStack(ErrUnknownFlag) + //return nil, errors.WithStack(ErrUnknownFlag) } reader.ReadString() // uin string decrypted := func() (data []byte) { diff --git a/protocol/tlv/t1.go b/protocol/tlv/t1.go index ef50a85e..1b5ce6b0 100644 --- a/protocol/tlv/t1.go +++ b/protocol/tlv/t1.go @@ -13,7 +13,7 @@ func T1(uin uint32, ip []byte) []byte { } return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x01) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) w.WriteUInt32(rand.Uint32()) w.WriteUInt32(uin) diff --git a/protocol/tlv/t100.go b/protocol/tlv/t100.go index 4e9b0cb0..68b67f06 100644 --- a/protocol/tlv/t100.go +++ b/protocol/tlv/t100.go @@ -7,7 +7,7 @@ import ( func T100(ssoVersion, protocol, mainSigMap uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x100) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) w.WriteUInt32(ssoVersion) w.WriteUInt32(16) diff --git a/protocol/tlv/t104.go b/protocol/tlv/t104.go index b912b368..8084a895 100644 --- a/protocol/tlv/t104.go +++ b/protocol/tlv/t104.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T104(data []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x104) - w.WriteTlv(data) + w.WriteBytesShort(data) }) } diff --git a/protocol/tlv/t106.go b/protocol/tlv/t106.go index ee66bd7a..ccd837a4 100644 --- a/protocol/tlv/t106.go +++ b/protocol/tlv/t106.go @@ -40,10 +40,10 @@ func T106(uin, salt, appId, ssoVer uint32, passwordMd5 [16]byte, guidAvailable b } w.WriteUInt32(appId) w.WriteUInt32(1) // password login - w.WriteTlv([]byte(strconv.FormatInt(int64(uin), 10))) + w.WriteBytesShort([]byte(strconv.FormatInt(int64(uin), 10))) w.WriteUInt16(0) }) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { b := make([]byte, 4) if salt != 0 { binary2.BigEndian.PutUint32(b, salt) diff --git a/protocol/tlv/t107.go b/protocol/tlv/t107.go index 1a94367c..5650b9f0 100644 --- a/protocol/tlv/t107.go +++ b/protocol/tlv/t107.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T107(picType uint16) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x107) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(picType) w.WriteByte(0x00) w.WriteUInt16(0) diff --git a/protocol/tlv/t108.go b/protocol/tlv/t108.go index 8fb83f83..67993ea6 100644 --- a/protocol/tlv/t108.go +++ b/protocol/tlv/t108.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T108(imei string) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x108) - w.WriteTlv([]byte(imei)) + w.WriteBytesShort([]byte(imei)) }) } diff --git a/protocol/tlv/t109.go b/protocol/tlv/t109.go index aa9f4900..ff711851 100644 --- a/protocol/tlv/t109.go +++ b/protocol/tlv/t109.go @@ -9,7 +9,7 @@ import ( func T109(androidId []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x109) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { h := md5.Sum(androidId) w.Write(h[:]) })) diff --git a/protocol/tlv/t10a.go b/protocol/tlv/t10a.go index 482adb01..0a816183 100644 --- a/protocol/tlv/t10a.go +++ b/protocol/tlv/t10a.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T10A(arr []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x10A) - w.WriteTlv(arr) + w.WriteBytesShort(arr) }) } diff --git a/protocol/tlv/t116.go b/protocol/tlv/t116.go index 0eabbcb1..7e4629f7 100644 --- a/protocol/tlv/t116.go +++ b/protocol/tlv/t116.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T116(miscBitmap, subSigMap uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x116) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(0x00) w.WriteUInt32(miscBitmap) w.WriteUInt32(subSigMap) diff --git a/protocol/tlv/t124.go b/protocol/tlv/t124.go index 322bdc96..7bf5479c 100644 --- a/protocol/tlv/t124.go +++ b/protocol/tlv/t124.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T124(osType, osVersion, simInfo, apn []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x124) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteTlvLimitedSize(osType, 16) w.WriteTlvLimitedSize(osVersion, 16) w.WriteUInt16(2) // Network type wifi diff --git a/protocol/tlv/t128.go b/protocol/tlv/t128.go index 8352ff61..02812303 100644 --- a/protocol/tlv/t128.go +++ b/protocol/tlv/t128.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T128(isGuidFromFileNull, isGuidAvailable, isGuidChanged bool, guidFlag uint32, buildModel, guid, buildBrand []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x128) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0) w.WriteBool(isGuidFromFileNull) w.WriteBool(isGuidAvailable) diff --git a/protocol/tlv/t141.go b/protocol/tlv/t141.go index 579af241..677d0add 100644 --- a/protocol/tlv/t141.go +++ b/protocol/tlv/t141.go @@ -5,11 +5,11 @@ import "github.com/Mrs4s/MiraiGo/binary" func T141(simInfo, apn []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x141) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) - w.WriteTlv(simInfo) + w.WriteBytesShort(simInfo) w.WriteUInt16(2) // network type wifi - w.WriteTlv(apn) + w.WriteBytesShort(apn) })) }) } diff --git a/protocol/tlv/t142.go b/protocol/tlv/t142.go index 06d2060f..a95f273d 100644 --- a/protocol/tlv/t142.go +++ b/protocol/tlv/t142.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T142(apkId string) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x142) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0) w.WriteTlvLimitedSize([]byte(apkId), 32) })) diff --git a/protocol/tlv/t143.go b/protocol/tlv/t143.go index 8ce9b624..2e799b21 100644 --- a/protocol/tlv/t143.go +++ b/protocol/tlv/t143.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T143(arr []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x143) - w.WriteTlv(arr) + w.WriteBytesShort(arr) }) } diff --git a/protocol/tlv/t144.go b/protocol/tlv/t144.go index a7c86c21..32042402 100644 --- a/protocol/tlv/t144.go +++ b/protocol/tlv/t144.go @@ -12,7 +12,7 @@ func T144( ) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x144) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.EncryptAndWrite(tgtgtKey, binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(5) w.Write(T109(imei)) diff --git a/protocol/tlv/t145.go b/protocol/tlv/t145.go index 6a1cebbb..fd1c0f0b 100644 --- a/protocol/tlv/t145.go +++ b/protocol/tlv/t145.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T145(guid []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x145) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write(guid) })) }) diff --git a/protocol/tlv/t147.go b/protocol/tlv/t147.go index 4f7795f4..f567a4dd 100644 --- a/protocol/tlv/t147.go +++ b/protocol/tlv/t147.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T147(appId uint32, apkVersionName, apkSignatureMd5 []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x147) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(appId) w.WriteTlvLimitedSize(apkVersionName, 32) w.WriteTlvLimitedSize(apkSignatureMd5, 32) diff --git a/protocol/tlv/t154.go b/protocol/tlv/t154.go index 2d7a56f7..b0612c32 100644 --- a/protocol/tlv/t154.go +++ b/protocol/tlv/t154.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T154(seq uint16) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x154) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(uint32(seq)) })) }) diff --git a/protocol/tlv/t16.go b/protocol/tlv/t16.go index 733d1c03..c8d94fbb 100644 --- a/protocol/tlv/t16.go +++ b/protocol/tlv/t16.go @@ -5,14 +5,14 @@ import "github.com/Mrs4s/MiraiGo/binary" func T16(ssoVersion, appId, subAppId uint32, guid, apkId, apkVersionName, apkSign []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x16) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(ssoVersion) w.WriteUInt32(appId) w.WriteUInt32(subAppId) w.Write(guid) - w.WriteTlv(apkId) - w.WriteTlv(apkVersionName) - w.WriteTlv(apkSign) + w.WriteBytesShort(apkId) + w.WriteBytesShort(apkVersionName) + w.WriteBytesShort(apkSign) })) }) } diff --git a/protocol/tlv/t166.go b/protocol/tlv/t166.go index 708eadde..e64b1ddb 100644 --- a/protocol/tlv/t166.go +++ b/protocol/tlv/t166.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T166(imageType byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x166) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(imageType) })) }) diff --git a/protocol/tlv/t16a.go b/protocol/tlv/t16a.go index 27a23690..0efcb2fc 100644 --- a/protocol/tlv/t16a.go +++ b/protocol/tlv/t16a.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T16A(arr []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x16A) - w.WriteTlv(arr) + w.WriteBytesShort(arr) }) } diff --git a/protocol/tlv/t16e.go b/protocol/tlv/t16e.go index c15602ab..4b13175e 100644 --- a/protocol/tlv/t16e.go +++ b/protocol/tlv/t16e.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T16E(buildModel []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x16e) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write(buildModel) })) }) diff --git a/protocol/tlv/t174.go b/protocol/tlv/t174.go index 67e88a21..e5de99fd 100644 --- a/protocol/tlv/t174.go +++ b/protocol/tlv/t174.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T174(data []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x174) - w.WriteTlv(data) + w.WriteBytesShort(data) }) } diff --git a/protocol/tlv/t177.go b/protocol/tlv/t177.go index d7e8e701..45be3ca1 100644 --- a/protocol/tlv/t177.go +++ b/protocol/tlv/t177.go @@ -5,10 +5,10 @@ import "github.com/Mrs4s/MiraiGo/binary" func T177(buildTime uint32, sdkVersion string) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x177) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(0x01) w.WriteUInt32(buildTime) - w.WriteTlv([]byte(sdkVersion)) + w.WriteBytesShort([]byte(sdkVersion)) })) }) } diff --git a/protocol/tlv/t17a.go b/protocol/tlv/t17a.go index e881fd02..eb3691f0 100644 --- a/protocol/tlv/t17a.go +++ b/protocol/tlv/t17a.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T17A(value int32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x17a) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(uint32(value)) })) }) diff --git a/protocol/tlv/t17c.go b/protocol/tlv/t17c.go index eeec297f..358c11cc 100644 --- a/protocol/tlv/t17c.go +++ b/protocol/tlv/t17c.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T17C(code string) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x17c) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteStringShort(code) })) }) diff --git a/protocol/tlv/t18.go b/protocol/tlv/t18.go index 4e6b5c65..e5b6a7cc 100644 --- a/protocol/tlv/t18.go +++ b/protocol/tlv/t18.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T18(appId uint32, uin uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x18) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) w.WriteUInt32(1536) w.WriteUInt32(appId) diff --git a/protocol/tlv/t187.go b/protocol/tlv/t187.go index 654b0378..500f619e 100644 --- a/protocol/tlv/t187.go +++ b/protocol/tlv/t187.go @@ -9,7 +9,7 @@ import ( func T187(macAddress []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x187) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { h := md5.Sum(macAddress) w.Write(h[:]) })) diff --git a/protocol/tlv/t188.go b/protocol/tlv/t188.go index e7f8570c..9731ca4e 100644 --- a/protocol/tlv/t188.go +++ b/protocol/tlv/t188.go @@ -9,7 +9,7 @@ import ( func T188(androidId []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x188) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { h := md5.Sum(androidId) w.Write(h[:]) })) diff --git a/protocol/tlv/t191.go b/protocol/tlv/t191.go index f8c58594..2b57e79b 100644 --- a/protocol/tlv/t191.go +++ b/protocol/tlv/t191.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T191(k byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x191) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(k) })) }) diff --git a/protocol/tlv/t193.go b/protocol/tlv/t193.go index 13ff5d5c..e8192885 100644 --- a/protocol/tlv/t193.go +++ b/protocol/tlv/t193.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T193(ticket string) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x193) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write([]byte(ticket)) })) }) diff --git a/protocol/tlv/t194.go b/protocol/tlv/t194.go index 3eec0367..3fb4f333 100644 --- a/protocol/tlv/t194.go +++ b/protocol/tlv/t194.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T194(imsiMd5 []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x194) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write(imsiMd5) })) }) diff --git a/protocol/tlv/t197.go b/protocol/tlv/t197.go index 2babb615..6af17954 100644 --- a/protocol/tlv/t197.go +++ b/protocol/tlv/t197.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T197() []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x197) - w.WriteTlv([]byte{0}) + w.WriteBytesShort([]byte{0}) }) } diff --git a/protocol/tlv/t198.go b/protocol/tlv/t198.go index 0e36f681..3317be6d 100644 --- a/protocol/tlv/t198.go +++ b/protocol/tlv/t198.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T198() []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x198) - w.WriteTlv([]byte{0}) + w.WriteBytesShort([]byte{0}) }) } diff --git a/protocol/tlv/t1b.go b/protocol/tlv/t1b.go index 1c43a8de..fad8c159 100644 --- a/protocol/tlv/t1b.go +++ b/protocol/tlv/t1b.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T1B(micro, version, size, margin, dpi, ecLevel, hint uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x1B) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(micro) w.WriteUInt32(version) w.WriteUInt32(size) diff --git a/protocol/tlv/t1d.go b/protocol/tlv/t1d.go index 55577a35..58996978 100644 --- a/protocol/tlv/t1d.go +++ b/protocol/tlv/t1d.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T1D(miscBitmap uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x1D) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(1) w.WriteUInt32(miscBitmap) w.WriteUInt32(0) diff --git a/protocol/tlv/t1f.go b/protocol/tlv/t1f.go index 279c41d0..2d7b8365 100644 --- a/protocol/tlv/t1f.go +++ b/protocol/tlv/t1f.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T1F(isRoot bool, osName, osVersion, simOperatorName, apn []byte, networkType uint16) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x1F) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteByte(func() byte { if isRoot { return 1 @@ -13,12 +13,12 @@ func T1F(isRoot bool, osName, osVersion, simOperatorName, apn []byte, networkTyp return 0 } }()) - w.WriteTlv(osName) - w.WriteTlv(osVersion) + w.WriteBytesShort(osName) + w.WriteBytesShort(osVersion) w.WriteUInt16(networkType) - w.WriteTlv(simOperatorName) - w.WriteTlv([]byte{}) - w.WriteTlv(apn) + w.WriteBytesShort(simOperatorName) + w.WriteBytesShort([]byte{}) + w.WriteBytesShort(apn) })) }) } diff --git a/protocol/tlv/t2.go b/protocol/tlv/t2.go index b4705f7c..2f0656c4 100644 --- a/protocol/tlv/t2.go +++ b/protocol/tlv/t2.go @@ -5,10 +5,10 @@ import "github.com/Mrs4s/MiraiGo/binary" func T2(result string, sign []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x02) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0) w.WriteStringShort(result) - w.WriteTlv(sign) + w.WriteBytesShort(sign) })) }) } diff --git a/protocol/tlv/t202.go b/protocol/tlv/t202.go index aa806283..e694547c 100644 --- a/protocol/tlv/t202.go +++ b/protocol/tlv/t202.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T202(wifiBSSID, wifiSSID []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x202) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteTlvLimitedSize(wifiBSSID, 16) w.WriteTlvLimitedSize(wifiSSID, 32) })) diff --git a/protocol/tlv/t33.go b/protocol/tlv/t33.go index d208d30e..92496efe 100644 --- a/protocol/tlv/t33.go +++ b/protocol/tlv/t33.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T33(guid []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x33) - w.WriteTlv(guid) + w.WriteBytesShort(guid) }) } diff --git a/protocol/tlv/t35.go b/protocol/tlv/t35.go index 48a9c62d..4fc00851 100644 --- a/protocol/tlv/t35.go +++ b/protocol/tlv/t35.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T35(productType uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x35) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(productType) })) }) diff --git a/protocol/tlv/t400.go b/protocol/tlv/t400.go index 84784959..9a22344e 100644 --- a/protocol/tlv/t400.go +++ b/protocol/tlv/t400.go @@ -9,7 +9,7 @@ import ( func T400(g []byte, uin int64, guid, dpwd []byte, j2, j3 int64, randSeed []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x400) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.EncryptAndWrite(g, binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) // version w.WriteUInt64(uint64(uin)) diff --git a/protocol/tlv/t401.go b/protocol/tlv/t401.go index 27ad8eb0..7ae2a89e 100644 --- a/protocol/tlv/t401.go +++ b/protocol/tlv/t401.go @@ -5,6 +5,6 @@ import "github.com/Mrs4s/MiraiGo/binary" func T401(d []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x401) - w.WriteTlv(d) + w.WriteBytesShort(d) }) } diff --git a/protocol/tlv/t511.go b/protocol/tlv/t511.go index 0cc07a9d..72af0999 100644 --- a/protocol/tlv/t511.go +++ b/protocol/tlv/t511.go @@ -16,14 +16,14 @@ func T511(domains []string) []byte { } return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x511) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(uint16(len(arr2))) for _, d := range arr2 { indexOf := strings.Index(d, "(") indexOf2 := strings.Index(d, ")") if indexOf != 0 || indexOf2 <= 0 { w.WriteByte(0x01) - w.WriteTlv([]byte(d)) + w.WriteBytesShort([]byte(d)) } else { var b byte var z bool @@ -44,7 +44,7 @@ func T511(domains []string) []byte { b |= 2 } w.WriteByte(b) - w.WriteTlv([]byte(d[indexOf2+1:])) + w.WriteBytesShort([]byte(d[indexOf2+1:])) } } } diff --git a/protocol/tlv/t516.go b/protocol/tlv/t516.go index d4354378..6a64c95e 100644 --- a/protocol/tlv/t516.go +++ b/protocol/tlv/t516.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T516() []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x516) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt32(0) })) }) diff --git a/protocol/tlv/t521.go b/protocol/tlv/t521.go index 2134f87e..11ead58e 100644 --- a/protocol/tlv/t521.go +++ b/protocol/tlv/t521.go @@ -2,11 +2,11 @@ package tlv import "github.com/Mrs4s/MiraiGo/binary" -func T521() []byte { +func T521(i uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x521) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { - w.WriteUInt32(0) + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt32(i) w.WriteUInt16(0) })) }) diff --git a/protocol/tlv/t525.go b/protocol/tlv/t525.go index 6390d92c..fe89877a 100644 --- a/protocol/tlv/t525.go +++ b/protocol/tlv/t525.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T525(t536 []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x525) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(1) w.Write(t536) })) diff --git a/protocol/tlv/t52d.go b/protocol/tlv/t52d.go index f676fffa..a98f7994 100644 --- a/protocol/tlv/t52d.go +++ b/protocol/tlv/t52d.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T52D(devInfo []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x52d) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write(devInfo) })) }) diff --git a/protocol/tlv/t536.go b/protocol/tlv/t536.go index 342370d6..9e23059e 100644 --- a/protocol/tlv/t536.go +++ b/protocol/tlv/t536.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T536(loginExtraData []byte) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x536) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.Write(loginExtraData) })) }) diff --git a/protocol/tlv/t8.go b/protocol/tlv/t8.go index b511b715..8a7ba34a 100644 --- a/protocol/tlv/t8.go +++ b/protocol/tlv/t8.go @@ -5,7 +5,7 @@ import "github.com/Mrs4s/MiraiGo/binary" func T8(localId uint32) []byte { return binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0x8) - w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { + w.WriteBytesShort(binary.NewWriterF(func(w *binary.Writer) { w.WriteUInt16(0) w.WriteUInt32(localId) w.WriteUInt16(0)