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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 [2]
11  Programación / Programación C/C++ / dll inject by c3r0x.. en: 5 Agosto 2007, 02:59 am
Bueno me encontrada en mi pc sin nd q hacer y de mis anteriores code encontre uno dll inj q lo aplique a una tool q habia codeado (era especia de consola  de comandos programada por mi) al caso q decidi sacar parte del codigo y pegarlo..


Editado: pongo un screen




InjDLL.c
Código:
/*
Name: InjDll
Autor:c3r0x

*/

#include <windows.h>
#include <Tlhelp32.h>
#include <string.h>
#include <stdio.h>

#define PID 10     //definimos PID cone l valor 10

     
int Procesos ()  //funcion muestra procesos
{
    HANDLE cap;
    PROCESSENTRY32 p;
    int i;
    int pid;
    int l=1;
   
    printf("[+] Cargando Procesos..\n");
    cap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //obtenemos una captura de los procesos (cap)
    Process32First(cap,&p); //guardamos el primero proceso
    printf(" 1 proceso - %s", p.szExeFile); //lo printeamos
    do //bucle para ir recorriendo proceso a proceso
    {   
      printf ("%i proceso - %s\n ", l,p.szExeFile);
      l++;
     
       
    }while( Process32Next(cap,&p)); //terminamos hasta llegar al ultimo
   CloseHandle(cap); //cerramos el handle
   return 0; //retornamos a 0
   
}

int Buscap(char *proc)  //funcion q busca pid segun sus parametros introducidos
{
    PROCESSENTRY32 p;
    HANDLE cap;
    int pid = 0;
   
    cap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    Process32First(cap,&p); //nuestro primer proceso
    //bucle comparamos proceso a proceso y guardamos su pid en "pid"
   
       do
    {   
       if( strcmp(proc,p.szExeFile)==0)
        {
            pid = p.th32ProcessID;       
        }
    }   
    while( Process32Next(cap,&p)); //no abra q decirlo
    CloseHandle(cap); //igual mente
    return pid;
   
     }
   
int Injectar(char dll[]) //funcion q inyectar
{
    //declaramos
    HANDLE cap;
    HANDLE proc1;
    HANDLE hThread;
    PROCESSENTRY32 p;
    DWORD pid ;
    char pid2[PID];
    int i;
    HMODULE hKernel;
    LPVOID loadl;
    PVOID amem;
   
       
    int dll2 = strlen(dll) + 1;  //sacamos los bytes de la dll y lo guardamos en dll2
    printf("Introduce el Pid: ");
    gets(pid2); //guardamos entrada del teclado
    pid = (DWORD)atoi(pid2); // lo pasamos como int y lo convertimos a DWORD guardandolo en pid

     
    if((proc1=OpenProcess(PROCESS_ALL_ACCESS, false, pid))== NULL) //abrimos el proceso, si no..
    {
      printf("Error: No se Pudo Abrir el Proceso o no Existe!\n");
  return 1;
    }
   
     //abrimos el proceso
    if((hKernel=GetModuleHandle("kernel32.dll"))== NULL) //obtenemos el handle de la libreria si no..
    {
      printf("Error: No se Pudo Allar el Handle");
      return 1;
    }
   
     
    if((loadl = (LPVOID)GetProcAddress(hKernel, "LoadLibraryA"))== NULL) //obtenemos la dir de la funcion LoadLibraryA en el kernel32.dll
    {
      printf("Error: No se Pudo Obtener la Direccion de LoadLibraryA ");
      return 1;
    }
   
     //reservamos memoria  de la dll  en el proceso remoto
   
    if((amem = (LPVOID)VirtualAllocEx(proc1,NULL, dll2, MEM_COMMIT,PAGE_READWRITE))== NULL)
    {
      printf("Error: No se Pudo Reservar Memoria en el Proceso");
      return 1;
    }                                       
   
    //escribimos en memoria ( donde reservamos)
    WriteProcessMemory(proc1,(LPVOID)amem,dll,dll2,NULL);
    //ejecutamos donde habiamos escrito en memoria
    hThread=CreateRemoteThread(proc1,NULL,0,(LPTHREAD_START_ROUTINE)loadl,(LPVOID) amem,0,NULL);
    CloseHandle(proc1);
    return 0;
}
   


int main (int argc, char** argv)
 {
         
         int pid;
       
   
   
    if(argc < 2) //si los argumentos son mayores a 2
{
      printf("\n--------InjDll by c3r0x---------\n");
      printf("InjDll -p Listar Procesos \n");
      printf("InjDll -pid <proceso> Buscar Pid");
          printf("InjDll -inj <dll> Dll\n\n");
          printf("Ejemplo: InjDll -i  midll.dll\n");
          printf("Ejemplo: IndDll -pid explorer.exe\n");
         
return 0;

}
     if(!strcmp(argv[1],"-p")) //si comparamos y es iguao (-p) entonces
     {
        Procesos();
        return 0;
     }
          if(!strcmp(argv[1],"-pid"))
     {
        pid= (DWORD)Buscap(argv[2]);
     
                 if( pid<9999)
     {
         
        printf("[+]Proceso = %s  \n",argv[2]);
         
        printf("[+]PID = %d\n",pid);
       
     }
        return 0;
     }
     
         if(!strcmp(argv[1],"-i"))
     {
        printf("\n--------InjDll by c3r0x---------\n");
        printf("[+]Procesando informacion...\n");
        printf("Dll a Inyectar =  %s\n\n",argv[2]);
        Injectar(argv[2]);
       
        return 0;
     }

       
     
       
       
        return 0;
     }

libreria mi dll.c

Código:
#include <windows.h>



BOOL APIENTRY DllMain (HINSTANCE hmodule,     //hmodule recibe la direccion base donde esta cargada la dll
                       DWORD reason,          //bueno la reason para eso usamos swtich para poner en alguna de las 4
                       LPVOID reserved    )  //
{
    switch (reason)  //la razon son 4 vamos una a una
    {     
      case DLL_PROCESS_ATTACH: //se llama cuando la dll esta cargada en el proceso
             MessageBoxA(NULL, "Pasa viejo toche", "Pasa viejo toche", MB_OK); //cuando estemos cargados ejecutamos MessageBox depliega mensaje
        break;

      case DLL_PROCESS_DETACH: // lo contrario  a lo de arriba ( no importante)
        break;

      case DLL_THREAD_ATTACH:  //su nombre lo dice cuando estamos cargado (dll) y se alla creado un thread ejecutamos lo q pongamos
        break;

      case DLL_THREAD_DETACH: //lo contrario de arriba ( no importante)
        break;
    }
    return TRUE;
}

luego pongo la tool completa, ya q la estoy actualizando con el code inject es un poco mas compleja

No es nd pero espero q les sirva ;)

salu2
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines