public void checkoutN(byte[] buffer, int FirstLength)
        {
            int tamanho = buffer.Length;

            try
            {
                byte[] newPacketENC = new byte[tamanho - FirstLength - 4];
                Array.Copy(buffer, FirstLength + 4, newPacketENC, 0, newPacketENC.Length);
                if (newPacketENC.Length == 0)
                {
                    return;
                }

                int lengthPK = BitConverter.ToUInt16(newPacketENC, 0) & 0x7FFF;

                byte[] newPacketENC2 = new byte[lengthPK + 2];
                Array.Copy(newPacketENC, 2, newPacketENC2, 0, newPacketENC2.Length);


                byte[] newPacketGO = new byte[lengthPK + 2];

                Array.Copy(ComDiv.decrypt(newPacketENC2, Shift), 0, newPacketGO, 0, newPacketGO.Length);

                if (!CheckSeed(newPacketGO, false))
                {
                    return;
                }

                RunPacket(newPacketGO);
                checkoutN(newPacketENC, lengthPK);
            }
            catch {}
        }
Ejemplo n.º 2
0
        public void checkoutN(byte[] buffer, int FirstLength)
        {
            int length = buffer.Length;

            try
            {
                byte[] numArray1 = new byte[length - FirstLength - 4];
                Array.Copy((Array)buffer, FirstLength + 4, (Array)numArray1, 0, numArray1.Length);
                if (numArray1.Length == 0)
                {
                    return;
                }
                int    FirstLength1 = (int)BitConverter.ToUInt16(numArray1, 0) & (int)short.MaxValue;
                byte[] data         = new byte[FirstLength1 + 2];
                Array.Copy((Array)numArray1, 2, (Array)data, 0, data.Length);
                byte[] numArray2 = new byte[FirstLength1 + 2];
                Array.Copy((Array)ComDiv.decrypt(data, this.Shift), 0, (Array)numArray2, 0, numArray2.Length);
                if (!this.CheckSeed(numArray2, false))
                {
                    return;
                }
                this.RunPacket(numArray2, numArray1);
                this.checkoutN(numArray1, FirstLength1);
            }
            catch
            {
            }
        }
Ejemplo n.º 3
0
        private void OnReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state      = (StateObject)ar.AsyncState;
                int         bytesCount = state.workSocket.EndReceive(ar);
                if (bytesCount > 0)
                {
                    byte[] babyBuffer = new byte[bytesCount];
                    Array.Copy(state.buffer, 0, babyBuffer, 0, bytesCount);

                    int length = BitConverter.ToUInt16(babyBuffer, 0) & 0x7FFF;

                    byte[] buffer = new byte[length + 2];
                    Array.Copy(babyBuffer, 2, buffer, 0, buffer.Length);

                    byte[] decrypted = ComDiv.decrypt(buffer, Shift);

                    RunPacket(decrypted);
                    checkoutN(babyBuffer, length);
                    new Thread(read).Start();
                }
            }
            catch { Close(0); }
        }
Ejemplo n.º 4
0
 private void OnReceiveCallback(IAsyncResult ar)
 {
     try
     {
         GameClient.StateObject asyncState = (GameClient.StateObject)ar.AsyncState;
         int length = asyncState.workSocket.EndReceive(ar);
         if (length <= 0)
         {
             return;
         }
         byte[] buffer = new byte[length];
         Array.Copy((Array)asyncState.buffer, 0, (Array)buffer, 0, length);
         int    FirstLength = (int)BitConverter.ToUInt16(buffer, 0) & (int)short.MaxValue;
         byte[] numArray1   = new byte[FirstLength + 2];
         Array.Copy((Array)buffer, 2, (Array)numArray1, 0, numArray1.Length);
         this.lastCompleteBuffer = buffer;
         byte[] numArray2 = ComDiv.decrypt(numArray1, this.Shift);
         if (!this.CheckSeed(numArray2, true))
         {
             this.Close(0, false);
         }
         else
         {
             this.RunPacket(numArray2, numArray1);
             this.checkoutN(buffer, FirstLength);
             new Thread(new ThreadStart(this.read)).Start();
         }
     }
     catch
     {
         this.Close(0, false);
     }
 }
        private void OnReceiveCallback(IAsyncResult ar)
        {
            StateObject state = (StateObject)ar.AsyncState;

            try
            {
                int bytesCount = state.workSocket.EndReceive(ar);
                if (bytesCount < 1)
                {
                    return;
                }

                byte[] babyBuffer = new byte[bytesCount];
                Array.Copy(state.buffer, 0, babyBuffer, 0, bytesCount);

                int FirstLength = BitConverter.ToUInt16(babyBuffer, 0) & 0x7FFF;

                byte[] buffer = new byte[FirstLength + 2];
                Array.Copy(babyBuffer, 2, buffer, 0, buffer.Length);

                if (buffer.Length < 4 || buffer.Length > 200)
                {
                    SaveLog.warning(GetIPAddress() + " Pacote com tamanho suspeito [" + buffer.Length + "]");
                    Printf.warning(GetIPAddress() + " Pacote com tamanho suspeito [" + buffer.Length + "]");
                }

                byte[] decrypted = ComDiv.decrypt(buffer, Shift);

                if (!CheckSeed(decrypted, true))
                {
                    Close(true);
                }
                else
                {
                    RunPacket(decrypted);     // Joga o packet decriptado pro case e toma a ação do opcode
                    checkoutN(babyBuffer, FirstLength);
                    new Thread(read).Start(); // Reinicia a thread de leitura
                }
            }
            catch
            {
                Close(true);
            }
        }