Exemplo n.º 1
0
        /* 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");
            }
        }
Exemplo n.º 2
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();
                    }
                }
            }
        }
Exemplo n.º 3
0
 private void MessageParserOnHandshakeCompleted(object sender, HandshakeEventArgs e)
 {
     logger.LogVerbose($"Send handshake reply.");
     messageSender.SendHandshakeReply(e.Success);
 }