/* OLD LOGIN METHOD * public void checkValidNexonCookie() * { * if (nexonCookie == string.Empty || getNexonCookieTimeout() == 0) * { * nexonCookie = string.Empty; * nexonCookieTimeout = DateTime.Now.AddSeconds(120); * updateLog("[Auth] Grabbing nexon auth..."); * nexonCookie = getNexonCookie(LoginID, Password); * if (nexonCookie == string.Empty) * { * if (Program.usingProxy) * { * authFailures++; * if (authFailures < 4) * { * updateLog("[Auth] Failed to get auth, restarting."); * forceDisconnect(true, 1, false, "Auth: General failure"); * } * else if (authFailures >= 4 && authFailures < 6) * { * proxyServer = ""; * Program.iniFile.WriteValue(accountProfile, "AccProxy", ""); * updateLog("[Auth] Failed to get auth 8 times. Disconnecting."); * forceDisconnect(false, 1, false, "Failed to get auth 8 times"); * } * else * { * proxyServer = ""; * Program.iniFile.WriteValue(accountProfile, "AccProxy", ""); * updateLog("[Auth] Failed to get auth 3 times, restarting with different proxy."); * forceDisconnect(true, 1, false, "Auth: Restarting with different proxy"); * } * * } * else * { * updateLog("[Auth] Failed to get auth, restarting in " + Program.nexonAuthRestartTime.ToString() + " secs"); * forceDisconnect(true, Program.nexonAuthRestartTime, false, "Auth: General failure"); * } * } * updateLog("[Auth] Nexon Auth grabbed"); * return; * } * return; * } * ----END OLD LOGIN*/ private void ses_OnInitPacketHandler(object sender, HandshakeEventArgs e) { try { Thread t = new Thread(delegate() { updateLog("[Connection] Established at: " + connector.ip + ":" + connector.port); //if (clientMode == ClientMode.DISCONNECTED) if (connector.ip == Program.serverip & connector.port == Program.port) { sw.Reset(); sw.Start(); clientMode = ClientMode.LOGIN; pictureBoxChange(); Program.mapleVersion = (short)e.Version; ses.SendPacket(PacketHandler.ValidateLogin(e.Locale, e.Version, e.Subversion).ToArray()); /* OLD LOGIN METHOD * Thread th = null; * if (nexonCookie == string.Empty || getNexonCookieTimeout() == 0) * { * th = new Thread(() => checkValidNexonCookie()); * workerThreads.Add(th); * th.Start(); * } * if (th != null) * th.Join(); */ nexonCookie = string.Empty; nexonCookie = getNexonCookie(LoginID, Password); while (nexonCookie == string.Empty) { Thread.Sleep(1); } if (nexonCookie != null || nexonCookie != string.Empty || nexonCookie != "Error" || nexonCookie != "Invalid" || nexonCookie != "Incorrect") { /* * while (clientMode == ClientMode.LOGIN) * { * if (checkWorldStatus()) * break; * else * updateLog("[Status] Checking world server status"); * Thread.Sleep(1); * } */ if (!Program.webLogin) { ses.SendPacket(PacketHandler.ClientLogin(this, nexonCookie, Password).ToArray()); } else { ses.SendPacket(PacketHandler.LoginResponse(this, nexonCookie, world, channel, Password).ToArray()); } mapleVersion = string.Concat("MapleStory v", e.Version.ToString(), ".", e.Subversion.ToString()); updateLog("[Version] " + mapleVersion); updateAccountStatus("Logged in"); Thread loginCheckThread = new Thread(delegate() { DateTime startCheck = DateTime.Now; while (!loginCheck) { if ((DateTime.Now - startCheck).TotalSeconds > 10) { updateLog("[Login] No login response! Restarting!"); forceDisconnect(true, 0, false, "No login Response"); return; } Thread.Sleep(1); } return; }); workerThreads.Add(loginCheckThread); loginCheckThread.Start(); } else { string x = string.Empty; if (nexonCookie == "Error") { x = "Auth Error"; } if (nexonCookie == "Invalid") { x = "Invalid Response;"; } if (nexonCookie == "Incorrect") { x = "Incorrect Info"; } updateLog("[Nexon Auth] Failed to retrieve auth."); updateLog("[Nexon Auth] " + x); forceDisconnect(true, 1, false, "Failed to retrieve auth."); } } else { if (!remoteHackPacket) { ses.SendPacket(PacketHandler.EnterChannel(myCharacter.uid, RAND1, RAND2, cauth, worldID).ToArray()); //Thread.Sleep(1000); //ses.SendPacket(PacketHandler.Custom("2F 01 01").ToArray()); } else { remoteHackPacket = false; } } }); workerThreads.Add(t); t.Start(); } catch { updateLog("[Error] Debug Error 0"); } }
private void HandleData(RecBuffer pBuffer) { if (pBuffer.IsHeader) { byte[] headerData = pBuffer.Data; int packetSize = pBuffer.IsEncrypted ? MapleCrypt.GetPacketLength(headerData) : BitConverter.ToInt16(headerData, 0); pBuffer.Reset(false, packetSize); ReceivePacket(pBuffer); } else { if (pBuffer.IsEncrypted) { byte[] packetData = pBuffer.Data; lock (_recvAES) { _recvAES.Transform(packetData); } if (Program.usingMapleCrypto) { MapleCustom.Decrypt(packetData); } if (OnPacketRecvHandler != null) { PacketEventArgs eventArgs = new PacketEventArgs(packetData); OnPacketRecvHandler(this, eventArgs); } pBuffer.Reset(true, 4); ReceivePacket(pBuffer); } else { using (PacketReader pPacket = new PacketReader(pBuffer.Data)) { ushort Version = pPacket.ReadUShort(); string Subversion = pPacket.ReadString(); byte[] SIV = pPacket.ReadBytes(4); byte[] RIV = pPacket.ReadBytes(4); _sendAES = new MapleCrypt(Version, SIV, false); _recvAES = new MapleCrypt(Version, RIV, false); byte Locale = pPacket.Read(); if (OnHandshakeHandler != null) { HandshakeEventArgs eventArgs = new HandshakeEventArgs(Version, Subversion, SIV, RIV, Locale); OnHandshakeHandler(this, eventArgs); } pBuffer.Dispose(); WaitForPacket(); } } } }
private void MessageParserOnHandshakeCompleted(object sender, HandshakeEventArgs e) { logger.LogVerbose($"Send handshake reply."); messageSender.SendHandshakeReply(e.Success); }