/// <summary> /// 初始化包体 /// </summary> protected override void PutBody() { BodyWriter.Write(new byte[] { 0x00, 0x02, 0x00, 0x00, 0x08, 0x04, 0x01, 0xE0 }); BodyWriter.BeWrite(User.TXProtocol.DwSsoVersion); BodyWriter.BeWrite(User.TXProtocol.DwServiceId); BodyWriter.BeWrite(User.TXProtocol.DwClientVer); BodyWriter.Write((byte)0x00); BodyWriter.WriteKey(User.TXProtocol.BufSigClientAddr); BodyWriter.Write(new byte[] { 0x01, 0x02 }); BodyWriter.WriteKey(User.TXProtocol.BufDhPublicKey); if (string.IsNullOrEmpty(VerifyCode)) { BodyWriter.Write(new byte[] { 0x13, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00 }); BodyWriter.Write(User.QQPacket00BaSequence); if (User.TXProtocol.PngToken == null || User.TXProtocol.PngToken?.Length == 0) { BodyWriter.Write((byte)0x00); } else { BodyWriter.WriteKey(User.TXProtocol.PngToken); } } else { var verifyCodeBytes = Util.HexStringToByteArray(Util.ConvertStringToHex(VerifyCode)); BodyWriter.Write(new byte[] { 0x14, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00 }); BodyWriter.BeWrite((ushort)verifyCodeBytes.Length); BodyWriter.Write(verifyCodeBytes); BodyWriter.WriteKey(User.TXProtocol.BufSigPic); //输入验证码后清空图片流 User.QQPacket00BaVerifyCode = new byte[] { }; } BodyWriter.WriteKey(User.QQPacket00BaFixKey); }
/// <summary> /// 初始化包体 /// </summary> protected override void PutBody() { BodyWriter.BeWrite(0x0000000C); BodyWriter.BeWrite(Util.GetTimeSeconds(DateTime.Now)); BodyWriter.BeWrite(0x000003E8); BodyWriter.WriteKey(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); }
/// <summary> /// 初始化包体 /// </summary> protected override void PutBody() { BodyWriter.Write(new byte[] { 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 }); string data = "{\"t1\":" + Util.GetTimeSeconds(DateTime.Now).ToString() + "}"; BodyWriter.WriteKey(Util.GetBytes(data)); }
/// <summary> /// 初始化包体 /// </summary> protected override void PutBody() { var dateTime = Util.GetTimeSeconds(DateTime.Now); var group = ConvertQQGroupId(_group); switch (Message.Snippets[0].Type) { case MessageType.At: case MessageType.Normal: case MessageType.Emoji: { BodyWriter.Write((byte)0x2A); BodyWriter.BeWrite(group); BodyWriter.BeWrite((ushort)(_data.Length + 50)); // 字符串长度 + 56,但是_data里面包含了和长度有关的额外六个byte BodyWriter.Write(new byte[] { 0x00, 0x01, _packetCount, _packetIndex, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x53, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00 }); BodyWriter.BeWrite(dateTime); BodyWriter.Write(Util.RandomKey(4)); BodyWriter.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x86, 0x00 }); BodyWriter.Write(new byte[] { 0x00, 0x0C }); BodyWriter.Write(new byte[] { 0xE5, 0xBE, 0xAE, 0xE8, 0xBD, 0xAF, 0xE9, 0x9B, 0x85, 0xE9, 0xBB, 0x91 }); BodyWriter.Write(new byte[] { 0x00, 0x00 }); BodyWriter.Write(_data); break; } case MessageType.Xml: { BodyWriter.Write((byte)0x2A); BodyWriter.BeWrite(group); var compressMsg = GZipByteArray.CompressBytes(Message.Snippets[0].Content); BodyWriter.BeWrite((ushort)(compressMsg.Length + 64)); BodyWriter.Write(new byte[] { 0x00, 0x01, _packetCount, _packetIndex, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x53, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00 }); BodyWriter.BeWrite(dateTime); BodyWriter.Write(SendXml(compressMsg)); break; } case MessageType.Picture: { var _Snippets = Message.Snippets[0]; BodyWriter.Write((byte)0x2A); BodyWriter.BeWrite(group); var guid = Encoding.UTF8.GetBytes(Util.GetMD5ToGuidHashFromFile(Message.Snippets[0].Content) + Path.GetExtension(_Snippets.Content)); BodyWriter.Write(new byte[] { 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00 }); BodyWriter.BeWrite(dateTime); BodyWriter.Write(Util.RandomKey(4)); BodyWriter.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x86, 0x22 }); BodyWriter.WriteKey(new byte[] { 0xE5, 0xBE, 0xAE, 0xE8, 0xBD, 0xAF, 0xE9, 0x9B, 0x85, 0xE9, 0xBB, 0x91 }); BodyWriter.Write(new byte[] { 0x00, 0x00, 0x03, 0x00, 0xCB, 0x02 }); BodyWriter.WriteKey(guid); BodyWriter.Write((byte)0x04); BodyWriter.WriteKey(Util.HexStringToByteArray(_Snippets["30Key"].ToString())); BodyWriter.Write((byte)0x05); BodyWriter.WriteKey(Util.HexStringToByteArray(_Snippets["48Key"].ToString())); BodyWriter.Write(new byte[] { 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x50, 0x07, 0x00, 0x01, 0x43, 0x08, 0x00, 0x00, 0x09, 0x00, 0x01, 0x01, 0x0b, 0x00, 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x00, 0x05, 0xa0, 0x16, 0x00, 0x04, 0x00, 0x00, 0x04, 0x38, 0x18, 0x00, 0x04, 0x00, 0x01, 0xf5, 0x62, 0xff }); var data = new BinaryWriter(new MemoryStream()); data.Write(new byte[] { 0x15, 0x36, 0x20 }); data.Write(new byte[] { 0x39, 0x32, 0x6b, 0x41, 0x31, 0x43, 0x61, 0x37, 0x64, 0x63, 0x66, 0x34, 0x38, 0x37, 0x34, 0x39, 0x38, 0x64, 0x33, 0x33, 0x37, 0x39 }); data.Write(new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }); data.Write(guid); data.Write((byte)0x41); BodyWriter.WriteKey(data.BaseStream.ToBytesArray()); break; } case MessageType.AddGroup: { BodyWriter.Write(new byte[] { 0x08 }); BodyWriter.BeWrite(group); BodyWriter.Write(new byte[] { 0x01 }); BodyWriter.BeWrite((ushort)User.AddFriend0020Value.Length); BodyWriter.Write(User.AddFriend0020Value); BodyWriter.Write(new byte[] { 0x00, 0x00, 0x00 }); //备注信息 var messageData = Encoding.UTF8.GetBytes(Message.Snippets[0].Content); Writer.BeWrite((ushort)messageData.Length); Writer.Write(messageData); BodyWriter.Write(new byte[] { 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x09 }); break; } case MessageType.GetGroupImformation: { BodyWriter.Write(new byte[] { 0x72 }); BodyWriter.BeWrite(group); BodyWriter.BeWrite(0x00); break; } case MessageType.ExitGroup: { BodyWriter.Write(new byte[] { 0x09 }); BodyWriter.BeWrite(group); break; } default: { throw new NotImplementedException(); } } }