Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Noporfavor

#41
Hola,
En el NetBus 1.7 esta el patch.exe.
Aqui les dejo el analisis por los antivirus: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Hay gente que lograron hacerlo indetectable por muchos antivirus. Pero como?
Camuflandolo con una imagen? Usando Crypters y Binders?

Como lo puedo hacer yo?

Gracias y saludos
#42
Hola rollth,
claro! Por supuesto! Es mi naturaleza ser una basura de tal indole como perfectamente describes. Y se te cansa o crees que no merezco ayuda pues baneame.

Hallo Stiuvert,

tuve problemas al abrir puertos:
Me fui a la pagina del router,
Me fui a avanzado,
Luego a PORT-TRIGGER,
Y ahi en TRIGGER PORT RANGE puse: 5000-5000; y en Destino TRIGGER RANGE puse: 5000-5000; y en Protocolo puse: TCP/UDP. Y luego le di a guardar.

Pero los puertos no se abrieron.

Creo porque tengo IPv6. Los puertos solo se pueden abrir en IPv4. Verdad?

Gracias y saludos
       
#43
Hola blackdrake,
todos los troyanos RAT son de conexion inversa.
Lo que yo buscaba era solo valerme de una .exe o un .batch sin instalar nada y que en mi computadora atacante pueda mandar datos a esa .exe y que esa .exe me de todos los directorios y archivos de la computadora victima y que me permita borrar archivo y agregar archivos y ver los procesos.

Gracias y saludos
#44
Hola rollth,

eso solo funciona si mi computadora victima tiene instalado ncat. Lo que yo buscaba era solo valerme de una .exe o un .batch sin instalar nada y que en mi computadora atacante pueda mandar datos a esa .exe y que esa .exe me de todos los directorios y archivos de la computadora victima y que me permita borrar archivo y agregar archivos y ver los procesos.

Gracias y saludos
#45
Hola selohu,
No. Quiza me exprese mal.
Lo que queria decir es que con un troyano de conexion directa no puedes hackear mas una computadora porque lo detecta el firewall.
En cuanto a un troyano tipo backdoor.... el firewall no lo detecta pero quiza el antivirus........
#46
Análisis y desarrollo de malwares / Re:Sub7 0.11 (Publico)
Septiembre 27, 2016, 08:05:09 AM
Hola ANTRAX,

el link se cayo.

Saludos
#47
Hola rollth,
que es nc?

Hola Hu3c0,

1) Radmin, como tu dices, es detectado por el firewall. Yo queria ver algo que no sea detectado por el firewall, osea algo asi como un bypass.
2) En mi otra computadora yo solo queria probrar un troyano tipo backdoor, asi como NetBus 1.7. Osea dos programas. El uno me lo copio a mi otra computadora victima y el otro lo tengo en mi computadora atacante, desde la cual pueda borrar archivos, agregar archivos, poder terminar los procesos que estan andando en la computadora victima.

Hola selohu,

Eicar, creo yo, es una prueba para ver si el antivirus detecta una hoja de block con extension .com en la cual esta escrito un codigo?

Gracias a todos y saludos
#48
Ahh gracias,
y ya que estas dejame preguntarte:
Que te parece NetBus 1.7?

Gracias y saludos
#49
Hola,

Virus hay muchos. Pero me podrian recomdar uno que pueda probar en mi otra computadora. Osea un virus cliente en la computadora victima que reciba ordenes del virus que da comandos. Alguna recomendacion?

Gracias y saludos
#50
Hola fudmario,
veamos

Citar
Lo primero es que entre las preguntas que pusiste; sobre el método "AddRange" , tranquilamente podrias haberlo resuelto si hubiese buscado en la MSDN, incluso ahi mismo dispones de ejemplos de uso y/o aplicación.

Si. Y eso fue lo que hice. El problema es que primero hice la pregunta y despues, solo, encontre la respuesta. Porque? Porque no sabia que iba a encontrarla porque me creia bastante incompetente, como tu mismo puedes apreciar en la modificacion que hice.

Citar
Tan solo con leer el error que genera te hubieses dado de cuenta de que se trata.

No tuve problemas de entender de que trata File.Move. El problema era para mi Socket.Send. No sabia que solo aceptaba vectores de tipo byte.

Citar
Espero que no te lo tomes a mal, pero si quieres aprender a programar tienes que leer, leer y re-leer....
Tienes que investigar por ti mismo y practicar desarrollando proyectos sencillos, para que comprendas como funciona...

Claro que no me lo tomare mal. Yo investigo. Pero por la falta de experiencia me cuesta mucho entender definiciones que parecen cientificas.

Gracias y saludos
#51
Hola grep,
como bien escribiste, no se puede pasar directamente archivos en ares(solamente imagenes). Tienes razon: quiza no entienda la idea de un protocolo. (Creo que la idea es poner reglas para evitar el envio de paquetes daninos). Y no entiendo como funciona un servidor (porque no me puse a analizar mucho el codigo fuente de Sb0t).

Como tu escribes, el servir impone reglas y no puedo inventar un protocolo y esperar a que el server procese satisfactoriamente tu mensaje.
Pero.. que te impide ayudarme?

Ahhhh ya se. Es un malentendido causado por expresarme mal.

Veamos:

Citar
El server es un programa, y como tal es estructurado e impone sus reglas. No puedes inventar un protocolo (aunque a veces te puedes valer de su diseño y/o forzar o quebrantar la implementación de algunos) y esperar a que el server procese satisfactoriamente tu mensaje.

Ya lo se y por eso no espero que el server haga es por mi.
Es por eso que mi objetivo apunta a guardar un archivo en el directorio de la computadora en donde esta Sb0t antes de que me ignore el envio.

Y para que veas que mejore mi codigo, mira:

Código: text

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.InteropServices;

namespace Bot_client_ares_ejemplo_Source
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //
        public Socket Socket;
        public System.Net.Sockets.NetworkStream Stream;
        public string sourceFile = @"C:\Program Files\Ares\Ares.exe";
        public string destinationFile = @"C:\Users\Public\private\Ares.exe";
        //
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //
       
        //
        public byte[] MSG_CHAT_CLIENT_LOGIN()
        {
            //Aclaracion Este codigo es de mi autoridad 100% - ҳ√~м-[λ]-u-яí


            List<byte> buffer = new List<byte>();
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            2,//id 2
            });
            buffer.AddRange(Guid.NewGuid().ToByteArray()); //guid 16 bytes
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(666))); //Numero de archivos
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(5555))); //puerto DC
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,0,0,0,//Nodos ip. 4bytes
            0,0,//Nodos puerto 2 bytes
            0,0,0,0,//4bytes Null.
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Nick"));//Nick x bytes
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("?"));//cliente version xbyte
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,//1byte Null.
            127,0,0,1,//Local IpAdress 4 bytes
            6,6,6,6,//External IpAdress Null. 4bytes
            0,//client features 1 byte
            0,//current upload 1byte
            0,//maximum uploads allowed 1byte
            0,//current queued users
            20,1,69,//User años 1byte, User sexo 1byte, User country 1byte

            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Ares"));//User location xbyte
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.InsertRange(0, BitConverter.GetBytes(Convert.ToInt16(buffer.Count - 1)));
            return buffer.ToArray();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConectarB0t(System.Net.IPAddress.Parse("185.61.138.205"), 54321);
        }

        //
        public void ConectarB0t(IPAddress ip, int puerto)
        {
            Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            label1.Text = " Conectando, por favor espera..." + Environment.NewLine;

            try
            {
                Socket.Connect(new IPEndPoint(ip, Convert.ToInt32(puerto)));
            }
            catch (Exception ex)
            {

            }
            if (Socket.Connected == true)
            {
                label1.Text = "Conectando, iniciando protocolo...." + Environment.NewLine;

                Socket.Send(MSG_CHAT_CLIENT_LOGIN());

                label1.Text = "Conectando, Login Aceptado...." + Environment.NewLine;
            }
            else
            {


            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Socket.Disconnect(false);
            //
            label1.Text = "Desconectado";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Socket.Send(File.Move(sourceFile, destinationFile));
        }
    }
}


Pero porque me larga el error "canot convert from "void" to "byte[]"?
Si sourceFile y destinationFile no son de tipo byte.

Gracias y saludos
#52
Hola grep,
Como tu escribes, esto tiene que ver con el protocolo. Y yo que me había olvidado de eso. Me lo pondré a analizarlo.

Pero antes,
Me pueden corrigen este código que yo edite. Se que esta muy mal hecho y que ni siquiera va a lo que quiero sino que solo da el nombre del archivo.
Lo que yo quería hacer es enviar un archivo .exe

Código: text

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.InteropServices;
using System.Reflection.Assembly
namespace Bot_client_ares_ejemplo_Source
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //
        public Socket Socket;
        public System.Net.Sockets.NetworkStream Stream;
        DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
        //
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //
       
        //
        public byte[] MSG_CHAT_CLIENT_LOGIN()
        {
            //Aclaracion Este codigo es de mi autoridad 100% - ҳ√~м-[λ]-u-яí


            List<byte> buffer = new List<byte>();
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            2,//id 2
            });
            buffer.AddRange(Guid.NewGuid().ToByteArray()); //guid 16 bytes
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(666))); //Numero de archivos
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(5555))); //puerto DC
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,0,0,0,//Nodos ip. 4bytes
            0,0,//Nodos puerto 2 bytes
            0,0,0,0,//4bytes Null.
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Nick"));//Nick x bytes
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("?"));//cliente version xbyte
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,//1byte Null.
            127,0,0,1,//Local IpAdress 4 bytes
            6,6,6,6,//External IpAdress Null. 4bytes
            0,//client features 1 byte
            0,//current upload 1byte
            0,//maximum uploads allowed 1byte
            0,//current queued users
            20,1,69,//User años 1byte, User sexo 1byte, User country 1byte

            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Ares"));//User location xbyte
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(FileInfo[] subFiles = di.GetFiles("*ejecutable que quiero enviar*");
            buffer.InsertRange(0, BitConverter.GetBytes(Convert.ToInt16(buffer.Count - 1)));
            return buffer.ToArray();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConectarB0t(System.Net.IPAddress.Parse("189.30.166.175"), 5000);
        }

        //
        public void ConectarB0t(IPAddress ip, int puerto)
        {
            Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            label1.Text = " Conectando, por favor espera..." + Environment.NewLine;

            try
            {
                Socket.Connect(new IPEndPoint(ip, Convert.ToInt32(puerto)));
            }
            catch (Exception ex)
            {

            }
            if (Socket.Connected == true)
            {
                label1.Text = "Conectando, iniciando protocolo...." + Environment.NewLine;

                Socket.Send(MSG_CHAT_CLIENT_LOGIN());

                label1.Text = "Conectando, Login Aceptado...." + Environment.NewLine;
            }
            else
            {


            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Socket.Disconnect(false);
            //
            label1.Text = "Desconectado";
        }
    }
}
#53
Ahhh vale. Entiendo. Pero ahora que sentido tiene esto?
   buffer.AddRange(new byte[] {
            0,//Null 1byte
            });

