elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7 8 9
11  Programación / .NET (C#, VB.NET, ASP) / [C#] Criba de Eratóstenes en: 29 Septiembre 2007, 23:08 pm
Aqui tienen, sirve para encontrar numeros primos hasta el numero que ustedes indiquen.

Código
  1. // ****************************************************************
  2. // ****************************************************************
  3. // **                                                            **
  4. // **                                                            **
  5. // **               Criba de Eratóstenes en C#                   **
  6. // **                       By Hendrix                           **
  7. // **                                                            **
  8. // **                                                            **
  9. // ****************************************************************
  10. // ****************************************************************
  11.  
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Text;
  15.  
  16. namespace ConsoleApplication1
  17. {
  18.    class Program
  19.    {
  20.        public static int max;
  21.  
  22.        static void Main(string[] args)
  23.        {
  24.            int nume;
  25.  
  26.            Console.WriteLine("Introduce el numero hasta donde se va a buscar");
  27.            max = Convert.ToInt32(Console.ReadLine());
  28.  
  29.            int[,] num = new int[max, 2];
  30.            string primos = "";
  31.  
  32.            for (int i = 2; i < max; i++) //Rellenamos el array
  33.            {
  34.                num[i, 0] = i;
  35.                num[i, 1] = 0;
  36.            }
  37.  
  38.            for (int i = 2; i < max; i++)
  39.            {
  40.                if (num[i, 1] == 0)
  41.                {
  42.                    primos = primos + i.ToString() + ",";
  43.                    for (int e = 1; e < max + 1; e++)
  44.                    {
  45.                        nume = num[i, 0];
  46.                        nume = nume * e;
  47.                        if (nume < max)
  48.                        {
  49.                            num[nume, 1] = 1;
  50.                        }
  51.                        else
  52.                        {
  53.                            break;
  54.                        }
  55.                    }
  56.                }
  57.            }
  58.  
  59.            primos = primos.Substring(0, primos.Length - 1);
  60.            Console.WriteLine("Numeros primos encontrados: {0}", primos);
  61.            Console.Read();
  62.  
  63.        }
  64.    }
  65. }

Para mas información sobre la Criba de Eratóstenes aquí

Un Saludo   :)

12  Programación / .NET (C#, VB.NET, ASP) / [C#] Metodo de compresión en: 24 Agosto 2007, 20:52 pm
Esta tarde estaba aburrido y e diseñado este sencillo algoritmo. Funciona de la siguiente manera:

Texto Original: Heeendriixx
Texto Final: H2endr1i1x

Es decir, si hay 3 e's juntas, lo substituye por 2e.....y al descomprimirlo, pone tantas letras como indica el numero.

Evidentemente este metodo solo funciona en textos en donde se repitan muchas letras y esten juntas.

Si se preguntan lo siguiente: Que pasa si comprimimos un texto con numeros?? La respuesta es que el algoritmo no sirve, queda inservible, como se arregla?? pues muy fácil, añadiendo una marca delante del numero, si existe la marca pues el numero que viene depues nos interesa, si no esta la marca pues nos lo saltamos. Eso es muy facil de añadir, asi que si quereis añadirselo se lo añadiis  :)


Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace ConsoleApplication1
  6. {
  7.    class Program
  8.    {
  9.        public static int contador = 0;
  10.  
  11.        public static bool IsNumeric(object Expression)
  12.        {
  13.            bool isNum;
  14.            double retNum;
  15.  
  16.            isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any,System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );
  17.            return isNum;
  18.        }
  19.  
  20.        public static string Decompresor(string comprimido)
  21.        {
  22.            string decompres = "";
  23.            string num = "";
  24.            string caracter;
  25.            int diferencia = 1;
  26.            string sub;
  27.            string suba;
  28.            bool semaforo = false;
  29.  
  30.            for (int e = 0; e < comprimido.Length; e++)
  31.            {
  32.                if (IsNumeric(comprimido.Substring(e, 1)) == true)
  33.                {
  34.                    for (int j = 1; j < comprimido.Length; j++)
  35.                    {
  36.                        if (semaforo == true)
  37.                        {
  38.                            diferencia--;
  39.                            if (diferencia != 0)
  40.                            {
  41.                                semaforo = false;
  42.                                break;
  43.                            }
  44.                        }
  45.  
  46.                        string b;
  47.                        bool a;
  48.                        b = comprimido.Substring(e + j, 1);
  49.                        a = IsNumeric(b);
  50.                        if (a == false)
  51.                        {
  52.                            sub = comprimido.Substring(e);
  53.                            num = "";
  54.                            num = sub.Substring(0, j);
  55.                            caracter = sub.Substring(j, 1);
  56.                            diferencia = num.Length;
  57.                            for (int m = 0; m < Convert.ToInt32(num); m++)
  58.                            {
  59.                                decompres = decompres + caracter;
  60.                            }
  61.                            semaforo = true;
  62.                            break;
  63.                        }
  64.                    }
  65.                }
  66.                suba = comprimido.Substring(e, 1);
  67.                if (IsNumeric(suba) == false)
  68.                {
  69.                    decompres = decompres + suba;
  70.                }
  71.            }
  72.  
  73.            return decompres;
  74.  
  75.        }
  76.  
  77.  
  78.        public static string Compresor(string texto)
  79.        {
  80.            string res = "";
  81.  
  82.            for (int i=0;i<texto.Length-1;i++)
  83.            {
  84.                char a,b;
  85.  
  86.                a = Convert.ToChar(texto.Substring(i,1));
  87.                b = Convert.ToChar(texto.Substring(i+1,1));
  88.                if (a == b)
  89.                {
  90.                    contador++;
  91.                }
  92.                else
  93.                {
  94.                    if (contador != 0)
  95.                    {
  96.                        res = res + Convert.ToString(contador);
  97.                        contador = 0;
  98.                    }
  99.                    res = res + a;
  100.                }
  101.  
  102.            }
  103.  
  104.            res = res + texto.Substring(texto.Length - 1, 1);
  105.  
  106.            if (contador != 0)
  107.            {
  108.                res = res.Substring(0, res.Length - 1);
  109.                res = res + Convert.ToString(contador);
  110.                res = res + texto.Substring(texto.Length - 1, 1);
  111.            }
  112.  
  113.  
  114.            return res;
  115.  
  116.  
  117.        }
  118.  
  119.        static void Main(string[] args)
  120.        {
  121.            string palabra;
  122.            string resultado;
  123.            string result;
  124.  
  125.            palabra = "heeeeeeeeeeeennnnnnnnnnnnddddddddrrrrrrriiiiixxxxxxxxxx";
  126.  
  127.  
  128.            resultado = Compresor(palabra);
  129.            result = Decompresor(resultado);
  130.  
  131.  
  132.            Console.WriteLine("La palabra original es: {0} \nLa palabra comprimida es: {1}\nLa palabra descomprimida es: {2}\n\n",palabra, resultado,result);
  133.            Console.WriteLine("Tamaño inicial: {0}\nTamaño Final: {1}", palabra.Length, resultado.Length);
  134.            Console.Read();
  135.  
  136.  
  137.        }
  138.    }
  139. }

Nota: El codigo no esta depurado, se puede optimizar, ya que hay variables que las e agregado para poder depurarlo mejos cuano me provocaba errores  ;)

Un Saludo  :)

13  Programación / Programación General / Char[] != String en: 7 Agosto 2007, 15:14 pm
Pues eso, creo que es el problema que me pasa al intentar apsar parametros de tipo char[] a una Dll echa en VB siguiento el siguiente texto (http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm).

Al pasarle numeros no hay ningun problema, pero al pasarle cadenas me da un error y se cierra el programa.

Creo que es por lo que e dicho, que el tipo char[] no es igual al tipo string del VB y por eso da el error.

El error me pasa al intentar llamarlo asi desde el C++:

Código
  1. Saludo("Hola desde C++");

Alguna sugerencia??? :-\

14  Programación / .NET (C#, VB.NET, ASP) / [Source] Web Spider en: 21 Julio 2007, 18:14 pm
Para pasar el rato codee esta sencilla herramienta....es un web spider y la e programado para que rastree los links de la pagina y los e-mails....se la podria optimizar para que buscase dentro de toda la web (dentro de todos los links) pero no lo e echo, si alguien le apetece que lo haga  ;) ;)

Aviso, la GUI no es gran cosa....lo que me interesaba era el codigo.

Dejo el codigo fuente adjuntado.

Un Saludo  ;)

PD: Si encuentran algun error comuniquenlo.
PD2: No soporta SSL, asi que no lo intenten... :xD
15  Programación / Programación Visual Basic / [Source] Inyeccion Dll en VB en: 15 Junio 2007, 17:11 pm
Aqui les dejo este codigo que ya e traducido a C#, ahora a VB...mi proximo reto es traducirlo a ensamblador con el Fasm.... :xD :xD

Bueno, me dejo de chachara....aqui esta el codigo:

Modulo:

Código
  1. '************************************************************************
  2. '************************************************************************
  3. '**                                                                    **
  4. '**   Inyeccion Dll en VB a partir del codigo en C++ de MazarD         **
  5. '**                                                                    **
  6. '**                  Wrote on June 15, 2007 by Hendrix                 **
  7. '**                                                                    **
  8. '**                                                                    **
  9. '**                         CopyLeft Licence                           **
  10. '************************************************************************
  11. '************************************************************************
  12.  
  13.  
  14.  
  15. Private Const PAGE_READWRITE As Long = &H4
  16. Private Const MEM_RELEASE As Long = &H8000
  17. Private Const MEM_COMMIT As Long = &H1000
  18. Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
  19. Private Const SYNCHRONIZE As Long = &H100000
  20. Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
  21. Private Const INFINITE As Long = &HFFFFFF
  22.  
  23. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  24. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  25. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  26. Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
  27. Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  28. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  29. Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, lpThreadAttributes As Long, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
  30. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  31.  
  32.  
  33. Public Function Inyecta(RutaDll As String, Pid As Long) As Integer
  34. Dim proc As Long
  35. Dim nload As Long
  36. Dim rems As Long
  37. Dim longi As Long
  38. Dim RemThread As Long
  39. Dim Tid As Long
  40.  
  41. On Error GoTo Error
  42. proc = OpenProcess(PROCESS_ALL_ACCESS, False, Pid)
  43. nload = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")
  44. rems = VirtualAllocEx(proc, 0, Len(RutaDll), MEM_COMMIT, PAGE_READWRITE)
  45. WriteProcessMemory proc, ByVal rems, ByVal RutaDll, Len(RutaDll), longi
  46. CreateRemoteThread proc, ByVal 0, 0, ByVal nload, ByVal rems, 0, Tid
  47. WaitForSingleObject rems, INFINITE
  48. CloseHandle proc
  49. CloseHandle rems
  50. Inyecta = 0
  51. Exit Function
  52. Error:
  53. Inyecta = 1
  54. End Function

Formulario:

Código
  1. Private Sub Form_Load()
  2. Dim ruta As Long
  3. Dim resultado As Integer
  4.  
  5. ruta = Shell("notepad.exe")
  6. resultado = Inyecta("C:\ladll.dll", ruta)
  7.  
  8. If resultado = 0 Then
  9. MsgBox "Dll Inyectada con éxito!!!", , "Información"
  10. Else
  11. MsgBox "A ocurrido un error", vbCritical, "Información"
  12. End If
  13. End
  14. End Sub

Un Saludo.  ;)

16  Programación / .NET (C#, VB.NET, ASP) / Fuerza bruta en C# en: 3 Junio 2007, 23:20 pm
Bueno, pues este es mi "motor" de fuerza bruta, lo e terminado de hacer ahora mismo, es bastante sencillo...recorre desde 0 letra hasta 10, es decir, va desde:

(ninguna letra) hasta 999999999

hay va el codigo:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5.  
  6. namespace ConsoleApplication2
  7. {
  8.    class Program
  9.    {
  10.        public static string carac = ",a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9";
  11.  
  12.  
  13.  
  14.        static void Main(string[] args)
  15.        {
  16.            string palabra = "";
  17.            char o = ',';
  18.            string[] c = carac.Split(o);
  19.  
  20.            for (int a = 0; a < 37; a++)
  21.            {
  22.                for (int b = 0; b < 37; b++)
  23.                {
  24.                    for (int d = 0; d < 37; d++)
  25.                    {
  26.                        for (int e = 0; e < 37; e++)
  27.                        {
  28.                            for (int f = 0; f < 37; f++)
  29.                            {
  30.                                for (int g = 0; g < 37; g++)
  31.                                {
  32.                                    for (int h = 0; h < 37; h++)
  33.                                    {
  34.                                        for (int i = 0; i < 37; i++)
  35.                                        {
  36.                                            for (int j = 0; j < 37; j++)
  37.                                            {
  38.                                                for (int k = 0; k < 37; k++)
  39.                                                {
  40.                                                    palabra = c[a] + c[b] + c[d] + c[e] + c[f] + c[g] + c[h] + c[i] + c[j] + c[k];
  41.                                                    Console.WriteLine(palabra);
  42.                                                }
  43.                                            }
  44.                                        }
  45.                                    }
  46.                                }
  47.                            }
  48.                        }
  49.                    }
  50.                }
  51.            }
  52.        }
  53.    }
  54. }

la coma de delante de la a es importante, ya que como en el split, en la posicion 0 no se guarda nada por culpa de esta coma, y así podemos recorrer desde 0 hasta 10 letras....

Un Saludo.  ;)

