Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Nolohagan en 6 Abril 2017, 11:29 am



Título: Analisis de Sb0t 5.38
Publicado por: Nolohagan en 6 Abril 2017, 11:29 am
Hola,

estaba interesado en un determinado aumento y me gustario decir de que se trata ya que con "determinado aumento" nadie entendera nada.

Bueno para eso quisieres mostrarle un pedazo de codigo de Sb0t 5.38:

El pedazo es demasiado largo asi que se los mostrare desde una pagina web:

https://github.com/AresChat/sb0t/blob/v5.38/core/AresClient.cs

Bueno concentremonos en el metodo de desconeccion que vendira siendo el proceso de ban:

Código
  1. public void Disconnect(bool ghost)
  2.        {
  3.            while (this.data_out.Count > 0)
  4.            {
  5.                try
  6.                {
  7.                    byte[] packet;
  8.  
  9.                    if (this.data_out.TryPeek(out packet))
  10.                    {
  11.                        this.Sock.Send(packet);
  12.                        Stats.DataSent += (ulong)packet.Length;
  13.  
  14.                        while (!this.data_out.TryDequeue(out packet))
  15.                            continue;
  16.                    }
  17.                    else break;
  18.                }
  19.                catch { break; }
  20.            }
  21.  
  22.            try { this.Sock.Disconnect(false); }
  23.            catch { }
  24.            try { this.Sock.Shutdown(SocketShutdown.Both); }
  25.            catch { }
  26.            try { this.Sock.Close(); }
  27.            catch { }
  28.            try { this.Sock.Dispose(); }
  29.            catch { }
  30.  
  31.            this.SocketConnected = false;
  32.  
  33.            if (!ghost)
  34.                this.SendDepart();
  35.            else if (this.LoggedIn && !this.Quarantined)
  36.            {
  37.                this.LoggedIn = false;
  38.                Events.Parting(this);
  39.  
  40.                if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
  41.                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafPart(ServerCore.Linker, this));
  42.  
  43.                Events.Parted(this);
  44.            }
  45.  
  46.            this.LoggedIn = false;
  47.        }
  48.  

Y es este aumento:

while (this.data_out.Count > 0)

el data_out.Count el que me interesa. Porque el unico metodo en el que se puede ver un aumento(porque sino siempre tiene menos) es este:

Código:
public void SendPacket(byte[] packet)
        {
            this.data_out.Enqueue(packet);
        }

Y en este metodo SendPacket..... que es lo que se hace para que se aumente el dato_out?


Gracias y saludos


Título: Re: Analisis de Sb0t 5.38
Publicado por: MCKSys Argentina en 6 Abril 2017, 14:48 pm
Creo que debes analizar el tipo d variable que es this.data_out antes que nada.

Según el link que pusiste:

Código
  1. private ConcurrentQueue<byte[]> data_out = new ConcurrentQueue<byte[]>();

Entonces, debes analizar la clase ConcurrentQueue: https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx (https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx)

De ahí seguro evacúas tus preguntas.

Saludos!


Título: Re: Analisis de Sb0t 5.38
Publicado por: Nolohagan en 6 Abril 2017, 16:48 pm


Entonces, debes analizar la clase ConcurrentQueue: https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx (https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx)


oh dios mio, porque no puedo suicidar?

Viste que largo es el articulo?

Tengo que aprender todos los metodos, propiedades, implemenos interfaces, constructores de ConcurrentQueue(T). Tu te las sabes todas?



Título: Re: Analisis de Sb0t 5.38
Publicado por: MCKSys Argentina en 6 Abril 2017, 17:10 pm
Tu te las sabes todas?

No. En mi caso trato de aprender lo que hace la clase en gral. y los metodos/propiedades que necesito.

Para eso, debes leer la documentación...

Saludos!


Título: Re: Analisis de Sb0t 5.38
Publicado por: Nolohagan en 6 Abril 2017, 17:24 pm
Ok,

listo. Ahora ya analize el tipo de variable. Sigamos por favor.

En el metodo SendPacket..... que es lo que se hace para que se aumente el dato_out?

Gracias hermano


Título: Re: Analisis de Sb0t 5.38
Publicado por: MCKSys Argentina en 6 Abril 2017, 17:34 pm
Ok,

listo. Ahora ya analize el tipo de variable. Sigamos por favor.

En el metodo SendPacket..... que es lo que se hace para que se aumente el dato_out?

Gracias hermano

Lee la documentación:

Código
  1. public void SendPacket(byte[] packet)
  2.        {
  3.            this.data_out.Enqueue(packet);
  4. }

Citar
System_CAPS_pubmethod   Enqueue(T)   

Adds an object to the end of the ConcurrentQueue<T>.

Info del método: https://msdn.microsoft.com/en-us/library/dd287262(v=vs.110).aspx (https://msdn.microsoft.com/en-us/library/dd287262(v=vs.110).aspx)

Saludos!


Título: Re: Analisis de Sb0t 5.38
Publicado por: Nolohagan en 6 Abril 2017, 17:59 pm
Si ya se eso.

Lo que yo queria saber es que hace que la cantidad crezca. El metodo se llama SendPacket osea cada vez que el servidor envie paquetes al cliente creze la cantidad o que?

Gracias


Título: Re: Analisis de Sb0t 5.38
Publicado por: MCKSys Argentina en 6 Abril 2017, 18:06 pm
Si ya se eso.

Lo que yo queria saber es que hace que la cantidad crezca. El metodo se llama SendPacket osea cada vez que el servidor envie paquetes al cliente creze la cantidad o que?

Gracias

Mira el ejemplo de la documentación de la clase (el link que te dí al principio). Está al final de todo. Con eso deberías entender cómo funciona la cosa.

Saludos!


Título: Re: Analisis de Sb0t 5.38
Publicado por: Eleкtro en 6 Abril 2017, 18:12 pm
El compañero @MCKSys Argentina ya te lo ha dicho todo. data_out es un objeto de tipo cola (Queue), algo parecido a la representación abstracta de una pila (Stack) en .NET, cuando se añade un elemento a la cola, la propiedad Count del objeto aumenta, evidéntemente.

en este metodo SendPacket..... que es lo que se hace para que se aumente el dato_out?

Se añade un nuevo elemento ( byte[] ) al final de la cola, por ende, la cola (data_out) aumenta.

Código
  1. while (this.data_out.Count > 0)

Esa instrucción viene a decir: "Mientras exista algún elemento en la cola..."

PD: ¿Es esto lo que preguntabas?.

¡Saludos!


Título: Re: Analisis de Sb0t 5.38
Publicado por: Nolohagan en 6 Abril 2017, 18:38 pm
Hola,

no. En realidad esa era la parte que ya sabia. Entras palabras:

Ustedes vieren que mientras data_out no este en 0 no se podra dsconectar a un usuario y de este modo banearlo.

Entonces.... que tiene que hacer el servidor o el cliente para que data_out no quede en 0? Enviar paquetes.

Ya sa que la respuesta es: el servidor tiene que aumentar data_out. Pero de que manera?

Gracias :)