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 - Hendrix

#421
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 (C#) [Seleccionar]
/* Inyección de Dll escrito por Hendrix
* en base al codigo en C de MazarD por
* CreateRemoteThread.
*
* Fecha: 2-6-2007
*
* Dll echa en Vc++
*/

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.ComponentModel;
using System.IO;

namespace ConsoleApplication1
{
    class Apis
    {
        [DllImport("kernel32.dll", EntryPoint = "OpenProcess")]
        public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);

        [DllImport("kernel32", CharSet = CharSet.Ansi)]
        public extern static int GetProcAddress(int hwnd, string procedureName);

        [DllImport("kernel32.dll", EntryPoint = "GetModuleHandle")]
        public static extern int GetModuleHandle(string lpModuleName);

        [DllImport("kernel32.dll", EntryPoint = "VirtualAllocEx")]
        public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

        [DllImport("kernel32")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CloseHandle(IntPtr hObject);

        [DllImport("kernel32", EntryPoint = "CreateRemoteThread")]
        public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, uint lpThreadId);

        [DllImport("kernel32.dll",EntryPoint = "WriteProcessMemory")]
        public static extern IntPtr WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, uint size, IntPtr lpNumberOfBytesWritten);

    }



    class Program
    {
        static int Main(string[] args)
        {
            uint pid;
            int load;
            uint tama;
            string ladll;
            string nom;

            const uint PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;
            const uint MEM_COMMIT = 0x1000;
            const uint MEM_RESERVE = 0x2000;
            const uint PAGE_READWRITE = 0x40;

            try
            {
                Console.Write("Introduce el nombre del proceso (sin la extension): ");
                nom = Console.ReadLine();
                Console.Write("\nIntroduce la ruta de la dll a inyectar: ");
                ladll = Console.ReadLine();

                if (File.Exists(ladll) == false)
                {
                    Console.WriteLine("La ruta de la Dll no existe");
                    Console.Read();
                    return 0;
                }

                Byte[] dll = Encoding.ASCII.GetBytes(ladll);
                tama = Convert.ToUInt32(ladll.Length);

                Process[] nombre = Process.GetProcessesByName(nom);
                if (nombre.Length == 0)
                {
                    Console.WriteLine("El proceso no existe");
                    Console.Read();
                    return 0;
                }
                pid = Convert.ToUInt32(nombre[0].Id);

                IntPtr proc = Apis.OpenProcess(PROCESS_ALL_ACCESS, false, pid);
                load = Apis.GetProcAddress(Apis.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
                IntPtr nLoad = new IntPtr(load);
                IntPtr rems = Apis.VirtualAllocEx(proc, IntPtr.Zero, Convert.ToUInt32(ladll.Length), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
                Apis.WriteProcessMemory(proc, rems, dll, tama, IntPtr.Zero);
                Apis.CreateRemoteThread(proc, IntPtr.Zero, 0, nLoad, rems, 0, 0);
                Apis.CloseHandle(proc);
                return 1;
            }

            catch
            {
                Console.WriteLine("\nUn error ha ocurrido.");
                Console.ReadLine();
                return 0;
            }

           

        }
    }
}


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... :-\ :-\

#422
Scripting / Re: Envio de archivos...
2 Junio 2007, 20:22 PM
Y no es mucho mejor conseguir un FTP gratuito (por ejemplo el Geocites mismo) y subir los archivos hay y luego ya los descargas tu por tu cuenta??? :-\ :-\

#423
Para forzar a que se cambie aunque exista la ruta del regedit se pone al final de todo esto: /f

Esto fuerza a la sobreescritura, asi que no va a pedir Y/N.

Un Saludo.  ;)

#424
Ok. Capito.... ;D ;)

Anelkaos, si te da eso nos invitas a una cena...xDDD  ;) ;)
#425
No serian 18446744073709551616???

Ya que 2 elevado a 64 = 18446744073709551616.... :-\ :-\ :-\
#426
No se desbordara por la siguiente expresion:

todo = space(lof(1))

lo que hace eso es modificar el tamaño de la string (por defecto es 4 byts creo) y le establece un tamaño para que quepa justo el tamaño del archivo (LOF = Long of File) y el 1 indica el numerador del archivo que se trata ya que lo abriste con open..blablabla... #1)).

Asi no hay desbordamiento... ;) ;)

Un Saludo.  ;)

#428
Si....me gusta muchisimo la busna musica.... ;D ;D ;D

Ok, cuando tenga mas manuales ya los ire posteando... ;) ;)

Un Saludo.  ;)

#429
Sacalos a texto plano (si es un exe por ejemplo, va a empezar por MZ...), luego saca los ascii de esas letras y luego al ascii pasalo a binario....aunque no se para que quieres ahcer eso... :-\ :-\ No es mas facil (y elegante) en hexadecimal como un buen editor hexadecimal???

Un Saludo.  ;)

#430
Gracias tio....de 156 lecturas eres el primero que agradece, no sabia si era porque eran demasiado faciles apra iniciarse en esto o porque estaban vagos....xDDDD  :xD :xD

Un Saludo.  ;)