17  Programación / .NET (C#, VB.NET, ASP) / Protocolo MSN en C# 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

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
18  Programación / .NET (C#, VB.NET, ASP) / [Source] Inyector de Dll's en C# en: 2 Junio 2007, 22:42 pm
Bueno, esta tarde como ya estaba cansado de programar otra cosa me decidi a traducir el codigo en C de MazarD sobre inyectar una Dll con el metodo de CreateRemoteThread. Antes lo habia intentado en VB pero me daba error en una API, con este lenguaje no e tenido problemas en traducirlo (lo que mas me a costado a sido buscar las declaraciones de las Apis.... :xD).

Aqui va el codigo:

Código
  1. /* Inyección de Dll escrito por Hendrix
  2.  * en base al codigo en C de MazarD por
  3.  * CreateRemoteThread.
  4.  *
  5.  * Fecha: 2-6-2007
  6.  *
  7.  * Dll echa en Vc++
  8.  */
  9.  
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Text;
  13. using System.Runtime.InteropServices;
  14. using System.Diagnostics;
  15. using System.ComponentModel;
  16. using System.IO;
  17.  
  18. namespace ConsoleApplication1
  19. {
  20.    class Apis
  21.    {
  22.        [DllImport("kernel32.dll", EntryPoint = "OpenProcess")]
  23.        public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
  24.  
  25.        [DllImport("kernel32", CharSet = CharSet.Ansi)]
  26.        public extern static int GetProcAddress(int hwnd, string procedureName);
  27.  
  28.        [DllImport("kernel32.dll", EntryPoint = "GetModuleHandle")]
  29.        public static extern int GetModuleHandle(string lpModuleName);
  30.  
  31.        [DllImport("kernel32.dll", EntryPoint = "VirtualAllocEx")]
  32.        public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
  33.  
  34.        [DllImport("kernel32")]
  35.        [return: MarshalAs(UnmanagedType.Bool)]
  36.        public static extern bool CloseHandle(IntPtr hObject);
  37.  
  38.        [DllImport("kernel32", EntryPoint = "CreateRemoteThread")]
  39.        public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, uint lpThreadId);
  40.  
  41.        [DllImport("kernel32.dll",EntryPoint = "WriteProcessMemory")]
  42.        public static extern IntPtr WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, uint size, IntPtr lpNumberOfBytesWritten);
  43.  
  44.    }
  45.  
  46.  
  47.  
  48.    class Program
  49.    {
  50.        static int Main(string[] args)
  51.        {
  52.            uint pid;
  53.            int load;
  54.            uint tama;
  55.            string ladll;
  56.            string nom;
  57.  
  58.            const uint PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;
  59.            const uint MEM_COMMIT = 0x1000;
  60.            const uint MEM_RESERVE = 0x2000;
  61.            const uint PAGE_READWRITE = 0x40;
  62.  
  63.            try
  64.            {
  65.                Console.Write("Introduce el nombre del proceso (sin la extension): ");
  66.                nom = Console.ReadLine();
  67.                Console.Write("\nIntroduce la ruta de la dll a inyectar: ");
  68.                ladll = Console.ReadLine();
  69.  
  70.                if (File.Exists(ladll) == false)
  71.                {
  72.                    Console.WriteLine("La ruta de la Dll no existe");
  73.                    Console.Read();
  74.                    return 0;
  75.                }
  76.  
  77.                Byte[] dll = Encoding.ASCII.GetBytes(ladll);
  78.                tama = Convert.ToUInt32(ladll.Length);
  79.  
  80.                Process[] nombre = Process.GetProcessesByName(nom);
  81.                if (nombre.Length == 0)
  82.                {
  83.                    Console.WriteLine("El proceso no existe");
  84.                    Console.Read();
  85.                    return 0;
  86.                }
  87.                pid = Convert.ToUInt32(nombre[0].Id);
  88.  
  89.                IntPtr proc = Apis.OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  90.                load = Apis.GetProcAddress(Apis.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
  91.                IntPtr nLoad = new IntPtr(load);
  92.                IntPtr rems = Apis.VirtualAllocEx(proc, IntPtr.Zero, Convert.ToUInt32(ladll.Length), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  93.                Apis.WriteProcessMemory(proc, rems, dll, tama, IntPtr.Zero);
  94.                Apis.CreateRemoteThread(proc, IntPtr.Zero, 0, nLoad, rems, 0, 0);
  95.                Apis.CloseHandle(proc);
  96.                return 1;
  97.            }
  98.  
  99.            catch
  100.            {
  101.                Console.WriteLine("\nUn error ha ocurrido.");
  102.                Console.ReadLine();
  103.                return 0;
  104.            }
  105.  
  106.  
  107.  
  108.        }
  109.    }
  110. }

Le e añadido algo de poca importancia, y es que en el codigo de MazarD te pedia el pid y en este te pide el nombre (sin la extension) del ejecutable donde se tiene que inyectar, que es algo mas comodo.

Un Saludo y espero que le sirva a alguien.  ;)



Nota al moderador:
Si se tiene que mover a Troyenos y Virus se meuve....no lo e posteado hay porque precisamente esta el de MazarD en C... :-\ :-\

19  Programación / .NET (C#, VB.NET, ASP) / [Tutorial] Sockets en C# en: 26 Mayo 2007, 16:20 pm
Sockets en C#


Index:

  • Introducción
  • ¿Qué es un Socket?
  • Teoria sobre Sockets en C#
  • Programando una aplicacion Cliente-Servidor
  • Implementación del protocolo HTTP en C# mediante Sockets
  • Despedida



1. Introducción

En este tutorial voy a explicar como trabajar con sockets en C#, este tutorial puede servir tanto para C# como para VB, aunque lo centrare en C#. Recuerden que exportar un codigo en C# a otro en VB no es tan complicado.

A lo largo de este tutorial veremos que significa la palabra socket y como crearnos uno, pasaremos por un ejemplo de aplicación Cliente-Servidor hasta llegar a un ejemplo en el que con nuestra aplicacion haremos una peticion a una pagina web para que nos mande su Index.html (que es lo que hacen los navegadores).

Bueno, por ultimo apuntar que trabajaremos en modo consola, que aprticularmente me gusta más.

Ahora si, ya podemos empezar con lo que verdaderamente es el tutorial.

2. ¿Qué es un socket?

Para responder a esta pregunta, podemos consultar perfectamente la wikipedia, que siempre es de gran ayuda.

Cita de la Wikipedia:

Citar
Socket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.

Un socket queda definido por una dirección IP, un protocolo y un número de puerto.

Es decir, es un metodo para que aplicaciones situadas en disdintos ordenadores (o no, pueden comunicarse perfectametne aplicaciones situadas en el mismo ordenador) puedan comunicarse. Para ello, se necesita la IP, un Puerto y un Protocolo. Nosotros utilizaremos el protocolo TCP.

Basicamente al socket le pasaremos la IP a conectar, el puerto a conectar/escuchar y el protocolo, aparte de otras cosas, pero lo importante es eso.

3. Teoria sobre Sockets en C#

Este apartado es un "pasos previos" para hacer la aplicacion del siguiente capitulo.

Para inidicar que queremos trabajar con sockets, tenemos que agregar la siguientes lineas en el Using:

Código:
using System.Net;
using System.Net.Sockets;

Asi le indicamos que trabajaramos con sockets.

Para conseguir la direccion del IP se usa el IPAddress, un ejemplo y luego lo explico:

Código:
IPAddress direc = Dns.GetHostEntry("localhost").AddressList[0];

Lo que se hace aqui es poner dentro de direc la IP de localhost, eso no se guarda ni en int ni en long ni en string, se guarda en IPAddress, para luego usarse en la siguiente instrucción:

Código:
IPEndPoint Ep = new IPEndPoint(direccion, puerto);

NOTA: Aunque se trabaje con numeros, esos numeros de la IP se tienen que pasar a IPAddress, ya que como int no lo va a tomar.

Donde direccion es lo que habiamos conseguido antes con IPAddress, y en puerto le ponemos un int que queramos, por ejemplo:

Código:
IPEndPoint Ep = new IPEndPoint(direc, 12345);

Lo siguiente es crear el socket con lo obtenido hasta ahora. Lo llamaremos asi:

Código:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Dividamoslo por agrumentos:

AddressFamily.InterNetwork: Esto indica que la direccion es para una IP v4 (xxx.xxx.xxx.xxx)

SocketType.Stream: Es el tipo de socket, hay varios tipos, para mas información sobre estos consultad la informacion que les da el entorno de programación.

ProtocolType.Tcp: Es el potocolo que se usara, tambien hay vario, para mas informacion consulten el entorno de programación.

Bien, una vez echo esto ya tenemos el socket apunto para ser usado. Para usarlo, vamonos directamente a la practica, es decir, al punto siguiente.

4. Programando una aplicacion Cliente-Servidor

Con lo de capitulo anterior agregado a nuestra futura aplicación, ya estamos listos para empezar a explicar todo lo que falta.

En este capitulo programaremos un servidor, con el cual nos conectaremos con el NetCat para comunicarnos con nuestra aplicación.

Al codigo que teniamos antes le agregamos estas lineas:

Código:
socket.Bind(Ep);
socket.Listen(100);

Lo que hacemos aqui es proceder a escuchar por el puerto descrito en Ep (recuerden que era el 12345). Luego en la siguiente linea, el parametro de Listen establece la longitud máxima de la cola de conexiones pendientes que puede tener el servidor antes de empezar a rechazar conexiones.

La siguiente linea a agregar es la siguiente:

Código:
Socket handler = socket.Accept();

Esta linea indica que el servidor queda esperando una llamada para leugo aceptarla.

Eso era la principal parte a explicar, ahora les pegare un codigo explicado de la aplicación que e echo:

Código:
byte[] bytes = new byte[1024]; //Declaramos un array de bytes de longitud 1024
int count;
String data = ""; //Declaramos data, que sera donde se almacenaran los datos

do //Bucle Do/While
{
        count = handler.Receive(bytes); //Recibimos los datos enviados y lo guardamos en cout.
                data = System.Text.Encoding.ASCII.GetString(bytes, 0, count); //Lo codificamos a cadena (ya que se envian como bytes)
                if (data != "exit\n") //Mientras lo recibido no sea exit + \n (es decir, exit + Intro, ya que intro tambien se envia)
                {
                    Console.Write("Se a recibido: {0}", data); //Mostramos lo recibido pro pantalla
                }


        } while (data != "exit\n");  //Mientras lo recibido no sea exit + Intro se continua el bucle, si recibimos exit + intro, salimos del bucle

        Console.WriteLine("Se ha finalizado la conexión"); //Avisamos qde que se a terminado la transferencia de datos

        byte[] msg = System.Text.Encoding.ASCII.GetBytes("\n\nFinalizada conexion con la aplicacion"); //Codificamos de string a byte el siguiente mensage para que se pueda enviar al NetCat (Cliente)

        handler.Send(msg); //Enviamos el mensage al cliente
        handler.Shutdown(SocketShutdown.Both); //"Apagamos" los sockets
        handler.Close(); //Los cerramos

5. Implementación del protocolo HTTP en C# mediante Sockets

En este capítulo implementaremos un Cliente, el cual va a pedir a una pagina web que le transfiera el index de su pagina. Les pondre todo el codigo de mi Cliente comentado.

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 void Main(string[] args)
        {
            string cabecera = "GET /index.html HTTP/1.0\n\n"; //Cabecera para hacer la peticion del index.
            string respuesta;
            Byte[] SendBytes = Encoding.ASCII.GetBytes(cabecera);
            Byte[] RecvBytes = new Byte[255];
            int bytes;
            bool semaforo;
            string html = "";
            int e;

            semaforo = false;

            IPHostEntry address = Dns.GetHostEntry("www.web.com");

            IPEndPoint Ep = new IPEndPoint(address.AddressList[0], 80);

            Socket socket = new Socket(AddressFamily.InterNetwork,
                                         SocketType.Stream,
                                         ProtocolType.Tcp);

            try
            {

                socket.Connect(Ep); //Conectamos

                socket.Send(SendBytes,SendBytes.Length,SocketFlags.None); //Enviamos la cabecera

                bytes = socket.Receive(RecvBytes,RecvBytes.Length,SocketFlags.None); //Recibimos la respuesta en bloques de 255 bytes

                respuesta = Encoding.ASCII.GetString(RecvBytes, 0, bytes); //Codificamos la respuesta

                while (bytes > 0)
                {

                    bytes = socket.Receive(RecvBytes,
                                             RecvBytes.Length,
                                             SocketFlags.None);

                    respuesta = Encoding.ASCII.GetString(RecvBytes, 0, bytes);

                    if (semaforo == false) //Filtro de encabezamientos
                    {
                        e = respuesta.IndexOf("<html>");
                        if (e != -1)
                        {
                            semaforo = true;
                            html = respuesta.Substring(e);
                        }
                    }
                    else
                    {
                        html += respuesta;
                    }

                }

                string fileName = "C:\\index.html"; //Guardamos lo recibido en C:\Index.html
                StreamWriter writer = File.CreateText(fileName);

                writer.WriteLine(html);
                writer.Close();

                Console.WriteLine("Archivo guardado con exito");
                Console.Read();

            }
            catch (Exception error) //Si durante el procedimiento hay error salta aqui.
            {
                Console.WriteLine("Se produció el siguiente error: " + error);
                Console.Read();
            }
        }
    }
}

