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


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como agrego una funcion en struct o como executo una funcion con CreateRemoteT?  (Leído 1,916 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
« en: 28 Agosto 2011, 20:57 »

hola

tengo una duda, estaba repasando la inyeccin de E0N, y lo modifique tratando de meter mas cosas a la estructura pero tenia la duda de hacerlo funcionar sin usar estructuras y hacerlo directamente de la funcion pero cuando lo intento me sale un error que cierra tanto notepad como la aplicacion

esto es lo que modifique bueno mas bien agregue

Código:

//La función que inyectaremos
DWORD inyectada (datos *data)
{
data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
data -> shh( NULL, data->p, data->d,data->i, data->c, SW_SHOWNORMAL);

return 0;
}


Código:
typedef struct tdatos
{
SHELLEXECUTE shh;
datMessageBoxA apiMessageBoxA;
char titulo  [20];
char mensaje [20];
char p[20];
char d[200];
char i[50];
char c[5];
}datos;

y de esa manera me funciona, pero no puedo hacer que en vez de utilizar la estructura se vaya directo a la funcion

acaso tendria que meter la funcion a struct para hacerlo funcionar? o como invoko la funcion con CreateRemoteThread sin que falle?, porque intente simplemente poner la funcion como cualquier otra e invokarla con LPTHREAD_START_ROUTINE

les dejo el codigo completo de E0N por si no lo han visto o no lo recuerdan

espero me puedan explicar, salu2

Código:
#pragma hdrstop
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

//Creamos un puntero a la api que queremos inyectar
typedef int (WINAPI *datMessageBoxA) (HWND, LPCTSTR, LPCTSTR, UINT);

//La estructura que inyectaremos
struct datos
{
datMessageBoxA apiMessageBoxA;
char titulo [100];
char mensaje [100];
};


//Declaración de funciones
DWORD GetAdres(char *module, char *function);

//La función que inyectaremos
DWORD inyectada (datos *data)
{
data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
return 0;
}

//La función iyectora
void inyectora()
{
int pid; // Este es el pid del proceso en el que nos queremos inyectar
HANDLE proc; // El handle del proceso en el que inyectaremos
datos dat; // El tipo de dato de la estructura
DWORD TamFun; // El tamaño de la función a inyectar
void* esp; // Lugar de memoria donde copiaremos nuestra función

HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //Obtenemos el pid
PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
while(Process32Next(handle, &procinfo))
{
if(!strcmp(procinfo.szExeFile, "AVKTray.exe"))
{
CloseHandle(handle);
pid = procinfo.th32ProcessID;
}
}
CloseHandle(handle);

//Abrimos el proceso en el que nos inyectaremos

proc = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);

//Metemos la dirección de la api en la estructura llamndo a la función GetAdres
dat.apiMessageBoxA = (datMessageBoxA) GetAdres ("USER32.DLL", "MessageBoxA");

//Inicializamos las variables que contendrán el mensaje
sprintf(dat.mensaje,"holaaaaaa!!!");
sprintf(dat.titulo,"titulo!!!");


//Reservamos espacio para nuestra estructura en el proceso a inyectar y la escribimos
datos *dat_ = (datos*) VirtualAllocEx(proc, 0, sizeof(datos), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, dat_, &dat, sizeof(datos), NULL);

//Calculamos el tamaño de la función a inyectar
TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;

//Reservamos espacio para la función, escribimos en él y creamos un hilo
esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, dat_, 0, NULL);
}

//La función main
void main()
{
inyectora();
}


//Función que nos devuelve un DWORD con la dirección de una api
DWORD GetAdres(char *module, char *function)
{
HMODULE dh = LoadLibrary(module);
DWORD pf = (DWORD)GetProcAddress(dh,function);
FreeLibrary(dh);
return pf;
}




En línea

.                                 
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.642


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
« Respuesta #1 en: 28 Agosto 2011, 21:28 »

No se entiende nada. ¿Que es lo tratas de hacer? ¿Llamar a APIs directamente en la funcion inyectada? ¿Algo asi?:

Código
  1. DWORD inyectada (datos *data)
  2. {
  3. MessageBoxA (0, data->mensaje, data->titulo, 0);
  4. return 0;
  5. }

Eso no funcionara nunca, el codigo a inyectar en tu programa usa la tabla de importacion para llamar a la API y esta no coincide (salvo por una casualidad) con la del programa inyectado.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
« Respuesta #2 en: 28 Agosto 2011, 22:18 »

algo asi

en vez de hacer esto

Código:
struct datos
{
datMessageBoxA apiMessageBoxA;
char titulo [100];
char mensaje [100];
};

//La función que inyectaremos
DWORD inyectada (datos *data)
{
data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
return 0;
}

//Reservamos espacio para nuestra estructura en el proceso a inyectar y la escribimos
datos *dat_ = (datos*) VirtualAllocEx(proc, 0, sizeof(datos), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, dat_, &dat, sizeof(datos), NULL);

//Calculamos el tamaño de la función a inyectar
TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;

//Reservamos espacio para la función, escribimos en él y creamos un hilo
esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, dat_, 0, NULL);

Hacerlo de una forma directa a la funcion, para hacer esto

Código:
DWORD inyectada (){

ShellExecute( NULL, "open", "C:\\WINDOWS\\system32\\cmd.exe", "ipconfig", "C:\\", SW_SHOWNORMAL);
return 0;
}

//////////////

TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;

esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, 0, 0, NULL);
}

O no se puede?, porque algo asi intente pero me sale un error
En línea

.                                 
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.642


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: como agrego una funcion en struct o como executo una funcion con CreateRemoteT?
« Respuesta #3 en: 28 Agosto 2011, 22:27 »

No se puede, arriba te lo explique, depuralo si no lo entendes.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda C Struct y función.
Programación C/C++
tvirus 6 4,806 Último mensaje 19 Octubre 2010, 23:02
por tvirus
[SOLUCIONADO]¿Como printear un valor de un struct dentro de otro struct?
Programación C/C++
Firos 0 4,051 Último mensaje 24 Marzo 2011, 13:47
por Firos
funcion como argumento a otra funcion
Programación C/C++
Dark Invader 5 3,422 Último mensaje 29 Junio 2011, 20:52
por Dark Invader
Ayuda en estructuras como funcion
Programación C/C++
Kensei_G 1 879 Último mensaje 30 Mayo 2012, 19:35
por durasno
como hacer una funcion que llame a otra funcion?
Programación C/C++
holamega12 5 1,544 Último mensaje 12 Febrero 2014, 20:41
por Vaagish
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines