Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Hendrix en 3 Junio 2007, 01:28 am



Título: Protocolo MSN en C#
Publicado por: Hendrix en 3 Junio 2007, 01:28 am
Aqui les dejo este proyecto....se que el codigo se puede optimizar...pero son la 1:24 am y no hay ganas...xDDD

Lo que hace este codigo es conectarse al MSN mediante el protocolo del MSN:

Descargar/Ver (http://www.telefonica.net/web2/telamarinera/docus/protocolo_msn.pdf)

En principio lo que hace es pedirte tu cuenta, tu pass, conectarse y te enseña el nick tal y como lo tienes tu en el MSN (ya que por defecto te los pasan codificado...e implementado una funcion que lo descodifica).

El codigo es el siguiente:

Código:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace ConsoleApplication2
{
    class Program
    {
        static string cuenta;
        static string pass;

        public bool IsNumeric(object epresionje)
        {
            bool isNum;
            double retNum;

            isNum = Double.TryParse(Convert.ToString(epresionje), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
            return isNum;
        }

        public string urldecode(string cadena)
        {
            char p = '%';
            string hexa;
            long dec;
            char asc;
            string resultado = "";

            Program hen = new Program();

            string[] arr = cadena.Split(p);
            foreach (string q in arr)
            {
                if (q.Length > 0)
                {
                    hexa = q.Substring(0, 2);
                    if (hen.IsNumeric(hexa) == true)
                    {
                        dec = Convert.ToInt64(hexa, 16);
                        asc = Convert.ToChar(dec);
                        resultado = resultado + asc + q.Substring(2);
                    }
                    else
                    {
                        resultado = resultado + q;
                    }

                }
            }

            return resultado;

        }

        public string depurarip(string direc)
        {
            string a;
            int b;
            string c;

            a = direc.Substring(9);
            b = a.IndexOf(":");
            c = a.Substring(0, b);
           
            return c;

        }

        public string Sacacookie(string resultado)
        {
            int a;
            string b;
            int c;
            string d;


            a = resultado.IndexOf("'t=");
            b = resultado.Substring(a + 2);
            c = b.IndexOf("'");
            d = b.Substring(1, c);

            return d;
        }





        static void Main(string[] args)
        {

            Console.Write("Introduce tu Cuenta: ");
            cuenta = Console.ReadLine();
            Console.Write("Introduce la Pass: ");
            pass = Console.ReadLine();


            string cabecera = "VER 1 MSNP9 MSNP8 CVR0\r\n";
            string respuesta = "";
            string cab2 = "CVR 2 0x0C0A winnt 5.1 i386 MSNMSGR 6.0.0602 MSMSGS " + cuenta + "\r\n";
            string cab3 = "USR 3 TWN I " + cuenta + "\r\n";
            string cab4 = "VER 4 MSNP9 MSNP8 CVR0\r\n";
            string cab5 = "CVR 5 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS " + cuenta + "\r\n";
            string cab6 = "USR 6 TWN I " + cuenta + "\r\n";
            string cab7;
            string nick;
            Byte[] Send6 = Encoding.ASCII.GetBytes(cab6);
            Byte[] Rec6 = new Byte[255];
            Byte[] Send5 = Encoding.ASCII.GetBytes(cab5);
            Byte[] Rec5 = new Byte[255];
            Byte[] Send4 = Encoding.ASCII.GetBytes(cab4);
            Byte[] Rec4 = new Byte[255];
            Byte[] Send3 = Encoding.ASCII.GetBytes(cab3);
            Byte[] Rec3 = new Byte[255];
            Byte[] Send2 = Encoding.ASCII.GetBytes(cab2);
            Byte[] Rec = new Byte[255];
            Byte[] SendBytes = Encoding.ASCII.GetBytes(cabecera);
            Byte[] RecvBytes = new Byte[255];
            int bytes;
            string IPnueva;
            string cookie;
            string cuentaurl = cuenta.Replace("@", "%40");


            IPHostEntry address = Dns.GetHostEntry("messenger.hotmail.com");
            IPEndPoint Ep = new IPEndPoint(address.AddressList[0], 1863);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // Primera conexión
                socket.Connect(Ep);
                socket.Send(SendBytes, SendBytes.Length, SocketFlags.None);
                bytes = socket.Receive(RecvBytes, RecvBytes.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(RecvBytes, 0, bytes);

                //Segunda Conexión
                socket.Send(Send2, Send2.Length, SocketFlags.None);
                bytes = socket.Receive(Rec, Rec.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec, 0, bytes);

                //tercera Conexión
                socket.Send(Send3, Send3.Length, SocketFlags.None);
                bytes = socket.Receive(Rec3, Rec3.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec3, 0, bytes);

                Program o = new Program();

                IPnueva = o.depurarip(respuesta);

                socket.Close();

                Console.WriteLine("\nConectando...");

                //Cuarta conexión
                IPHostEntry addressa = Dns.GetHostEntry(IPnueva);
                IPEndPoint Epo = new IPEndPoint(addressa.AddressList[0], 1863);
                Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                socket2.Connect(Epo);
                socket2.Send(Send4, Send4.Length, SocketFlags.None);
                bytes = socket2.Receive(Rec4, Rec4.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec4, 0, bytes);

                //Quinta conexión
                socket2.Send(Send5, Send5.Length, SocketFlags.None);
                bytes = socket2.Receive(Rec5, Rec5.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec5, 0, bytes);

                //Sexta conexión
                socket2.Send(Send6, Send6.Length, SocketFlags.None);
                bytes = socket2.Receive(Rec6, Rec6.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec6, 0, bytes);

                cookie = respuesta.Substring(12);


                //Septima conexión
                string tiket;
                string head;

                cab7 = "Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" + cuentaurl + ",pwd=" + pass + "," + cookie + "\r\n";
                WebRequest request = WebRequest.Create("https://login.passport.com/login2.srf");
                request.Headers.Add("Authorization", cab7);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                head = Convert.ToString(response.Headers);
                tiket = o.Sacacookie(head);
                response.Close();

                //Ultima conexión
                string cab8 = "USR 7 TWN S t=" + tiket + "\r\n";
                Byte[] Send8 = Encoding.ASCII.GetBytes(cab8);
                Byte[] Rec8 = new Byte[255];

                socket2.Send(Send8, Send8.Length, SocketFlags.None);
                bytes = socket2.Receive(Rec8, Rec8.Length, SocketFlags.None);
                respuesta = Encoding.ASCII.GetString(Rec8, 0, bytes);

                nick = respuesta.Substring(cuenta.Length + 10);

                string decode;
                int fin;

                fin = nick.IndexOf("??$");
                nick = nick.Substring(0, fin);

                decode = o.urldecode(nick);

                Console.WriteLine("\n\nTu nick es: {0}",decode);

                Console.Read();
            }
            catch
            {
                Console.WriteLine("Ocurrió un error");
                Console.Read();
            }
        }
    }
}

A partir de esta base se pueden hacer otros proyectos como son versiones del MSN tipo AMSN, se pueden hacer MSN nukers....eso lo dejo a vuestra elección.

Un Saludo.  ;)

PD: Quiero dar las gracias a MazarD, sin su ayuda no habria podido conectar con login.passport.com... :xD :xD


Título: Re: Protocolo MSN en C#
Publicado por: BADBYTE-K en 3 Junio 2007, 17:06 pm
Muchas gracias por la info, valiosisima

Saludos


Título: Re: Protocolo MSN en C#
Publicado por: Meta en 3 Junio 2007, 19:18 pm
¿Para qué es todo esto exactamente?

¿Con qué idea?

Menudo curro ha hecho.


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 3 Junio 2007, 19:45 pm
Esta parrafada implementa el protocolo del MSN a traves de C#....es decir, implementa le mismo protocolo que implementa tu MSN....podria hablar con alguien a traves de la consola del C# o si le diseñara una GUI podria hacer una version del MSN como es el AMsn... ;) ;)

Este codigo se conecta y te presenta tu nick actual del msn en la consola.

Un Saludo.  ;)