6. Despedida

Bueno, hasta aqui llego este tutorial de Sockets en C#, la verdad es que son bastante faciles de manejar y son bastante completos.

Este documento lo e echo basandome en algunos textos de internet y obviamente segun mi experiencia con sokets.

Un Saludo.


Documento bajo licencia CopyLeft
20  Programación / .NET (C#, VB.NET, ASP) / [Nuevo Lenguaje (GPL)] Pixie (C#) en: 24 Mayo 2007, 17:52 pm
Bueno, les presento este nuevo interprete del lenguaje que e echo en C#.

Esta en fase Beta

Les pongo el FAQ que e echo (es el archivo leeme.txt)




Interprete Lenguaje Pixie
By Hendrix


FAQ
----

1. ¿Que es Pixie?

Bueno, Pixie es un lenguaje interpretado que me e inventado yo mismo y lo e ido
implementando en C#.

Este lenguaje es GPL, asi que todo el mundo lo puede ir mejorando y/o cambiando de la
manera que quiera. Tambien agradeceria que si alguien le implementa mas comandos y lo
mejora me gustaria que me lo comentara por e-mail o por MP.

2. ¿Por que en C#?

Lo e echo en C# porque era un lengauje que me gustaba bastante, aparte de que me apetecia
hacer un programa en este lenguaje, ya que no e echo muchos proyectos en este lenguaje.

3. ¿Lo puede utilizar todo el mundo?

Esto es una de las cosas que me han decantado por hacerlo en C#, C# se ejecuta a partir
del Framework, por lo tanto se puede ejecutar en todos los SO (que dispongan del
Framework para su plataforma) que sea.

4. ¿Con el Framework son todo ventajas?

Evidentemente no, el framework implica una menor velocidad en la ejecucion de los
scripts. Un programa en C es muchisimo mas rapido que uno en C# por culpa del framework.

Otro inconveniente es que para utilizar mi interprete deben de tener instalado el Framework.

5. ¿A parte de la beta, vas a sacar mas versiones?

Mi intención es llegar hasta una version estable (con los suficientes comandos para que
este lengauje pueda ser usado realmente) y luego le añadire compilador para que genere
.exe's.


Lista de Comandos:
-------------------

· Print: Funciona como el print de perl (incluso con sus variables), por ejemplo:

print ("Hola Mundo")

y con una variable:

print ("Me llamo $nombre")

· variables: Tambien son como perl

$a = 1 + 2

$nombre = Hendrix

NOTA: dejar los espacios despues del signo =

. title: Sirve para cambiar el titulo de la ventana


title ("Nuevo Titulo")

· wait: Espera a que se pulse una tecla

Ejemplo: wait

· exec: Ejecuta un archivo

exec ("C:\archivo.exe")

· kill: elimina un archivo

kill ("C:\archivo.txt")

· dec: declara una variable

dec (variable)

· gets: Guarda dentro de una variable lo que se le pase por teclado

ejemplo:

dec (nombre)

print ("Escribe tu nombre: ")
gets (nombre)


· If: Es el tipico "Si condicional"

Ejemplo:

dec (num)

print ("Introduce un numero: ")
gets (num)
if ($num = 18)
{
print ("Es 18")
}
else
{
print ("No es 18")
}
wait


· openfile: Prepara un archivo para ser trabajado (si no existe lo crea)

Ejemplo:

openfile ("C:\archivo.txt")


· write: Escribe en el archivo (si habia texto lo sobreescribe) (NOTA: es necesario
primero haber iniciado el archivo)

ejemplo:

write ("Linea de texto")


· add: Lo mismo que write pero sin sobreescribir

add ("Linea de texto añadida")


· closefile: Cierra el archivo


Obligaciones del lenguaje:
---------------------------

- Escribir siempre los comandos en minuscula
- Respectar los espacios entre signos matematicos


Hasta aqui llega esta pequeña introduccion.

Un Saludo.

Hendrix

Páginas: 1 [2] 3 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines