public void setName(CString pBuffer) { // Grab Type int i = 0; CString servername = pBuffer; string firsttwo = servername.ReadChars(2); this.type = ""; foreach (string serverType in serverTypes) { if (firsttwo == serverType) { pBuffer.Remove(0, 2); //Console.WriteLine(pBuffer.Text); this.type = firsttwo.ToString(); break; } i++; } if (this.type == "3 ") this.type = "1"; else if (this.type == "P ") this.type = "2"; else if (this.type == "") this.type = "3"; else if (this.type == "H ") this.type = "4"; else if (this.type == "U ") this.type = "5"; // Set Name this.name = pBuffer.Text.ToString(); }
/// <summary> /// Decrypt Packet /// </summary> public void DecryptPacket(CString Packet) { // Encryption Type Encrypt.Type EncryptType = Encrypt.Type.UNCOMPRESSED; // Generation Type switch (mCodec.Gen) { // Unencrypted Packets case Encrypt.Generation.GEN1: case Encrypt.Generation.GEN2: return; // Zlib case Encrypt.Generation.GEN3: mCodec.Apply(Encrypt.CryptType.DECRYPT, Packet, Encrypt.Type.UNCOMPRESSED); return; // BZip2 case Encrypt.Generation.GEN4: EncryptType = Encrypt.Type.BZ2; break; // BZip2 / Zlib case Encrypt.Generation.GEN5: EncryptType = (Encrypt.Type)Packet.ReadByte(); Packet.Remove(0, 1); break; } // Decrypt Packet mCodec.Apply(Encrypt.CryptType.DECRYPT, Packet, EncryptType); // Uncompress Packet if (EncryptType == Encrypt.Type.ZLIB) Packet.ZDecompress(); else if (EncryptType == Encrypt.Type.BZ2) Packet.BDecompress(); }
/// <summary> /// Apply Encryption /// </summary> public void Apply(CryptType Crypt, CString Buffer) { // Apply the correct decryption algorithm switch (mGeneration) { // No Encryption case Generation.GEN1: case Generation.GEN2: return; // Single byte insertion/zlib compression case Generation.GEN3: mIterator[(Int32)Crypt] *= 0x8088405; mIterator[(Int32)Crypt] += mKey; Buffer.Remove((((Int32)mIterator[(Int32)Crypt] & 0x0FFFF) % Buffer.Length), 1); break; // Partial packet encryption/none, zlib, bz2 compression methods. // Gen 4 is only bz2. case Generation.GEN4: case Generation.GEN5: for (int i = 0; i < Buffer.Length; i++) { if (i % 4 == 0) { if (mLimit == 0) return; mIterator[(Int32)Crypt] *= 0x8088405; mIterator[(Int32)Crypt] += mKey; if (mLimit > 0) mLimit--; } Buffer[i] ^= (Byte)((mIterator[(Int32)Crypt] >> ((i % 4) * 8)) & 0xFF); } break; // Future Encryption Method (Graal V6) case Generation.GEN6: break; } }