Título: Re: Protocolo MSN en C#
Publicado por: Meta en 4 Junio 2007, 00:00 am
Eso si ya me interesa más.

Pero ya que hay messenger. No creo que haya motivación para hacer algoq ue ya existe.

Es decir. ¿Para qué reinventar la rueda?


Título: Re: Protocolo MSN en C#
Publicado por: BADBYTE-K en 6 Junio 2007, 16:28 pm
Hola

Para fines didacticos esta muy bien, aparte la satisfaccion de desarrollar un proyecto propio en base a la investigacion del protocolo. Luego, lo considero interesante ya que se ponen en practica varios conceptos de c# y ademas tecnicas de trabajo con sockets con c#.


Título: Re: Protocolo MSN en C#
Publicado por: Meta en 8 Junio 2007, 05:50 am
Eso es cierto, no se nada de socket, pero para los que lo sepan, que hagna ejemplillos para aprender.


Título: Re: Protocolo MSN en C#
Publicado por: sirdarckcat en 8 Junio 2007, 06:19 am
Hay algunas clases que te permiten establecer una conversación con algun conteacto, etc..

http://www.wox.no/
http://www.firstfloorsoftware.com/
http://members.home.nl/b.geertsema/dotMSN/

Saludos!!


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 8 Junio 2007, 14:12 pm
Meta, si quieres lo puedo ampliar hasta un codigo en el que se pueda ver la lista de contactos y hablar con ellos.... ;) ;)

Un Saludo.  ;)



Título: Re: Protocolo MSN en C#
Publicado por: anion en 10 Junio 2007, 18:34 pm
se puede hacer que una vez que se conecta a la red del msn, independiediente del contanto que nos envia un mensaje responda algo a ese contacto, por ej, si cualquiera de los contacto envia la palabra "hola", responda algo, si envia "chau", responde otra.


Título: Re: Protocolo MSN en C#
Publicado por: sirdarckcat en 10 Junio 2007, 23:41 pm
si anion, pero debes esperar a que Hendrix "expanda" su clase, o deberás usar las clases que mencioné, tambien podrias usar la API de MSN, pero la verdad no se como funciona ese..

Saludos!!


Título: Re: Protocolo MSN en C#
Publicado por: Meta en 10 Junio 2007, 23:43 pm
Si haces eso del msn eres un rey.


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 11 Junio 2007, 13:06 pm
Meta, si lo hago lo voy a hacer a modo consola, te va bien???


Título: Re: Protocolo MSN en C#
Publicado por: anion en 11 Junio 2007, 20:56 pm
si, es lo de menos si es por consola. Mi idea es ejecutarlo en mi pc y despues el msn de algunos amigos cuando no estoy en casa poder mandar mensajes, con palabras claves que busque por medio de comparacion de string y me devuelve cierta informacion, pero lo importante aca es que no tiene que distinguir entre los contactos, eso no importa, es que solo lo envie al contacto que envio el string, se entiende?. La respuesta puede estar en un archivo de texto, de eso me encargo yo de crearlo, no hay drama.


Título: Re: Protocolo MSN en C#
Publicado por: Achernar en 15 Junio 2007, 00:21 am
cai aca via google asi que no me vuelvan a mandar al google sino es medio do loop alguno de ustedes tiene una especie de rfc que explique el protocolo msn?

encontre esto

http://www.hypothetic.org/docs/msn/

no voy a pedir tanto como en castellano, pero si tienen algo mas oficial lo agradeceria. Igualmente todavia me falta leer el codigo de Hendrix y leer mas detenidamente esa pagina porque mi ingles  isnot sou gud  ;D

Gracias por el codigo! y si creo que tiene muchas aplicacioines. desde pedagogicas, pasando por la comodidad de un msn personalizado hasta bots y gusanos  :o


Título: Re: Protocolo MSN en C#
Publicado por: MANULOMM en 6 Julio 2007, 16:34 pm
miren esta libreria...
http://www.xihsolutions.net/dotmsn/index.html
es interesante...

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


Título: Re: Protocolo MSN en C#
Publicado por: astaroth7 en 6 Julio 2007, 16:52 pm
Oh un codigo muy completo que hace exactametne lo que quiero. ¿Se podria pasar a VB 6 o crear una dll con esto para poder usarlo? Lo que quiero hacer es un cliente del MSN en modo consola para implementarlo en mi juego, y poder conectarse a msn desde alli sin necesidad de ningun otro programa extra.


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 6 Julio 2007, 17:06 pm
modo consola??? Visual Basic??? la consola y el VB no se llevan muy bien, no es la mejor opción... :xD

Claro que se puede portar al VB, ya que es solo conexiónes y transferencias, nada ams... ;)  :)


Título: Re: Protocolo MSN en C#
Publicado por: astaroth7 en 6 Julio 2007, 18:41 pm
Pues si es posible que se porte a VB, te estaria muy agradecido. Me darias la solucion a mi proyecto actual :O


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 6 Julio 2007, 19:45 pm
Pues si es posible que se porte a VB, te estaria muy agradecido. Me darias la solucion a mi proyecto actual :O

Quien a dicho que yo lo portare al VB??? :huh: :rolleyes: :xD


Título: Re: Protocolo MSN en C#
Publicado por: astaroth7 en 6 Julio 2007, 20:26 pm
plsplsplsplspls porfa plssss  ;D
No en serio, si tienes un momento y no es mucha molestia, ya que tu eres el autor te costara menos que a un profano en la materia.


Título: Re: Protocolo MSN en C#
Publicado por: Hendrix en 6 Julio 2007, 20:34 pm
Hay bots en PSCode que implementan este protocolo en VB... ;) ;)


Título: Re: Protocolo MSN en C#
Publicado por: astaroth7 en 6 Julio 2007, 20:53 pm
Pero no esta actualizado. El problema es la encriptacion que utiliza el protocolo.


Título: Re: Protocolo MSN en C#
Publicado por: MANULOMM en 7 Julio 2007, 04:46 am
astaroth7 como te lo habia dicho en tu post de vb6.0 solo es posible utilizar esta libreria en .net, si quieres hacer un cliente msn podrias buscar como ejecutar el protocolo msn en el propio vb6.0
, o investigar algo sobre el servicio .netpassport... haber que logras hacer...

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


Título: Re: Protocolo MSN en C#
Publicado por: astaroth7 en 7 Julio 2007, 09:43 am
Ya encontre lo que queria en VB. Si a alguien le interesa:

http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=67862&lngWId=1&txtForceRefresh=7720073464892198 (http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=67862&lngWId=1&txtForceRefresh=7720073464892198)


Título: Re: Protocolo MSN en C#
Publicado por: Alesiter en 13 Julio 2007, 00:17 am
yo tambien tengo conocimientos en .net y quisiera aportar para crear el programita
una cosa
aparte de usar el protocolo del msn(no lo lei muy bien ,no tengo tiempo estos dias) etas usando algun servicio web de messenger?
busque por ahi y encontre uno:
www.mperfect.net/messengerwebsrv/messengerservice.asmx

talves sea el mismo que el q viste en protocolo de msn(como te dije no tuve tiempo de leerlo)
bueno ,pero si queremos hacer un messenger debemos hacer algo mas que no tengan los otros messengers,no?