hola
bueno, se que no se debe de revivir post antiguos asi que preguntare sobre un post que encontre
vi un post donde hablaban de inyecciones sin DLL, abajo posteare el codigo, pero tengo una pregunta
alli se pone una estructura, despues en una funcion se llama a la estructura y despues se utiliza para saber el tamaño a reservar, pero si yo en vez de hacer esto
Seria lo mismo que yo hiciera esto?
Y en vez dehacer una estructura solo hacer una funcion en donde si quiero iniciar un socket, funcione correctamente, o eso no es posible?
espero me puedan ayudar, les dejo el codigo completo que encontre
bueno, se que no se debe de revivir post antiguos asi que preguntare sobre un post que encontre
vi un post donde hablaban de inyecciones sin DLL, abajo posteare el codigo, pero tengo una pregunta
alli se pone una estructura, despues en una funcion se llama a la estructura y despues se utiliza para saber el tamaño a reservar, pero si yo en vez de hacer esto
Código (c) [Seleccionar]
struct TDatos_MessageBoxA
{
_MessageBoxA direccionMessageBoxA;
char titulo[255], texto[255];
};
void Hilo_MessageBoxA(TDatos_MessageBoxA *datos)
{
datos->direccionMessageBoxA(0, datos->texto, datos->titulo, 0);
}
Seria lo mismo que yo hiciera esto?
Código (c) [Seleccionar]
void Message()
{
MessageBoxA(pID, "descifra.me", "Codigo inyectado!");
}
void Inyectar_MessageBoxA(DWORD pID)
////////////////////////////////////
Quitando
datos.direccionMessageBoxA = (_MessageBoxA)GetProcAddress(GetModuleHandle("USER32.DLL"), "MessageBoxA");
sprintf(datos.titulo, titulo);
sprintf(datos.texto, texto);
//////////////////////////////
Y en vez dehacer una estructura solo hacer una funcion en donde si quiero iniciar un socket, funcione correctamente, o eso no es posible?
espero me puedan ayudar, les dejo el codigo completo que encontre
Código (c) [Seleccionar]
typedef int (WINAPI *_MessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT);
struct TDatos_MessageBoxA
{
_MessageBoxA direccionMessageBoxA;
char titulo[255], texto[255];
};
void Hilo_MessageBoxA(TDatos_MessageBoxA *datos)
{
datos->direccionMessageBoxA(0, datos->texto, datos->titulo, 0);
}
int main()
{
DWORD pID;
HWND hWnd;
hWnd = FindWindow("SciCalc", NULL);
if(hWnd!=NULL)
{
GetWindowThreadProcessId(hWnd, &pID);
Inyectar_MessageBoxA(pID, "descifra.me", "Codigo inyectado!");
}
return 0;
}
void Inyectar_MessageBoxA(DWORD pID, char* titulo, char* texto)
{
DWORD tamFunc;
HANDLE tHandle, funcionRemota;
TDatos_MessageBoxA datos, *direccionDatosRemotos;
void* direccionFuncionRemota;
tHandle = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pID);
datos.direccionMessageBoxA = (_MessageBoxA)GetProcAddress(GetModuleHandle("USER32.DLL"), "MessageBoxA");
sprintf(datos.titulo, titulo);
sprintf(datos.texto, texto);
direccionDatosRemotos = (TDatos_MessageBoxA*)VirtualAllocEx(tHandle, 0, sizeof(TDatos_MessageBoxA), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(tHandle, direccionDatosRemotos, &datos, sizeof(TDatos_MessageBoxA), NULL);
tamFunc = (DWORD)Inyectar_MessageBoxA - (DWORD)Hilo_MessageBoxA;
direccionFuncionRemota = VirtualAllocEx(tHandle, 0, tamFunc, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(tHandle, direccionFuncionRemota, (void*)Hilo_MessageBoxA, tamFunc, NULL);
WaitForSingleObject(funcionRemota,INFINITE);
CloseHandle(funcionRemota);
VirtualFreeEx(tHandle,direccionFuncionRemota,0,MEM_RELEASE);
VirtualFreeEx(tHandle,direccionDatosRemotos,0,MEM_RELEASE);
CloseHandle(tHandle);
}