public static byte[] tlv525(int flag, byte[] time, int Appid) //1=普通登录 2=假锁登录 { byte[] bytes = null; if (flag == 1) { bytes = new byte[] { 0, 1, 5, 0x36, 0, 2, 1, 0 }; } else { bytes = new byte[] { 0, 1, 5, 0x36, 0, 0x41, 1, 3, 0, 0, 0, 0 }; bytes = bytes.Concat(new byte[] { 0x3A, 0x4, 0x3, 0x9E }).ToArray(); bytes = bytes.Concat(new byte[] { 4 }).ToArray(); bytes = bytes.Concat(new byte[] { 0x65, 0x56, 0xAB, 0xB }).ToArray(); // 参数还未知,等等以后解 bytes = bytes.Concat(time).ToArray(); bytes = bytes.Concat(BitConverter.GetBytes(Appid).Reverse().ToArray()).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(API.GetRandByteArray(4)).ToArray(); bytes = bytes.Concat(new byte[] { 4 }).ToArray(); bytes = bytes.Concat(new byte[] { 0x65, 0x56, 0xAB, 0xB }).ToArray(); // 参数还未知,等等以后解 bytes = bytes.Concat(time).ToArray(); bytes = bytes.Concat(BitConverter.GetBytes(Appid).Reverse().ToArray()).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(new byte[] { 0x3A }).ToArray(); bytes = bytes.Concat(API.GetRandByteArray(3)).ToArray(); bytes = bytes.Concat(new byte[] { 4 }).ToArray(); bytes = bytes.Concat(new byte[] { 0x65, 0x56, 0xAB, 0xB }).ToArray(); bytes = bytes.Concat(time).ToArray(); bytes = bytes.Concat(BitConverter.GetBytes(Appid).Reverse().ToArray()).ToArray(); } byte[] bytesLen = BitConverter.GetBytes(Convert.ToInt16(bytes.Length)).Reverse().ToArray(); var retByte = new byte[] { 5, 0x25 }.Concat(bytesLen).Concat(bytes).ToArray(); //Debug.Print("tlv525:" + retByte.Length.ToString + Environment.NewLine + BitConverter.ToString(retByte).Replace("-", " ")) return(retByte); }
//协议包结构:包头(四字节):协议号(两字节)+协议大小(两字节) 包体:协议字节 #region tlv001 QQ号及服务器时间 public static byte[] tlv001(byte[] user, byte[] times) { var bytes = new byte[] { 0, 1 }.Concat(API.GetRandByteArray(4)).ToArray(); bytes = bytes.Concat(user).ToArray(); bytes = bytes.Concat(times).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0 }).ToArray(); byte[] bytesLen = BitConverter.GetBytes(Convert.ToInt16(bytes.Length)).Reverse().ToArray(); var retByte = new byte[] { 0, 1 }.Concat(bytesLen).Concat(bytes).ToArray(); //Debug.Print("tlv001:" + retByte.Length.ToString + Environment.NewLine + BitConverter.ToString(retByte).Replace("-", " ")) return(retByte); }
public static byte[] tlv544() { byte[] bytes = new byte[] { 0, 0, 7, 0xD9, 0, 0, 0, 0, 0, 0x2E, 0, 0x20 }; bytes = bytes.Concat(API.GetRandByteArray(32)).ToArray(); bytes = bytes.Concat(new byte[] { 0x0, 8, 0, 0, 0, 0, 0, 0, 0x50, 0xC9, 0, 3, 1, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(new byte[] { 0x4, 0, 0, 0, 1, 0, 0, 0, 1 }).ToArray(); bytes = bytes.Concat(API.GetRandByteArray(15)).ToArray(); bytes = bytes.Concat(new byte[] { 0x0, 0x14 }).ToArray(); bytes = bytes.Concat(Encoding.UTF8.GetBytes("com.tencent.mobileqq")).ToArray(); bytes = bytes.Concat(Encoding.UTF8.GetBytes("A6B745BF24A2C277527716F6F36EB68D")).ToArray(); bytes = bytes.Concat(new byte[] { 6, 0xC, 0xAE, 0x6F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x10, 0xC, 0x0, 0x3F, 0x99, 0x46, 0xA5, 0xAA, 0x62, 0x43, 0xA3, 0xA8, 0xDA, 0x89, 0x53, 0x63, 0x81 }).ToArray(); byte[] bytesLen = BitConverter.GetBytes(Convert.ToInt16(bytes.Length)).Reverse().ToArray(); var retByte = new byte[] { 5, 0x44 }.Concat(bytesLen).Concat(bytes).ToArray(); //Debug.Print("tlv544:" + retByte.Length.ToString + Environment.NewLine + BitConverter.ToString(retByte).Replace("-", " ")) return(retByte); }
public static byte[] tlv106(byte[] user, byte[] md5pass, byte[] md5_2pass, byte[] _TGTKey, byte[] guidBytes, byte[] times, int appId, byte[] QQUTF8) { var bytes = new byte[] { 0, 4 }.Concat(API.GetRandByteArray(4)).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0xD }).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0x10 }).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(user).ToArray(); bytes = bytes.Concat(times).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0 }).ToArray(); bytes = bytes.Concat(new byte[] { 1 }).ToArray(); bytes = bytes.Concat(md5pass).ToArray(); bytes = bytes.Concat(_TGTKey).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0, 0, 0, 1 }).ToArray(); bytes = bytes.Concat(guidBytes).ToArray(); if (appId < 0) { bytes = bytes.Concat(new byte[] { 0, 0, 0, 2 }).ToArray(); } else { bytes = bytes.Concat(BitConverter.GetBytes(appId).Reverse().ToArray()).ToArray(); } bytes = bytes.Concat(new byte[] { 0, 0, 0, 1 }).ToArray(); bytes = bytes.Concat(BitConverter.GetBytes(Convert.ToInt16(QQUTF8.Length)).Reverse().ToArray()).ToArray(); bytes = bytes.Concat(QQUTF8).ToArray(); bytes = bytes.Concat(new byte[] { 0, 0 }).ToArray(); //Debug.Print("tlv106:" + bytes.Length.ToString + Environment.NewLine + BitConverter.ToString(bytes).Replace("-", "")) HashTea Hash = new HashTea(); var byteHash = Hash.HashTEA(bytes, md5_2pass, 0, true); byte[] bytesLen = BitConverter.GetBytes(Convert.ToInt16(byteHash.Length)).Reverse().ToArray(); var retByte = new byte[] { 1, 6 }.Concat(bytesLen).Concat(byteHash).ToArray(); //Debug.Print("tlv106:" + retByte.Length.ToString + Environment.NewLine + BitConverter.ToString(retByte).Replace("-", "")) return(retByte); }
public static void Initialization(string Account, string Password) { API.QQ.Account = Account; API.QQ.LongQQ = long.Parse(API.QQ.Account); API.QQ.UTF8 = Encoding.UTF8.GetBytes(API.QQ.Account); API.QQ.user = API.HexStrToByteArray(API.QQ.LongQQ.ToString("X")); API.QQ.pass = Password; API.QQ.md5_1 = API.MD5Hash(Encoding.UTF8.GetBytes(API.QQ.pass)); byte[] md5_byte = API.QQ.md5_1.Concat(new byte[] { 0, 0, 0, 0 }).Concat(API.QQ.user).ToArray(); API.QQ.md5_2 = API.MD5Hash(md5_byte); API.ECDH_Struct _ECDH = ECDH.GetECDHKeys(); API.QQ.pub_key = _ECDH.PublicKey; API.QQ.shareKey = _ECDH.Sharekey; API.QQ.prikey = _ECDH.PrivateKey; API.QQ.mRequestID = 10000; API.QQ.key = new byte[16]; var timestampHex = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString(); API.QQ.login_Time = API.HexStrToByteArray(int.Parse(timestampHex).ToString("X")); API.QQ.TGTKey = API.MD5Hash(API.QQ.pub_key); API.QQ.randKey = API.MD5Hash(API.QQ.shareKey); API.QQ.MsgCookies = API.GetRandByteArray(4); API.QQ.Appid = 537065990; API.UN_Tlv.T108_ksid = API.HexStrToByteArray("93AC689396D57E5F9496B81536AAFE91"); var timestamp = long.Parse(Convert.ToInt64(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds).ToString().Substring(0, 10)); SyncCoookies SyncTimeStruct = new SyncCoookies { timestamp1 = timestamp, timestamp2 = timestamp, timestamp3 = timestamp, Field3 = 805979870, Field4 = 3344460674, Field5 = 82343012, Field6 = 3281833389, Field7 = 2696570484, Field8 = 81, Field10 = 0 }; using (var ms = new MemoryStream()) { Serializer.Serialize(ms, SyncTimeStruct); API.QQ.SyncCoookies = ms.ToArray(); } API.Device.imei = "865166024867445"; API.Device.Imsi = "460001330114682"; API.Device.WIFIByteSSID = API.MD5Hash(Encoding.UTF8.GetBytes("5c:11:21:11:19:1f")); API.Device.WIFISSID = "dlb"; API.Device.Ver = "|" + API.Device.imei + "|A8.5.0.4003a808"; //手机串号加QQ版本 API.Device.Version = Encoding.UTF8.GetBytes("A8.5.0.4003a808"); API.Device.MacBytes = Encoding.UTF8.GetBytes("DA-EB-D5-1C-7B-CD"); API.Device.MacId = "84:18:38:38:96:36"; API.Device.GUIDBytes = API.MD5Hash(Encoding.UTF8.GetBytes("b7981398-337d-4d2c-ab64-22b5b6f297dc")); API.Device.AndroidID = API.MD5Hash(Encoding.UTF8.GetBytes("95dcc49a9434f65a")); API.Device.AppId = 537042771; API.Device.os_type = "android"; //'安卓版本 API.Device.os_version = "5.1.1"; API.Device.network_type = "China Mobile GSM"; API.Device.apn = "wifi"; API.Device.model = "oppo r9 plustm a"; //手机型号 API.Device.brands = "oppo"; //手机品牌 API.Device.Apk_Id = "com.tencent.mobileqq"; API.Device.Apk_V = "8.5.0"; //安卓版本 API.Device.ApkSig = new byte[] { 0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D }; //固定app_sign }
public static byte[] PackOnlineStatus(string cmd, int LonginType) { if (API.QQ.mRequestID > 2147483647) { API.QQ.mRequestID = 10000; } else { API.QQ.mRequestID += 1; } var bytes1 = BitConverter.GetBytes(API.QQ.mRequestID).Reverse().ToArray(); bytes1 = bytes1.Concat(BitConverter.GetBytes(API.QQ.Appid).Reverse().ToArray()).ToArray(); bytes1 = bytes1.Concat(BitConverter.GetBytes(API.QQ.Appid).Reverse().ToArray()).ToArray(); bytes1 = bytes1.Concat(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }).ToArray(); bytes1 = bytes1.Concat(BitConverter.GetBytes(API.UN_Tlv.T10A_token_A4.Length + 4).Reverse().ToArray()).ToArray().Concat(API.UN_Tlv.T10A_token_A4).ToArray(); bytes1 = bytes1.Concat(BitConverter.GetBytes(cmd.Length + 4).Reverse().ToArray()).ToArray().Concat(Encoding.UTF8.GetBytes(cmd)).ToArray(); //命令行 bytes1 = bytes1.Concat(BitConverter.GetBytes(API.QQ.MsgCookies.Length + 4).Reverse().ToArray()).ToArray().Concat(API.QQ.MsgCookies).ToArray(); //MsgCookies bytes1 = bytes1.Concat(BitConverter.GetBytes(API.Device.imei.Length + 4).Reverse().ToArray()).ToArray().Concat(Encoding.UTF8.GetBytes(API.Device.imei)).ToArray(); //Device.imei if (LonginType == 0) { bytes1 = bytes1.Concat(new byte[] { 0, 0, 0, 4 }).ToArray(); } else if (LonginType == 1) { bytes1 = bytes1.Concat(API.GetRandByteArray(16)).ToArray(); } else if (LonginType == 2) { bytes1 = bytes1.Concat(new byte[16]).ToArray(); } bytes1 = bytes1.Concat(new byte[] { 0, 0x23 }).ToArray(); bytes1 = bytes1.Concat(Encoding.UTF8.GetBytes(API.Device.Ver)).ToArray(); bytes1 = bytes1.Concat(new byte[] { 0, 0, 0, 0x2A }).ToArray(); bytes1 = bytes1.Concat(Encoding.UTF8.GetBytes("b$1ebc85de7365de4d155ce40110001581471d")).ToArray(); var bytes2 = new byte[] { 0x10, 3, 0x2C, 0x3C, 0x4C, 0x56, 0xB }; bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes("PushService")).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0x66, 0xE }).ToArray(); bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes("SvcReqRegister}")).ToArray(); if (LonginType == 0) { bytes2 = bytes2.Concat(new byte[] { 0, 1, 0, 0xE6, 8, 0 }).ToArray(); } else if (LonginType == 1) { bytes2 = bytes2.Concat(new byte[] { 0, 1, 0, 0xEA, 8, 0 }).ToArray(); } else if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0, 1, 0, 0xBD, 8, 0 }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 1, 6, 0xE }).ToArray(); bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes("SvcReqRegister")).ToArray(); if (LonginType == 0) { bytes2 = bytes2.Concat(new byte[] { 0x1D, 0, 1, 0, 0xCE, 0xA, 3, 0, 0, 0, 0 }).ToArray(); } else if (LonginType == 1) { bytes2 = bytes2.Concat(new byte[] { 0x1D, 0, 1, 0, 0xD2, 0xA, 3, 0, 0, 0, 0 }).ToArray(); } else if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0x1D, 0, 1, 0, 0xA5, 0xA, 3, 0, 0, 0, 0 }).ToArray(); } bytes2 = bytes2.Concat(API.QQ.user).ToArray(); if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0x1C }).ToArray(); } else { bytes2 = bytes2.Concat(new byte[] { 0x10, 7 }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0x2C, 0x36, 0 }).ToArray(); if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0x40, 0x15 }).ToArray(); } else { bytes2 = bytes2.Concat(new byte[] { 0x40, 0xB }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xA0, 0x75, 0xB0, 0x16, 0xC0, 1, 0xD6, 0, 0xEC, 0xFD, 0x10, 0, 0, 0x10 }).ToArray(); bytes2 = bytes2.Concat(API.Device.GUIDBytes).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0xF1, 0x11, 8, 4, 0xFC, 0x12 }).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x13 }).ToArray(); bytes2 = bytes2.Concat(BitConverter.GetBytes(Convert.ToInt16(API.Device.model.Length)).ToArray().Take(1).ToArray()).ToArray(); bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes(API.Device.model)).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x14 }).ToArray(); bytes2 = bytes2.Concat(BitConverter.GetBytes(Convert.ToInt16(API.Device.model.Length)).ToArray().Take(1).ToArray()).ToArray(); bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes(API.Device.model)).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x15 }).ToArray(); bytes2 = bytes2.Concat(BitConverter.GetBytes(Convert.ToInt16(API.Device.os_version.Length)).ToArray().Take(1).ToArray()).ToArray(); bytes2 = bytes2.Concat(Encoding.UTF8.GetBytes(API.Device.os_version)).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0xF0, 0x16, 1 }).ToArray(); if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0xF1, 0x17 }).ToArray(); } else { bytes2 = bytes2.Concat(new byte[] { 0xF1, 0x17, 0, 0xD7 }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0xFC, 0x18 }).ToArray(); if (LonginType == 0) { bytes2 = bytes2.Concat(new byte[] { 0xF3, 0x1A, 0, 0, 0, 0, 0xA6, 0x3C, 0x5E, 0x7D, 0xF2, 0x1B, 0x5F, 0xD, 0x60, 0x71 }).ToArray(); } else if (LonginType == 1) { bytes2 = bytes2.Concat(new byte[] { 0xF3, 0x1A, 0, 0, 0, 0, 0xD9, 0xC, 0x60, 0x71, 0xF3, 0x1B, 0, 0, 0, 0, 0xA6, 0x3C, 0x5E, 0x7D }).ToArray(); } else if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0xFC, 0x1A, 0xFC, 0x1B }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x1C, 0, 0xFC, 0x1D }).ToArray(); if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x1E, 0, 0xF6, 0x1F, 0 }).ToArray(); } else { bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x1E, 7, 0x5B, 0x75, 0x5D, 0x6F, 0x70, 0x70, 0x6F, 0xF6, 0x1F, 0x14, 0x3F, 0x4C, 0x59, 0x5A, 0x32, 0x38, 0x4E, 0x3B, 0x61, 0x6E, 0x64, 0x72, 0x6F, 0x69, 0x64, 0x5F, 0x78, 0x38, 0x36, 0x2D }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0xF6, 0x20, 0x0, 0xFD, 0x21, 0x0, 0x0, 0x11, 0xA, 0x8, 0x8, 0x2E, 0x10, 0x9A, 0xEF, 0x9C, 0xFB, 0x5, 0xA, 0x5, 0x8, 0x9B, 0x2, 0x10, 0x0, 0xFC, 0x22, 0xFC, 0x24 }).ToArray(); if (LonginType == 2) { bytes2 = bytes2.Concat(new byte[] { 0xF0, 0x26, 0xFF }).ToArray(); } else { bytes2 = bytes2.Concat(new byte[] { 0xFC, 0x26 }).ToArray(); } bytes2 = bytes2.Concat(new byte[] { 0xFC, 0x27, 0xFA, 0x2A, 0x0, 0x1, 0xB, 0xB, 0x8C, 0x98, 0xC, 0xA8, 0xC }).ToArray(); var bytes = BitConverter.GetBytes(bytes1.Length + 4).Reverse().ToArray(); bytes = bytes.Concat(bytes1).ToArray(); bytes = bytes.Concat(BitConverter.GetBytes(bytes2.Length + 4).Reverse().ToArray()).ToArray(); bytes = bytes.Concat(bytes2).ToArray(); Debug.Print("在线状态包:" + bytes.Length.ToString() + "\r\n" + BitConverter.ToString(bytes).Replace("-", " ")); HashTea Hash = new HashTea(); byte[] retByte = Hash.HashTEA(bytes, API.UN_Tlv.T305_SessionKey, 0, true); return(PackHeader(retByte, 2)); }
public static byte[] PackLoginHeader(string servicecmd, byte[] bytesIn, int loginType) //0 = 普通登录 1 = 验证码登录 { var HeaderBytes = BitConverter.GetBytes(API.QQ.mRequestID).Reverse().ToArray(); HeaderBytes = HeaderBytes.Concat(BitConverter.GetBytes(API.QQ.Appid).Reverse().ToArray()).ToArray(); HeaderBytes = HeaderBytes.Concat(BitConverter.GetBytes(API.QQ.Appid).Reverse().ToArray()).ToArray(); HeaderBytes = HeaderBytes.Concat(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4 }).ToArray(); HeaderBytes = HeaderBytes.Concat(BitConverter.GetBytes(servicecmd.Length + 4).Reverse().ToArray()).ToArray(); HeaderBytes = HeaderBytes.Concat(Encoding.UTF8.GetBytes(servicecmd)).ToArray(); HeaderBytes = HeaderBytes.Concat(new byte[] { 0, 0, 0, 8 }).ToArray(); if (loginType == 0) { HeaderBytes = HeaderBytes.Concat(new byte[] { 0x6C, 0x6A, 0xED, 0x65 }).ToArray(); } else if (loginType == 1) { HeaderBytes = HeaderBytes.Concat(new byte[] { 0xB, 0x63, 0xE0, 0x82 }).ToArray(); } HeaderBytes = HeaderBytes.Concat(BitConverter.GetBytes(API.Device.imei.Length + 4).Reverse().ToArray()).ToArray(); HeaderBytes = HeaderBytes.Concat(Encoding.UTF8.GetBytes(API.Device.imei)).ToArray(); HeaderBytes = HeaderBytes.Concat(new byte[] { 0, 0, 0, 4 }).ToArray(); HeaderBytes = HeaderBytes.Concat(BitConverter.GetBytes(Convert.ToInt16(API.Device.Ver.Length + 2)).Reverse().ToArray()).ToArray(); HeaderBytes = HeaderBytes.Concat(Encoding.UTF8.GetBytes(API.Device.Ver)).ToArray(); HeaderBytes = HeaderBytes.Concat(new byte[] { 0, 0, 0, 0x2A }).ToArray(); HeaderBytes = HeaderBytes.Concat(Encoding.UTF8.GetBytes("b$1ebc85de7365de4d155ce40110001581471d")).ToArray(); var HeaderLen = BitConverter.GetBytes(Convert.ToInt16(HeaderBytes.Length + 4)).Reverse().ToArray(); HeaderBytes = new byte[] { 0, 0 }.Concat(HeaderLen).ToArray().Concat(HeaderBytes).ToArray(); var bytes2 = new byte[] { 0x1F, 0x41, 8, 0x10, 0, 1 }; bytes2 = bytes2.Concat(API.QQ.user).ToArray(); if (loginType == 0) { bytes2 = bytes2.Concat(new byte[] { 0x3, 0x87, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1 }).ToArray(); } else if (loginType == 1) { bytes2 = bytes2.Concat(new byte[] { 0x3, 0x7, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1 }).ToArray(); } bytes2 = bytes2.Concat(API.GetRandByteArray(16)).ToArray(); bytes2 = bytes2.Concat(new byte[] { 1, 0x31, 0, 1 }).ToArray(); bytes2 = bytes2.Concat(new byte[] { 0, 0x41 }).ToArray(); bytes2 = bytes2.Concat(API.QQ.pub_key).ToArray(); //65字节 bytes2 = bytes2.Concat(bytesIn).ToArray(); //1392 var BodyLen = BitConverter.GetBytes(Convert.ToInt16(bytes2.Length + 4)).Reverse().ToArray(); bytes2 = new byte[] { 2 }.Concat(BodyLen).ToArray().Concat(bytes2).ToArray().Concat(new byte[] { 3 }).ToArray(); var bytes = HeaderBytes.Concat(BitConverter.GetBytes(bytes2.Length + 4).Reverse().ToArray()).ToArray().Concat(bytes2).ToArray(); //Debug.Print("PackLoginHeader:" + bytes.Length.ToString + Environment.NewLine + BitConverter.ToString(bytes).Replace("-", " ")) HashTea Hash = new HashTea(); byte[] EncodeByte = Hash.HashTEA(bytes, API.QQ.key, 0, true); //Debug.Print("EncodeByte:" + EncodeByte.Length.ToString + Environment.NewLine + BitConverter.ToString(EncodeByte).Replace("-", " ")) var retByte = PackHeader(EncodeByte, loginType); return(retByte); }