y si por ejemplo quisiera iniciar un socket?
tendria que llamar la api de socket, darle los parametros a la estructura iDat y ejecutarlo desde la funcion Resident?
porque bueno, logro hacer todo esto que coloque... y si lo entiendo, pero tendria que hacer todo lo que necesite con estructuras, por ejemplo
pipe, socket, etc...?
y funciones extras como Send y Recv o conect, etc?, donde las colocaria?, eso es lo que no entiendo, como o donde colocar todo lo demas que necesite?
espero darme a entender, las apis se como usarlas y donde van, pero los demas parametros no se donde colocarlos
y si, ese es el problema de usar ese método (por eso te comenté primero lo de inyección del executable donde solo tenes que preocuparte de "inyectarlo bien"), el tema de los parámetros tendrías que hacer algo así:
typedef struct funciones{
PVOID func1;//no necesariamente PVOID, solo para ejemplo
PVOID CreateFile;
PVOID recv;
//...
PVOID funcN;
};
typedef struct datos{
HANDLE hFile;
SOCKET s;
CHAR nombre[XX];
PVOID buffer[512];//etc...
};
struct me{
funciones f;
datos d;
};
void X(struct me *yo){
yo->d.hFile=yo->f.CreateFile(yo->d.nombre/*...*/);
//....
yo->f.recv(yo->d.s,yo->d.buffer,512,0);
}
e incluso podrías tener varias funciones (aunque tendrías que hacer una especie de "relocado")
typedef struct mefunc{
PVOID init;
PVOID dosomething;
}
struct me{
mefunc m;
funciones f;
datos d;
};
void init(){
return;
}
//...
me.m.init=init;
//...
me.m.init+=-mebaseaddres+inyectionaddress;
//...
donde baseaddress sería la dirección de la primera función (suponiendo que estén en orden secuncial) e inyectionaddress la dirección que te devuelve virtualalloc (en la víctima)...
otro ejemplo
aqui podria usar un for( ; ; ) ? y si puedo donde o como lo hago funcionar desde la inyeccion?, porque se que no puedo hacer esto
DWORD Resident(iDat *base)
{
base->pCreateMutex(NULL, 0, base->Mutex);
for(i = 0; i<2, i++);
};
espero esto pueda hacer mas facil enteder mi duda, soy malo explicando jaja
puedes usar cualquier * instrucción del lenguaje sin problemas, el probema es con las llamadas intermodulares (funciones en otros espacios de memoria [dll's])
S2
El * es porque "en teoría" no deberías tener problemas dado que esas instrucciones son traducidas como saltos relativos (en el caso de C++ new y delete obviamente no van a estar disponibles).