internal void Start(ServerInfo info) { if (info != null) { var siv = new byte[4]; var riv = new byte[4]; Random.NextBytes(siv); Random.NextBytes(riv); m_clientCipher = new MapleCipher(info.Version, siv, m_aesCipher, CipherType.Encrypt); m_serverCipher = new MapleCipher(info.Version, riv, m_aesCipher, CipherType.Decrypt); using (var p = new PacketWriter(14, 16)) { p.WriteShort(info.Version); p.WriteMapleString(info.Subversion); p.WriteBytes(riv); p.WriteBytes(siv); p.WriteByte(info.Locale); SendRawPacket(p.ToArray()); } } Receive(); }
private static byte[] AuthSecond(string auth) { var data = new PacketWriter(); data.WriteUnicodeString(auth); return(AuthCipher.WriteHeader(AUTH_2, authKey2, data.ToArray())); }
private static byte[] AuthThird(string auth) { var data = new PacketWriter(); data.WriteInt(2); data.WriteUnicodeString(auth); data.WriteBytes(0x13, 0x22, 0x00, 0x02); return(AuthCipher.WriteHeader(AUTH_3, authKey3, data.ToArray())); }
private static byte[] AuthFirst(string user, string pass) { var data = new PacketWriter(); data.WriteInt(8); data.WriteUnicodeString(user); data.WriteUnicodeString(pass); data.WriteBytes(0x00, 0x00, 0x13, 0x22, 0x00, 0x02, 0x01, 0x00); data.WriteZero(10); data.WriteUnicodeString(GetRandomString(23)); // 23 Random characters (Length 46 as unicode) data.WriteInt(1); data.WriteZero(2); return(AuthCipher.WriteHeader(AUTH_1, authKey1, data.ToArray())); }
public void SendPacket(PacketWriter packet) { if (!m_connected) { throw new InvalidOperationException("Socket is not connected"); } if (!m_encrypted) { throw new InvalidOperationException("Handshake has not been received yet"); } byte[] data = packet.ToArray(); if (data.Length < 2) { throw new ArgumentOutOfRangeException("Packet length must be greater than 2", "packet"); } const int HeaderSize = 4; lock (m_sendLock) { byte[] final = new byte[data.Length + HeaderSize]; switch (m_sessionType) { case SessionType.Client: m_clientCipher.GetHeaderToServer(data.Length, final); break; case SessionType.Server: m_clientCipher.GetHeaderToClient(data.Length, final); break; } m_clientCipher.Transform(data); Buffer.BlockCopy(data, 0, final, HeaderSize, data.Length); SendRawPacket(final); } }
internal void Start(ServerInfo info) { m_serverCipher = new MapleCipher(info.Version, info.Riv, m_aesCipher, CipherType.Decrypt); m_clientCipher = new MapleCipher(info.Version, info.Siv, m_aesCipher, CipherType.Encrypt); PacketWriter pw = new PacketWriter(15, 17); pw.WriteShort(info.Version); pw.WriteMapleString(info.Subversion); pw.WriteBytes(info.Riv); pw.WriteBytes(info.Siv); pw.WriteShort(info.Locale); SendRawPacket(pw.ToArray()); Receive(); Debug.WriteLine("Started local server (toClient)"); }
internal void Start(ServerInfo info) { if (info != null) { byte[] siv = new byte[4]; byte[] riv = new byte[4]; var rng = new Random(Interlocked.Increment(ref rngSeed)); rng.NextBytes(siv); rng.NextBytes(riv); clientCipher = new MapleCipher(info.Version, siv, aesCipher); serverCipher = new MapleCipher(info.Version, riv, aesCipher); var p = new PacketWriter(14, 16); p.WriteShort(info.Version); p.WriteMapleString(info.Subversion); p.WriteBytes(riv); p.WriteBytes(siv); p.WriteByte(info.Locale); SendRawPacket(p.ToArray()); } Receive(); }
public void SendPacket(PacketWriter packet) { SendPacket(packet.ToArray()); }