Déjenme saber si lo entendí bien: al final de la lista se crea un vector que contiene un elemento, a saber, 0? Si lo entendí bien, entonces con que propósito?

Y otra cosa: Puedo agregar un archivo .exe a la lista? Como?

Gracias y saludos
#54
Hola,

antes de la preguntas, el codigo:

Código: text

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Runtime.InteropServices;

namespace Bot_client_ares_ejemplo_Source
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //
        public Socket Socket;
        public System.Net.Sockets.NetworkStream Stream;
        //
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //
       
        //
        public byte[] MSG_CHAT_CLIENT_LOGIN()
        {
            //Aclaracion Este codigo es de mi autoridad 100% - ҳ√~м-[λ]-u-яí


            List<byte> buffer = new List<byte>();
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            2,//id 2
            });
            buffer.AddRange(Guid.NewGuid().ToByteArray()); //guid 16 bytes
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(666))); //Numero de archivos
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(BitConverter.GetBytes(Convert.ToInt16(5555))); //puerto DC
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,0,0,0,//Nodos ip. 4bytes
            0,0,//Nodos puerto 2 bytes
            0,0,0,0,//4bytes Null.
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Nick"));//Nick x bytes
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.AddRange(Encoding.UTF8.GetBytes("?"));//cliente version xbyte
            buffer.AddRange(new byte[] {//nueva cadena de bytes
            0,//1byte Null.
            127,0,0,1,//Local IpAdress 4 bytes
            6,6,6,6,//External IpAdress Null. 4bytes
            0,//client features 1 byte
            0,//current upload 1byte
            0,//maximum uploads allowed 1byte
            0,//current queued users
            20,1,69,//User años 1byte, User sexo 1byte, User country 1byte

            });
            buffer.AddRange(Encoding.UTF8.GetBytes("Ares"));//User location xbyte
            buffer.AddRange(new byte[] {
            0,//Null 1byte
            });
            buffer.InsertRange(0, BitConverter.GetBytes(Convert.ToInt16(buffer.Count - 1)));
            return buffer.ToArray();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConectarB0t(System.Net.IPAddress.Parse("185.61.138.205"), 54321);
        }

        //
        public void ConectarB0t(IPAddress ip, int puerto)
        {
            Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            label1.Text = " Conectando, por favor espera..." + Environment.NewLine;

            try
            {
                Socket.Connect(new IPEndPoint(ip, Convert.ToInt32(puerto)));
            }
            catch (Exception ex)
            {

            }
            if (Socket.Connected == true)
            {
                label1.Text = "Conectando, iniciando protocolo...." + Environment.NewLine;

                Socket.Send(MSG_CHAT_CLIENT_LOGIN());

                label1.Text = "Conectando, Login Aceptado...." + Environment.NewLine;
            }
            else
            {


            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Socket.Disconnect(false);
            //
            label1.Text = "Desconectado";
        }
    }
}


Queria analiza con vosotros la linea 55:

buffer.AddRange(Encoding.UTF8.GetBytes("Nick"));//Nick x bytes

Dejenme saber si lo entendi bien:
Se codifica Nick osea se abstrae para construir un mayor entendimiento de las fuerzas que intervienen?

O alguien me puede ayudar, si lo entendi mal, a entender la linea 55 en palabras que un aprendiz pueda entender?

Gracias y saludos
#55
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 21, 2016, 06:34:04 AM
Ahhh vale grep. Esto esta muy complicado. Pero todavia se puede entender. Asi lo veo yo. Esta muy complicado esta clase para mi porque es referenciada y referencia a otras clases mediante la herencia.

Gracias
#56
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 20, 2016, 01:39:05 PM
Ahhh, que tonto yo!
Lo tuve que saberlo. Pasa que hasta ahora el this solo lo ocupe para acceder a atributos.

Y en la parte del set, que significa value = ? 0 : 10

#57
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 20, 2016, 11:21:13 AM
Ahhh vale. Ya sospechaba de que se trataba de un almacenamiento vacío. Aunque creí que esto solo funcionaba en enumeraciones en donde antecedemos la palabra clave enum. Pero no importa. Agradezco sus colaboraciones.
Este código,  es muy difícil para mi. No se como lo ven ustedes. Por eso la siguiente pregunta con su respectivo analisis:

Analicemos la línea 393:

if (this.SocketConnected && Helpers.NameAvailable(this, value))

Yo creí que la palabra clave this solo accede a atributos y métodos. Pero porque hay un if quizá retorne un verdadero o falso.

Pero que función cumple acá el this.SocketConnected?

Gracias y saludos
#58
Hola a todos,
Como siempre, antes de las preguntas mostraré el código.
Sb0t 5.31/core/AresClient.cs:

Código: text

using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using iconnect;

namespace core
{
    class AresClient : IClient, IUser, IQuarantined
    {
        public uint LastScribble { get; set; }
        public bool Ares { get; set; }
        public bool IsCbot { get; set; }
        public ushort ID { get; private set; }
        public IPAddress ExternalIP { get; set; }
        public String DNS { get; set; }
        public bool LoggedIn { get; set; }
        public ulong Time { get; set; }
        public Guid Guid { get; set; }
        public ushort FileCount { get; set; }
        public ushort DataPort { get; set; }
        public IPAddress NodeIP { get; set; }
        public ushort NodePort { get; set; }
        public String OrgName { get; set; }
        public String Version { get; set; }
        public IPAddress LocalIP { get; set; }
        public bool Browsable { get; set; }
        public byte CurrentUploads { get; set; }
        public byte MaxUploads { get; set; }
        public byte CurrentQueued { get; set; }
        public byte Age { get; set; }
        public byte Sex { get; set; }
        public byte Country { get; set; }
        public String Region { get; set; }
        public Encryption Encryption { get; set; }
        public bool FastPing { get; set; }
        public bool Ghosting { get; set; }
        public uint Cookie { get; set; }
        public List IgnoreList { get; set; }
        public bool CustomClient { get; set; }
        public List SharedFiles { get; set; }
        public List CustomClientTags { get; set; }
        public bool VoiceChatPublic { get; set; }
        public bool VoiceChatPrivate { get; set; }
        public bool VoiceOpusChatPublic { get; set; }
        public bool VoiceOpusChatPrivate { get; set; }
        public List VoiceChatIgnoreList { get; set; }
        public bool WebClient { get; private set; }
        public bool Owner { get; set; }
        public bool IsHTML { get; private set; }
        public bool Captcha { get; set; }
        public String CaptchaWord { get; set; }
        public byte[] OrgAvatar { get; set; }
        public uint JoinTime { get; private set; }
        public ulong IdleStart { get; set; }
        public bool Quarantined { get; set; }
        public bool IsLeaf { get; set; }
        public ILink Link { get { return new UserLinkCredentials(); } }
        public byte[] Password { get; set; }
        public bool SupportsHTML { get; set; }
        public bool IsWebWorker { get; set; }
        public IPEndPoint LocalEP { get; set; }

        public bool BlockCustomNames { get; set; }

        public IFont Font { get; set; }

        public Socket Sock { get; set; }
        public IPAddress SocketAddr { get; set; }
        public bool HasSecureLoginAttempted { get; set; }
        public FloodRecord FloodRecord { get; private set; }
        public bool AvatarReceived { get; set; }
        public ulong AvatarTimeout { get; set; }
        public bool DefaultAvatar { get; set; }

        private List data_in = new List();
        private ConcurrentQueue data_out = new ConcurrentQueue();
        private int socket_health = 0;
        private byte[] avatar = new byte[] { };
        private String personal_message = String.Empty;
        private ILevel _level = ILevel.Regular;
        private String _name=String%2EEmpty%3B
        private ushort _vroom = 0;
        private bool _cloaked = false;
        private String _customname=String%2EEmpty%3B

        public UserScribbleRoomObject ScribbleRoomObject = new UserScribbleRoomObject();

        public AresClient(Socket sock, ulong time, ushort id)
        {
            this.OrgAvatar = new byte[] { };
            this.ID = id;
            this.Sock = sock;
            this.Sock.Blocking = false;
            this.Time = time;
            this.SocketAddr = ((IPEndPoint)this.Sock.RemoteEndPoint).Address;
            this.ExternalIP = ((IPEndPoint)this.Sock.RemoteEndPoint).Address;
            this.LocalEP = (IPEndPoint)this.Sock.LocalEndPoint;
            this.Cookie = AccountManager.NextCookie;
            this.Encryption = new core.Encryption { Mode = EncryptionMode.Unencrypted };
            this.Version = String.Empty;
            this.IgnoreList = new List();
            this.SharedFiles = new List();
            this.CustomClientTags = new List();
            this.VoiceChatIgnoreList = new List();
            this.CaptchaWord = String.Empty;
            this.Captcha = !Settings.Get("captcha");
            this.JoinTime = Helpers.UnixTime;
            this.FloodRecord = new core.FloodRecord();
            this.AvatarTimeout = time;
            this.Font = new AresFont();
            Dns.BeginGetHostEntry(this.ExternalIP, new AsyncCallback(this.DnsReceived), null);
           // this.DNS = "unknown";
        }

