Ejemplo n.º 1
0
        public System.Byte[] Get_Tlv(QQAccount user)
        {
            var data = new TLV0015().Get_Tlv(user);

            var encode = QQTea.Encrypt(data, user.TXProtocol.BufTgtgtKey);

            this.FillHead(this.Command);
            this.FillBody(encode, encode.Length);
            this.SetLength();
            return(this.GetBuffer());
        }
Ejemplo n.º 2
0
        public byte[] get_tlv_001A(QQClient m_PCClient)
        {
            var data = new TLV_0015().get_tlv_0015(m_PCClient);

            var encode = QQTea.Encrypt(data, m_PCClient.QQUser.TXProtocol.bufTGTGTKey);

            fill_head(cmd);
            fill_body(encode, encode.Length);
            set_length();
            return(get_buf());
        }
Ejemplo n.º 3
0
        public byte[] Get_Tlv(QQUser user)
        {
            var data = new TLV0015().Get_Tlv(user);

            var encode = QQTea.Encrypt(data, user.TXProtocol.BufTgtgtKey);

            FillHead(Command);
            FillBody(encode, encode.Length);
            SetLength();
            return(GetBuffer());
        }
Ejemplo n.º 4
0
 private void Btn_click_e(object sender, RoutedEventArgs e)
 {
     byte[] tmp_key  = QQTea.Strtobyte(Tea_key.Text);
     byte[] tmp_data = QQTea.Strtobyte(Tea_in.Text);
     if (tmp_data.Length > 0 && tmp_key.Length > 0)
     {
         byte[] redata = QQTea.Encrypt(tmp_data, 0, tmp_data.Length, tmp_key);
         if (redata != null)
         {
             Tea_out.Text = QQTea.Bytetostr(redata);
         }
     }
 }
Ejemplo n.º 5
0
        public byte[] GET_TLV_0006(byte[] m_loginTime, byte[] m_loginIP)
        {
            ByteBuffer buf = new ByteBuffer();

            buf.Put(Util.RandomKey(4));
            buf.Put(new byte[] { 0x00, 0x02 });
            buf.PutLong(user.QQ);
            buf.Put(user.QQ_PACKET_0825DATA2);
            buf.Put(new byte[] { 0x00, 0x00, 0x01 });
            buf.Put(user.MD51);
            buf.Put(m_loginTime);
            buf.Put(new byte[] { 0x00 });//下面有时间时为01
            buf.Put(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            buf.Put(m_loginIP);
            buf.Put(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            buf.Put(new byte[] { 0x00, 0x10 });
            buf.Put(new byte[] { 0x15, 0x74, 0xC4, 0x89, 0x85, 0x7A, 0x19, 0xF5, 0x5E, 0xA9, 0xC9, 0xA3, 0x5E, 0x8A, 0x5A, 0x9B });
            buf.Put(user.QQ_PACKET_TgtgtKey);
            return(QQTea.Encrypt(buf.ToByteArray(), user.Md52()));
        }
Ejemplo n.º 6
0
        public byte[] Get_Tlv(QQUser user)
        {
            if (WSubVer == 0x0002)
            {
                if (user.TXProtocol.BufTgtgt == null)
                {
                    var data = new BinaryWriter(new MemoryStream());
                    data.BeWrite(new Random(Guid.NewGuid().GetHashCode()).Next()); //随机4字节??
                    data.BeWrite(WSubVer);                                         //wSubVer
                    data.BeWrite(user.QQ);                                         //QQ号码
                    data.BeWrite(user.TXProtocol.DwSsoVersion);
                    data.BeWrite(user.TXProtocol.DwServiceId);
                    data.BeWrite(user.TXProtocol.DwClientVer);
                    data.BeWrite((ushort)0);
                    data.Write(user.TXProtocol.BRememberPwdLogin);
                    data.Write(user.MD51);                                            //密码的一次MD5值,服务器用该MD5值验证用户密码是否正确
                    data.BeWrite(user.TXProtocol.DwServerTime);                       //登录时间
                    data.Write(new byte[13]);                                         //固定13字节
                    data.Write(Util.IPStringToByteArray(user.TXProtocol.DwClientIP)); //IP地址
                    data.BeWrite(user.TXProtocol.DwIsp);                              //dwISP
                    data.BeWrite(user.TXProtocol.DwIdc);                              //dwIDC
                    data.WriteKey(user.TXProtocol.BufComputerIdEx);                   //机器码
                    data.Write(user.TXProtocol.BufTgtgtKey);                          //00DD临时密钥(通过验证时客户端用该密钥解密服务端发送回来的数据)

                    user.TXProtocol.BufTgtgt =
                        QQTea.Encrypt(data.BaseStream.ToBytesArray(), user.Md52());
                }
            }
            else
            {
                throw new Exception($"{Name} 无法识别的版本号 {WSubVer}");
            }

            var tlv = new BinaryWriter(new MemoryStream());

            tlv.Write(user.TXProtocol.BufTgtgt);
            FillHead(Command);
            FillBody(tlv.BaseStream.ToBytesArray(), tlv.BaseStream.Length);
            SetLength();
            return(GetBuffer());
        }
Ejemplo n.º 7
0
        public byte[] get_tlv_0006(QQClient m_PCClient)
        {
            if (wSubVer == 0x0002)
            {
                if (m_PCClient.QQUser.TXProtocol.bufTGTGT == null)
                {
                    var data = new BinaryWriter(new MemoryStream());
                    data.BEWrite(new Random(Guid.NewGuid().GetHashCode()).Next()); //随机4字节??
                    data.BEWrite(wSubVer);                                         //wSubVer
                    data.BEWrite((uint)m_PCClient.QQUser.QQ);                      //QQ号码
                    data.BEWrite(QQGlobal.dwSSOVersion);
                    data.BEWrite(QQGlobal.dwServiceId);
                    data.BEWrite(QQGlobal.dwClientVer);
                    data.BEWrite(0);
                    data.Write(m_PCClient.QQUser.bRememberPwdLogin);
                    data.Write(m_PCClient.QQUser.MD51);                       //密码的一次MD5值,服务器用该MD5值验证用户密码是否正确
                    data.Write(m_PCClient.QQUser.LoginTime);                  //登录时间
                    data.Write(new byte[13]);                                 //固定13字节
                    data.Write(m_PCClient.QQUser.IP);                         //IP地址
                    data.BEWrite(QQGlobal.dwISP);                             //dwISP
                    data.BEWrite(QQGlobal.dwIDC);                             //dwIDC
                    data.Write(m_PCClient.QQUser.TXProtocol.bufComputerIDEx); //机器码
                    data.Write(m_PCClient.QQUser.QQ_PACKET_TgtgtKey);         //00DD临时密钥(通过验证时客户端用该密钥解密服务端发送回来的数据)

                    m_PCClient.QQUser.TXProtocol.bufTGTGT =
                        QQTea.Encrypt(data.BaseStream.ToBytesArray(), m_PCClient.QQUser.Md52());
                }
            }
            else
            {
                throw new Exception($"{Name} 无法识别的版本号 {wSubVer}");
            }

            var tlv = new BinaryWriter(new MemoryStream());

            tlv.Write(m_PCClient.QQUser.TXProtocol.bufTGTGT);
            fill_head(cmd);
            fill_body(tlv.BaseStream.ToBytesArray(), tlv.BaseStream.Length);
            set_length();
            return(get_buf());
        }
Ejemplo n.º 8
0
        public byte[] GET_TLV_0006(byte[] m_loginTime, byte[] m_loginIP)
        {
            var bw = new BinaryWriter(new MemoryStream());

            bw.Write(Util.RandomKey(4));
            bw.Write(new byte[] { 0x00, 0x02 });
            bw.BEWrite(user.QQ);
            bw.Write(user.QQ_PACKET_0825DATA2);
            bw.Write(new byte[] { 0x00, 0x00, 0x01 });
            bw.Write(user.MD51);
            bw.Write(m_loginTime);
            bw.Write(new byte[] { 0x00 }); //下面有时间时为01
            bw.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            bw.Write(m_loginIP);
            bw.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
            bw.Write(new byte[] { 0x00, 0x10 });
            bw.Write(new byte[]
                     { 0x15, 0x74, 0xC4, 0x89, 0x85, 0x7A, 0x19, 0xF5, 0x5E, 0xA9, 0xC9, 0xA3, 0x5E, 0x8A, 0x5A, 0x9B });
            bw.Write(user.QQ_PACKET_TgtgtKey);
            return(QQTea.Encrypt(bw.BaseStream.ToBytesArray(), user.Md52()));
        }
Ejemplo n.º 9
0
 /// <summary>
 ///     加密包体
 /// </summary>
 /// <param name="buf">未加密的字节数组.</param>
 /// <param name="offset">包体开始的偏移.</param>
 /// <param name="length">包体长度.</param>
 /// <returns>加密的包体</returns>
 public byte[] EncryptBody(byte[] buf, int offset, int length)
 {
     return(QQTea.Encrypt(buf, offset, length, SecretKey));
 }
Ejemplo n.º 10
0
        /// <summary>
        /// 初始化包体
        /// </summary>
        /// <param name="buf">The buf.</param>
        protected override void PutBody(ByteBuffer buf)
        {
            user.QQ_tlv_001A_encr = QQTea.Encrypt(user.QQ_PACKET_FIX2, user.QQ_PACKET_TgtgtKey);
            if (_type == Login0x0836Type.Login0x0836_622)
            {
                user.QQ_tlv_0006_encr = GET_TLV_0006(user.LoginTime, user.ServerIp);
            }
            buf.Put(new byte[] { 0x01, 0x12 });
            buf.Put(new byte[] { 0x00, 0x38 });
            buf.Put(user.QQ_0825Token);
            buf.Put(new byte[] { 0x03, 0x0F });
            buf.Put(new byte[] { 0x00 });
            buf.Put((byte)(Util.HexStringToByteArray(Util.ConvertStringToHex(user.PcName)).Length + 2));
            buf.Put(new byte[] { 0x00 });
            buf.Put((byte)Util.HexStringToByteArray(Util.ConvertStringToHex(user.PcName)).Length);
            buf.Put(Util.HexStringToByteArray(Util.ConvertStringToHex(user.PcName)));
            buf.Put(new byte[] { 0x00, 0x05, 0x00, 0x06, 0x00, 0x02 });
            buf.PutLong(user.QQ);
            buf.Put(new byte[] { 0x00, 0x06 });
            buf.Put(new byte[] { 0x00, 0x78 });
            buf.Put(user.QQ_tlv_0006_encr);
            buf.Put(user.QQ_PACKET_FIX2);
            buf.Put(new byte[] { 0x00, 0x1A });
            buf.Put(new byte[] { 0x00, 0x40 });
            buf.Put(user.QQ_tlv_001A_encr);
            buf.Put(user.QQ_PACKET_0825DATA0);
            buf.Put(user.QQ_PACKET_0825DATA2);
            buf.PutLong(user.QQ);
            buf.Put(new byte[] { 0x00, 0x00, 0x00, 0x00 });
            buf.Put(new byte[] { 0x01, 0x03 });
            buf.Put(new byte[] { 0x00, 0x14 });
            buf.Put(new byte[] { 0x00, 0x01 });
            buf.Put(new byte[] { 0x00, 0x10 });
            buf.Put(new byte[] { 0x60, 0xC9, 0x5D, 0xA7, 0x45, 0x70, 0x04, 0x7F, 0x21, 0x7D, 0x84, 0x50, 0x5C, 0x66, 0xA5, 0xC6 });

            if (_type == Login0x0836Type.Login0x0836_686)
            {
                buf.Put(new byte[] { 0x01, 0x10 });
                buf.Put(new byte[] { 0x00, 0x3C });
                buf.Put(new byte[] { 0x00, 0x01 });
                buf.Put(new byte[] { 0x00, 0x38 });
                buf.Put(user.QQ_0836Token);
            }

            buf.Put(new byte[] { 0x03, 0x12 });
            buf.Put(new byte[] { 0x00, 0x05 });
            buf.Put(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x01 });
            buf.Put(new byte[] { 0x05, 0x08 });
            buf.Put(new byte[] { 0x00, 0x05 });
            buf.Put(new byte[] { 0x01, 0x00, 0x00, 0x00, 0x00 });
            buf.Put(new byte[] { 0x03, 0x13 });
            buf.Put(new byte[] { 0x00, 0x19 });
            buf.Put(new byte[] { 0x01 });
            buf.Put(new byte[] { 0x01, 0x02 });
            buf.Put(new byte[] { 0x00, 0x10 });
            buf.Put(new byte[] { 0x04, 0xEA, 0x78, 0xD1, 0xA4, 0xFF, 0xCD, 0xCC, 0x7C, 0xB8, 0xD4, 0x12, 0x7D, 0xBB, 0x03, 0xAA }); //两次0836包相同
            buf.Put(new byte[] { 0x00, 0x00, 0x00 });
            buf.Put(new byte[] { 0x00 });                                                                                           //可能为00,0F,1F
            buf.Put(new byte[] { 0x01, 0x02 });
            buf.Put(new byte[] { 0x00, 0x62 });
            buf.Put(new byte[] { 0x00, 0x01 });
            buf.Put(new byte[] { 0x04, 0xEB, 0xB7, 0xC1, 0x86, 0xF9, 0x08, 0x96, 0xED, 0x56, 0x84, 0xAB, 0x50, 0x85, 0x2E, 0x48 });//两次0836包不同
            buf.Put(new byte[] { 0x00, 0x38 });
            buf.Put(new byte[] { 0xE9, 0xAA, 0x2B, 0x4D, 0x26, 0x4C, 0x76, 0x18, 0xFE, 0x59, 0xD5, 0xA9, 0x82, 0x6A, 0x0C, 0x04, 0xB4, 0x49, 0x50, 0xD7, 0x9B, 0xB1, 0xFE, 0x5D, 0x97, 0x54, 0x8D, 0x82, 0xF3, 0x22, 0xC2, 0x48, 0xB9, 0xC9, 0x22, 0x69, 0xCA, 0x78, 0xAD, 0x3E, 0x2D, 0xE9, 0xC9, 0xDF, 0xA8, 0x9E, 0x7D, 0x8C, 0x8D, 0x6B, 0xDF, 0x4C, 0xD7, 0x34, 0xD0, 0xD3 });
            buf.Put(new byte[] { 0x00, 0x14 });
            buf.Put(user.QQ_PACKET_Crc32_Code);
            buf.PutULong(CRC32cs.GetCRC32Str(Util.ToHex(user.QQ_PACKET_Crc32_Code)));
        }
Ejemplo n.º 11
0
 public Byte[] EncryptBody(Byte[] buf, Int32 offset, Int32 length, Byte[] key)
 {
     return(QQTea.Encrypt(buf, offset, length, key));
 }