Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Belial & Grimoire en 2 Enero 2011, 01:32 am



Título: es posible hacer esto en una inyeccion sin dll?
Publicado por: Belial & Grimoire en 2 Enero 2011, 01:32 am
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

Código
  1. struct TDatos_MessageBoxA
  2. {
  3.    _MessageBoxA direccionMessageBoxA;
  4.    char titulo[255], texto[255];
  5. };
  6.  
  7. void Hilo_MessageBoxA(TDatos_MessageBoxA *datos)
  8. {
  9.    datos->direccionMessageBoxA(0, datos->texto, datos->titulo, 0);
  10. }

Seria lo mismo que yo hiciera esto?

Código
  1. void Message()
  2. {
  3.   MessageBoxA(pID, "descifra.me", "Codigo inyectado!");
  4. }
  5.  
  6. void Inyectar_MessageBoxA(DWORD pID)
  7.  
  8. ////////////////////////////////////
  9.  
  10. Quitando
  11.  
  12. datos.direccionMessageBoxA = (_MessageBoxA)GetProcAddress(GetModuleHandle("USER32.DLL"), "MessageBoxA");
  13.    sprintf(datos.titulo, titulo);
  14.    sprintf(datos.texto, texto);
  15.  
  16. //////////////////////////////
  17.  

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
  1. typedef int (WINAPI *_MessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT);
  2.  
  3. struct TDatos_MessageBoxA
  4. {
  5.    _MessageBoxA direccionMessageBoxA;
  6.    char titulo[255], texto[255];
  7. };
  8.  
  9. void Hilo_MessageBoxA(TDatos_MessageBoxA *datos)
  10. {
  11.    datos->direccionMessageBoxA(0, datos->texto, datos->titulo, 0);
  12. }
  13.  
  14. int main()
  15. {
  16.    DWORD pID;
  17.    HWND hWnd;
  18.  
  19.    hWnd = FindWindow("SciCalc", NULL);
  20.  
  21.    if(hWnd!=NULL)
  22.    {
  23.        GetWindowThreadProcessId(hWnd, &pID);
  24.        Inyectar_MessageBoxA(pID, "descifra.me", "Codigo inyectado!");
  25.    }
  26.  
  27.    return 0;
  28. }
  29.  
  30. void Inyectar_MessageBoxA(DWORD pID, char* titulo, char* texto)
  31. {
  32.    DWORD tamFunc;
  33.    HANDLE tHandle, funcionRemota;
  34.    TDatos_MessageBoxA datos, *direccionDatosRemotos;
  35.    void* direccionFuncionRemota;
  36.  
  37.    tHandle = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pID);
  38.  
  39.    datos.direccionMessageBoxA = (_MessageBoxA)GetProcAddress(GetModuleHandle("USER32.DLL"), "MessageBoxA");
  40.    sprintf(datos.titulo, titulo);
  41.    sprintf(datos.texto, texto);
  42.  
  43.    direccionDatosRemotos = (TDatos_MessageBoxA*)VirtualAllocEx(tHandle, 0, sizeof(TDatos_MessageBoxA), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
  44.    WriteProcessMemory(tHandle, direccionDatosRemotos, &datos, sizeof(TDatos_MessageBoxA), NULL);
  45.  
  46.    tamFunc = (DWORD)Inyectar_MessageBoxA - (DWORD)Hilo_MessageBoxA;
  47.  
  48.    direccionFuncionRemota = VirtualAllocEx(tHandle, 0, tamFunc, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  49.    WriteProcessMemory(tHandle, direccionFuncionRemota, (void*)Hilo_MessageBoxA, tamFunc, NULL);
  50.  
  51.     WaitForSingleObject(funcionRemota,INFINITE);
  52.   CloseHandle(funcionRemota);
  53.  
  54.   VirtualFreeEx(tHandle,direccionFuncionRemota,0,MEM_RELEASE);
  55.   VirtualFreeEx(tHandle,direccionDatosRemotos,0,MEM_RELEASE);  
  56.  
  57.   CloseHandle(tHandle);  
  58. }