        public void SendHTML(String text)
        {
            if (this.SupportsHTML)
                this.SendPacket(TCPOutbound.HTML(text));
        }

        public void Release()
        {
            this.Unquarantine();
        }

        public void SetLevel(ILevel level)
        {
            if (!this.LoggedIn)
                return;

            this.Registered = true;

            if (this.Quarantined)
                this.Unquarantine();

            this.Captcha = true;
            this.Level = level;
        }

        public void Scribble(String sender, byte[] img, int height)
        {
            List b = new List(img);

            if (b.Count  4000)
                {
                    p.Add(b.GetRange(0, 4000).ToArray());
                    b.RemoveRange(0, 4000);
                }

                if (b.Count > 0)
                    p.Add(b.ToArray());

                for (int i = 0; i < p.Count; i++)
                {
                    if (i == 0)
                        this.SendPacket(TCPOutbound.CustomData(this, sender, "cb0t_scribble_first", p[i]));
                    else if (i == (p.Count - 1))
                        this.SendPacket(TCPOutbound.CustomData(this, sender, "cb0t_scribble_last", p[i]));
                    else
                        this.SendPacket(TCPOutbound.CustomData(this, sender, "cb0t_scribble_chunk", p[i]));
                }
            }
        }

        public void Nudge(String sender)
        {
            byte[] buf = Encoding.UTF8.GetBytes("0" + sender);
            buf = Crypto.e67(buf, 1488);
            buf = Encoding.Default.GetBytes(Convert.ToBase64String(buf));
            this.SendPacket(TCPOutbound.CustomData(this, sender, "cb0t_nudge", buf));
        }

        private bool _muzzled;
        public bool Muzzled
        {
            get { return this._muzzled; }
            set
            {
                this._muzzled = value;

                if (ServerCore.Linker.Busy && this.LoggedIn && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafUserUpdated(ServerCore.Linker, this));
            }
        }

        private bool _registered;
        public bool Registered
        {
            get { return this._registered; }
            set
            {
                this._registered = value;

                if (ServerCore.Linker.Busy && this.LoggedIn && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafUserUpdated(ServerCore.Linker, this));
            }
        }

        private bool _idled;
        public bool Idled
        {
            get { return this._idled; }
            set
            {
                this._idled = value;

                if (ServerCore.Linker.Busy && this.LoggedIn && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafUserUpdated(ServerCore.Linker, this));
            }
        }

        public bool Idle { get { return this.Idled; } }

        public void Unquarantine()
        {
            this.LoggedIn = false;
            this.Quarantined = false;

            if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafJoin(ServerCore.Linker, this));

            Helpers.FakeRejoinSequence(this, true);
        }

        public String CustomName
        {
            get
            {
                if (!Settings.Get("customnames"))
                    return String.Empty;

                return this._customname;
            }
            set
            {
                this._customname=value == null ? String.Empty : value;

                if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafCustomName(ServerCore.Linker, this));
            }
        }

        public void Ban()
        {
            if (!this.Owner)
                BanSystem.AddBan(this);

            this.Disconnect();
        }

        public void PM(String sender, String text)
        {
            int len = Encoding.UTF8.GetByteCount(sender);

            if (len >= 2 && len  0 && len  0)
                    if (!this.data_out.TryDequeue(out buf))
                        break;

                this.SendPacket(TCPOutbound.Redirect(this, room));
                this.Disconnect();
            }
        }

        public void RestoreAvatar()
        {
            if (this.rest_av != null)
                this.OrgAvatar = this.rest_av;

            this.Avatar = this.OrgAvatar;
        }

        public void SendEmote(String text)
        {
            if (!String.IsNullOrEmpty(text) && !this.Quarantined)
            {
                UserPool.AUsers.ForEachWhere(x => x.SendPacket(TCPOutbound.Emote(x, this.Name, text)),
                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.IgnoreList.Contains(this.Name) && !x.Quarantined);

                UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.EmoteTo(x, this.Name, text)),
                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.IgnoreList.Contains(this.Name) && !x.Quarantined);

                if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafEmoteText(ServerCore.Linker, this.Name, text));
            }
        }

        public void SendText(String text)
        {
            if (!String.IsNullOrEmpty(text) && !this.Quarantined)
            {
                UserPool.AUsers.ForEachWhere(x => x.SendPacket((String.IsNullOrEmpty(this.CustomName) || x.BlockCustomNames) ?
                    TCPOutbound.Public(x, this.Name, text) : TCPOutbound.NoSuch(x, this.CustomName + text)),
                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.IgnoreList.Contains(this.Name) && !x.Quarantined);

                UserPool.WUsers.ForEachWhere(x => x.QueuePacket(String.IsNullOrEmpty(this.CustomName) ?
                    ib0t.WebOutbound.PublicTo(x, this.Name, text) : ib0t.WebOutbound.NoSuchTo(x, this.CustomName + text)),
                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.IgnoreList.Contains(this.Name) && !x.Quarantined);

                if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafPublicText(ServerCore.Linker, this.Name, text));
            }
        }

        public void Topic(String text)
        {
            if (text != null)
                if (Encoding.UTF8.GetByteCount(text)  x.SendPacket(TCPOutbound.Part(x, this)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                    UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.PartTo(x, this.Name)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);
                }
                else Helpers.UncloakedSequence(this);
            }
        }

        public String Name
        {
            get { return this._name; }
            set
            {
                if (this.SocketConnected && Helpers.NameAvailable(this, value))
                    if (!this.LoggedIn)
                        this._name=value%3B
                    else
                    {
                        if (this.Quarantined)
                            return;

                        this.LoggedIn = false;

                        if (!this.Cloaked)
                        {
                            LinkLeaf.LinkUser other = null;

                            if (ServerCore.Linker.Busy)
                                foreach (LinkLeaf.Leaf leaf in ServerCore.Linker.Leaves)
                                {
                                    other = leaf.Users.Find(x => x.Vroom == this.Vroom && x.name=%3D this.Name && !x.Link.Visible);

                                    if (other != null)
                                    {
                                        other.LinkCredentials.Visible = true;
                                        break;
                                    }
                                }

                            UserPool.AUsers.ForEachWhere(x => x.SendPacket(other == null ? TCPOutbound.Part(x, this) : TCPOutbound.UpdateUserStatus(x, other)),
                                x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                            UserPool.WUsers.ForEachWhere(x => x.QueuePacket(other == null ? ib0t.WebOutbound.PartTo(x, this.Name) : ib0t.WebOutbound.UpdateTo(x, other.Name, other.Level)),
                                x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);
                        }

                        String current = this._name;
                        this._name=value%3B
                        Helpers.FakeRejoinSequence(this, false);
                       
                        if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                            ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafNameChanged(ServerCore.Linker, current, this._name));
                    }
            }
        }

        public ushort Vroom
        {
            get { return this._vroom; }
            set
            {
                if (this.SocketConnected)
                    if (Events.VroomChanging(this, value))
                    {
                        if (!this.LoggedIn)
                            this._vroom = value;
                        else
                        {
                            if (this.Quarantined)
                                return;

                            this.LoggedIn = false;

                            if (!this.Cloaked)
                            {
                                LinkLeaf.LinkUser other = null;

                                if (ServerCore.Linker.Busy)
                                    foreach (LinkLeaf.Leaf leaf in ServerCore.Linker.Leaves)
                                    {
                                        other = leaf.Users.Find(x => x.Vroom == this.Vroom && x.name=%3D this.Name && !x.Link.Visible);

                                        if (other != null)
                                        {
                                            other.LinkCredentials.Visible = true;
                                            break;
                                        }
                                    }

                                UserPool.AUsers.ForEachWhere(x => x.SendPacket(other == null ? TCPOutbound.Part(x, this) : TCPOutbound.UpdateUserStatus(x, other)),
                                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                                UserPool.WUsers.ForEachWhere(x => x.QueuePacket(other == null ? ib0t.WebOutbound.PartTo(x, this.Name) : ib0t.WebOutbound.UpdateTo(x, other.Name, other.Level)),
                                    x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);
                            }

                            this._vroom = value;
                            Helpers.FakeRejoinSequence(this, false);

                            if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                                ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafVroomChanged(ServerCore.Linker, this));
                        }

                        Events.VroomChanged(this);
                    }
            }
        }

        public ILevel Level
        {
            get { return this._level; }
            set
            {
                if (value != this._level)
                {
                    this._level = value;

                    if (this.LoggedIn && !this.Cloaked)
                    {
                        UserPool.AUsers.ForEachWhere(x => x.SendPacket(TCPOutbound.UpdateUserStatus(x, this)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                        UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.UpdateTo(x, this.Name, this._level)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                        if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                            ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafUserUpdated(ServerCore.Linker, this));
                    }

                    this.SendPacket(TCPOutbound.OpChange(this));
                    Events.AdminLevelChanged(this);
                }
            }
        }

        public void Print(object text)
        {
            this.SendPacket(TCPOutbound.NoSuch(this, text.ToString()));
        }

        public void BinaryWrite(byte[] data)
        {
            this.SendPacket(data);
        }

        private void DnsReceived(IAsyncResult result)
        {
            if (this.SocketConnected)
                try
                {
                    IPHostEntry i = Dns.EndGetHostEntry(result);
                    this.DNS = Helpers.ObfuscateDns(i.HostName);
                }
                catch
                {
                    try
                    {
                        this.DNS = Helpers.ObfuscateDns(this.ExternalIP.ToString());
                    }
                    catch { }
                }
        }

        private byte[] rest_av = null;

        public byte[] Avatar
        {
            get { return this.avatar; }
            set
            {
                if (value == null)
                {
                    value = new byte[] { };

                    if (this.avatar != null)
                        if (this.avatar.Length >= 10)
                            this.rest_av = this.avatar;
                }

                if (value.Length < 10)
                {
                    this.avatar = new byte[] { };
                    this.AvatarReceived = false;

                    if (!this.Cloaked && !this.Quarantined)
                    {
                        UserPool.AUsers.ForEachWhere(x => x.SendPacket(TCPOutbound.AvatarCleared(x, this)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                        UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.AvatarClearTo(x, this.Name)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined && x.Extended);

                        if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                            ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafAvatar(ServerCore.Linker, this));
                    }
                }
                else
                {
                    this.avatar = value;

                    if (!this.Cloaked && !this.Quarantined)
                    {
                        UserPool.AUsers.ForEachWhere(x => x.SendPacket(TCPOutbound.Avatar(x, this)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                        UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.AvatarTo(x, this.Name, this.Avatar)),
                            x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined && x.Extended);

                        if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                            ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafAvatar(ServerCore.Linker, this));
                    }
                }
            }
        }

        public String PersonalMessage
        {
            get { return this.personal_message; }
            set
            {
                this.personal_message = value == null ? String.Empty : value;

                if (!this.Cloaked && !this.Quarantined)
                {
                    UserPool.AUsers.ForEachWhere(x => x.SendPacket(TCPOutbound.PersonalMessage(x, this)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                    UserPool.WUsers.ForEachWhere(x => x.QueuePacket(ib0t.WebOutbound.PersMsgTo(x, this.Name, this.personal_message)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined && x.Extended);

                    if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                        ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafPersonalMessage(ServerCore.Linker, this));
                }
            }
        }

        public bool SocketConnected
        {
            get { return this.socket_health < 10; }
            set { this.socket_health = value ? 0 : 10; }
        }

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

        public void SendReceive()
        {
            while (this.data_out.Count > 0)
            {
                try
                {
                    byte[] packet;

                    if (this.data_out.TryPeek(out packet))
                    {
                        this.Sock.Send(packet);
                        Stats.DataSent += (ulong)packet.Length;

                        while (!this.data_out.TryDequeue(out packet))
                            continue;
                    }
                    else break;
                }
                catch { break; }
            }

            byte[] buffer = new byte[8192];
            int received = 0;
            SocketError e = SocketError.Success;

            try { received = this.Sock.Receive(buffer, 0, buffer.Length, SocketFlags.None, out e); }
            catch { }

            if (received == 0)
                this.socket_health = e == SocketError.WouldBlock ? 0 : (this.socket_health + 1);
            else
            {
                this.socket_health = 0;
                this.data_in.AddRange(buffer.Take(received));
                Stats.DataReceived += (ulong)received;
            }

            if (!this.LoggedIn)
                if (!this.IsHTML)
                    if (this.data_in.Count >= 3)
                    {
                        String test_str = Encoding.UTF8.GetString(this.data_in.ToArray()).ToUpper();
                        this.IsHTML = test_str.StartsWith("GET / ");
                       
                        if (!this.IsHTML)
                            this.IsWebWorker = test_str.StartsWith("GET");
                    }
        }

        public void EnforceRules(ulong time)
        {
            if ((!this.LoggedIn && time > (this.Time + 15000)) ||
                (this.LoggedIn && time > (this.Time + 240000)))
            {
                this.SocketConnected = false;
                ServerCore.Log("ping timeout or login timeout from " + this.ExternalIP + " id: " + this.ID);
            }
        }

        public void Disconnect()
        {
            this.Disconnect(false);
        }

        public void Disconnect(bool ghost)
        {
            while (this.data_out.Count > 0)
            {
                try
                {
                    byte[] packet;

                    if (this.data_out.TryPeek(out packet))
                    {
                        this.Sock.Send(packet);
                        Stats.DataSent += (ulong)packet.Length;

                        while (!this.data_out.TryDequeue(out packet))
                            continue;
                    }
                    else break;
                }
                catch { break; }
            }

            try { this.Sock.Disconnect(false); }
            catch { }
            try { this.Sock.Shutdown(SocketShutdown.Both); }
            catch { }
            try { this.Sock.Close(); }
            catch { }
            try { this.Sock.Dispose(); }
            catch { }

            this.SocketConnected = false;

            if (!ghost)
                this.SendDepart();
            else if (this.LoggedIn && !this.Quarantined)
            {
                this.LoggedIn = false;
                Events.Parting(this);

                if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                    ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafPart(ServerCore.Linker, this));

                Events.Parted(this);
            }

            this.LoggedIn = false;
        }

        public void SendDepart()
        {
            if (this.LoggedIn && !this.Quarantined)
            {
                this.LoggedIn = false;
                Events.Parting(this);

                if (!this.Cloaked)
                {
                    LinkLeaf.LinkUser other = null;

                    if (ServerCore.Linker.Busy)
                        foreach (LinkLeaf.Leaf leaf in ServerCore.Linker.Leaves)
                        {
                            other = leaf.Users.Find(x => x.Vroom == this.Vroom && x.name=%3D this.Name && !x.Link.Visible);

                            if (other != null)
                            {
                                other.LinkCredentials.Visible = true;
                                break;
                            }
                        }

                    UserPool.AUsers.ForEachWhere(x => x.SendPacket(other == null ? TCPOutbound.Part(x, this) : TCPOutbound.UpdateUserStatus(x, other)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                    UserPool.WUsers.ForEachWhere(x => x.QueuePacket(other == null ? ib0t.WebOutbound.PartTo(x, this.Name) : ib0t.WebOutbound.UpdateTo(x, other.Name, other.Level)),
                        x => x.LoggedIn && x.Vroom == this.Vroom && !x.Quarantined);

                    if (ServerCore.Linker.Busy && ServerCore.Linker.LoginPhase == LinkLeaf.LinkLogin.Ready)
                        ServerCore.Linker.SendPacket(LinkLeaf.LeafOutbound.LeafPart(ServerCore.Linker, this));
                }

                Events.Parted(this);
            }
        }

        public TCPPacket NextReceivedPacket
        {
            get
            {
                if (this.data_in.Count < 3)
                    return null;

                ushort size = BitConverter.ToUInt16(this.data_in.ToArray(), 0);
                byte id = this.data_in[2];

                if (this.data_in.Count >= (size + 3))
                {
                    TCPPacket packet = new TCPPacket();
                    packet.Msg = (TCPMsg)id;
                    packet.Packet = new TCPPacketReader(this.data_in.GetRange(3, size).ToArray());
                    this.data_in.RemoveRange(0, (size + 3));
                    return packet;
                }

                return null;
            }
        }

        public void InsertUnzippedData(byte[] data)
        {
            this.data_in.InsertRange(0, data);
        }

        public byte[] ReceiveDump
        {
            get { return this.data_in.ToArray(); }
        }

       
    }
}


Bueno esta es mi primera pregunta:
Que significano los corchetes en la línea 82?
private byte[] avatar = new byte[] { };

Melse refiero a estos corchetes { }

Gracias y saludos
#59
Hola a todos,
bueno como siempre antes de la pregunta les mostrare la tarea y el codigo:

Tarea:
Desarrollar una clase para la administración de un árbol binario ordenado.

Codigo:
Código: text

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ArbolBinarioOrdenado1
{
    public class ArbolBinarioOrdenado {
        class Nodo
        {
            public int info;
            public Nodo izq, der;
        }
        Nodo raiz;

        public ArbolBinarioOrdenado()
        {
            raiz=null;
        }
     
        public void Insertar (int info)
        {
            Nodo nuevo;
            nuevo = new Nodo ();
            nuevo.info = info;
            nuevo.izq = null;
            nuevo.der = null;
            if (raiz == null)
                raiz = nuevo;
            else
            {
                Nodo anterior = null, reco;
                reco = raiz;
                while (reco != null)
                {
                    anterior = reco;
                    if (info < reco.info)
                        reco = reco.izq;
                    else
                        reco = reco.der;
                }
                if (info < anterior.info)
                    anterior.izq = nuevo;
                else
                    anterior.der = nuevo;
            }
        }


        private void ImprimirPre (Nodo reco)
        {
            if (reco != null)
            {
                Console.Write(reco.info + " ");
                ImprimirPre (reco.izq);
                ImprimirPre (reco.der);
            }
        }

        public void ImprimirPre ()
        {
            ImprimirPre (raiz);
            Console.WriteLine();
        }

        private void ImprimirEntre (Nodo reco)
        {
            if (reco != null)
            {   
                ImprimirEntre (reco.izq);
                Console.Write(reco.info + " ");
                ImprimirEntre (reco.der);
            }
        }

        public void ImprimirEntre ()
        {
            ImprimirEntre (raiz);
            Console.WriteLine();
        }


        private void ImprimirPost (Nodo reco)
        {
            if (reco != null)
            {
                ImprimirPost (reco.izq);
                ImprimirPost (reco.der);
                Console.Write(reco.info + " ");
            }
        }


        public void ImprimirPost ()
        {
            ImprimirPost (raiz);
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            ArbolBinarioOrdenado abo = new ArbolBinarioOrdenado ();
            abo.Insertar (100);
            abo.Insertar (50);
            abo.Insertar (25);
            abo.Insertar (75);
            abo.Insertar (150);
            Console.WriteLine ("Impresion preorden: ");
            abo.ImprimirPre ();
            Console.WriteLine ("Impresion entreorden: ");
            abo.ImprimirEntre ();
            Console.WriteLine ("Impresion postorden: ");
            abo.ImprimirPost ();
            Console.ReadKey();
        }
    }
}


La pregunta es esta:
Si la consola me devuelve esto:


Entonces no coincide con esta regla:

Árbol binario

Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
Visite la raíz
Atraviese el sub-árbol izquierdo
Atraviese el sub-árbol derecho

Inorden: (izquierdo, raíz, derecho). Para recorrer un árbol binario no vacío en inorden (simétrico), hay que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-árbol izquierdo
Visite la raíz
Atraviese el sub-árbol derecho

Postorden: (izquierdo, derecho, raíz). Para recorrer un árbol binario no vacío en postorden, hay que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-árbol izquierdo
Atraviese el sub-árbol derecho
Visite la raíz

En el postorden me devuelve esto:
25 75 50 150 100

Pero primero tengo que atravesar el sub-árbol izquierdo como en el primer paso del entreorden, a saber, 25 50 (los primeros dos nodos)


Gracias y saludos
#60
Ahh gracias por el consejo fudmario y gracias a todos ustedes por el aguante.

Se los agradezco muchisimo