mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-03 18:47:41 +08:00
implement t512
This commit is contained in:
parent
be0e431f8f
commit
f167e00ded
@ -34,9 +34,11 @@ func (r *Reader) ReadByte() byte {
|
||||
|
||||
func (r *Reader) ReadBytes(len int) []byte {
|
||||
b := make([]byte, len)
|
||||
_, err := r.buf.Read(b)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
if len > 0 {
|
||||
_, err := r.buf.Read(b)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
@ -5,14 +5,6 @@ import (
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/longmsg"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/multimsg"
|
||||
"github.com/Mrs4s/MiraiGo/message"
|
||||
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
||||
"github.com/Mrs4s/MiraiGo/utils"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"io"
|
||||
"log"
|
||||
"math"
|
||||
@ -21,6 +13,15 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/longmsg"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/multimsg"
|
||||
"github.com/Mrs4s/MiraiGo/message"
|
||||
"github.com/Mrs4s/MiraiGo/protocol/packets"
|
||||
"github.com/Mrs4s/MiraiGo/utils"
|
||||
"github.com/golang/protobuf/proto"
|
||||
)
|
||||
|
||||
type QQClient struct {
|
||||
@ -84,6 +85,9 @@ type loginSigInfo struct {
|
||||
d2Key []byte
|
||||
wtSessionTicketKey []byte
|
||||
deviceToken []byte
|
||||
|
||||
psKeyMap map[string][]byte
|
||||
pt4TokenMap map[string][]byte
|
||||
}
|
||||
|
||||
func init() {
|
||||
@ -656,6 +660,28 @@ func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *QQClient) getCookies() string {
|
||||
return fmt.Sprintf("uin=o%d; skey=%s;", c.Uin, c.sigInfo.sKey)
|
||||
}
|
||||
|
||||
func (c *QQClient) getCookiesWithDomain(domain string) string {
|
||||
cookie := c.getCookies()
|
||||
|
||||
if psKey, ok := c.sigInfo.psKeyMap[domain]; ok {
|
||||
return fmt.Sprintf("%s p_uin=o%d; p_skey=%s;", cookie, c.Uin, psKey)
|
||||
} else {
|
||||
return cookie
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) getCSRFToken() int {
|
||||
accu := 5381
|
||||
for _, b := range c.sigInfo.sKey {
|
||||
accu = accu + (accu << 5) + int(b)
|
||||
}
|
||||
return 2147483647 & accu
|
||||
}
|
||||
|
||||
func (c *QQClient) editMemberCard(groupCode, memberUin int64, card string) {
|
||||
_, _ = c.sendAndWait(c.buildEditGroupTagPacket(groupCode, memberUin, card))
|
||||
}
|
||||
|
@ -2,8 +2,9 @@ package client
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
"time"
|
||||
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
)
|
||||
|
||||
// --- tlv decoders for qq client ---
|
||||
@ -52,6 +53,8 @@ func (c *QQClient) decodeT119(data []byte) {
|
||||
//noPicSig []byte
|
||||
//ctime = time.Now().Unix()
|
||||
//etime = ctime + 2160000
|
||||
psKeyMap map[string][]byte
|
||||
pt4TokenMap map[string][]byte
|
||||
)
|
||||
|
||||
if _, ok := m[0x125]; ok {
|
||||
@ -69,9 +72,9 @@ func (c *QQClient) decodeT119(data []byte) {
|
||||
if _, ok := m[0x200]; ok {
|
||||
//pf, pfkey = readT200(t200)
|
||||
}
|
||||
if _, ok := m[0x512]; ok {
|
||||
|
||||
} // 暂不处理, Http api cookie
|
||||
if t512, ok := m[0x512]; ok {
|
||||
psKeyMap, pt4TokenMap = readT512(t512)
|
||||
}
|
||||
if _, ok := m[0x531]; ok {
|
||||
//a1, noPicSig = readT531(t531)
|
||||
}
|
||||
@ -87,6 +90,9 @@ func (c *QQClient) decodeT119(data []byte) {
|
||||
d2Key: m[0x305],
|
||||
wtSessionTicketKey: m[0x134],
|
||||
deviceToken: m[0x322],
|
||||
|
||||
psKeyMap: psKeyMap,
|
||||
pt4TokenMap: pt4TokenMap,
|
||||
}
|
||||
c.Nickname = nick
|
||||
c.Age = age
|
||||
@ -142,6 +148,30 @@ func readT200(data []byte) (pf, pfKey []byte) {
|
||||
return
|
||||
}
|
||||
|
||||
func readT512(data []byte) (psKeyMap map[string][]byte, pt4TokenMap map[string][]byte) {
|
||||
reader := binary.NewReader(data)
|
||||
length := int(reader.ReadUInt16())
|
||||
|
||||
psKeyMap = make(map[string][]byte, length)
|
||||
pt4TokenMap = make(map[string][]byte, length)
|
||||
|
||||
for i := 0; i < length; i++ {
|
||||
domain := reader.ReadStringShort()
|
||||
psKey := reader.ReadBytesShort()
|
||||
pt4Token := reader.ReadBytesShort()
|
||||
|
||||
if len(psKey) > 0 {
|
||||
psKeyMap[domain] = psKey
|
||||
}
|
||||
|
||||
if len(pt4Token) > 0 {
|
||||
pt4TokenMap[domain] = pt4Token
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func readT531(data []byte) (a1, noPicSig []byte) {
|
||||
reader := binary.NewReader(data)
|
||||
m := reader.ReadTlvMap(2)
|
||||
|
Loading…
x
Reference in New Issue
Block a user