Ir al contenido


Foto

Inyeccion Dll con GetprocessID?


  • Por favor identifícate para responder
6 respuestas en este tema

#1 kikinpsy

kikinpsy

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 04 noviembre 2010 - 11:03

Hola,soy nuevo y necesito una ayudita con lo que quiero intentar hacer,es lo siguiente... Inyectar una dll usando getprocessid,el problema es  el proceso al que lo quiero inyectar usa 2 procesos(Ejemplo Test.exe) hay alguna manera de que busque el PID correcto y lo inyecte en ese proceso?

Saludos y espero su ayuda  :embarrassed:
  • 0

#2 Mixel Adm

Mixel Adm

    Member

  • Miembros
  • PipPip
  • 23 mensajes
  • LocationChilangolandia

Escrito 04 noviembre 2010 - 11:12

Una pregunga tu lanzas el proceso victima desde Delphi o vas a buscarlo en el sistema?
  • 0

#3 kikinpsy

kikinpsy

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 04 noviembre 2010 - 11:14

Una pregunga tu lanzas el proceso victima desde Delphi o vas a buscarlo en el sistema?


Exactamente lanzar el proceso victima es algo que me falto mencionar  :cheesy:
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 noviembre 2010 - 11:17

Date una vuelta por este hilo, aunque está en C, te puede aclarar las cosas

Y por este también

Salud OS
  • 0

#5 kikinpsy

kikinpsy

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 04 noviembre 2010 - 11:44

Date una vuelta por este hilo, aunque está en C, te puede aclarar las cosas

Y por este también

Salud OS


La del codigo C es inyeccion de codigo directa, y la otra si me ayudó un poco pero no logro hacer un string para indicarle la ruta de la Dll a inyectar  :cheesy:
  • 0

#6 kikinpsy

kikinpsy

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 04 noviembre 2010 - 01:02

Podrian ayudarme para mejorar esta funcion o hacerla un poco mejor...Ponerle un string para la ruta de la DLL y buscar el pid proceso correcto ya que esta funcion solo agarra un proceso  :embarrassed:



delphi
  1. Function GetProcessID(Const ExeFileName: string; var ProcessId: integer;
  2.                       Const ProcessNo :Integer = 1): boolean;
  3. var
  4.   ContinueLoop: BOOL;
  5.   FSnapshotHandle: THandle;
  6.   FProcessEntry32: TProcessEntry32;
  7.   Temp: Integer;
  8. begin
  9.   result := false;
  10.   temp:=1;
  11.  
  12.   FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  13.   FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  14.   ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  15.  
  16.   while integer(ContinueLoop) <> 0 do
  17.   begin
  18.   if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
  19.     or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0)  then
  20.     begin
  21.       If Temp = ProcessNo then
  22.       begin
  23.         ProcessId:= FProcessEntry32.th32ProcessID;
  24.         result := true;
  25.         break;
  26.       end  else inc(Temp);
  27.     end;
  28.   ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  29.   end;
  30.   CloseHandle(FSnapshotHandle);
  31. end;


  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 noviembre 2010 - 09:48

Hola,soy nuevo y necesito una ayudita con lo que quiero intentar hacer,es lo siguiente... Inyectar una dll usando getprocessid,el problema es  el proceso al que lo quiero inyectar usa 2 procesos(Ejemplo Test.exe) hay alguna manera de que busque el PID correcto y lo inyecte en ese proceso?



Bienvenido al foro kikinpsy.

Esa función que intentas usar, getprocessid y cuyo código as expuesto, no sirve para realizar una inyección dll. Lo que hace es buscar entre los procesos que se están ejecutando y te devuelve el Pid del primero que coincida con el nombre del que buscas.

Existen varias formas de conseguir tu objetivo. Una de las formas mas sencillas de realizar una inyección de dll es mediante la API CreateRemoteThread dentro del bucle de la función expuesta, getprocessid, de esta forma te inyectas en todos los procesos que coincidan con el nombre buscado.

Este sería un ejemplo en C:


cpp
  1. // Inject con CreateRemoteThread
  2. // Inyecta en todos los procesos abiertos con el nombre dado
  3. HMODULE InjectCRT(char* Proceso, char* dll)
  4. {
  5.   if(!*Proceso || !*dll) return 0;
  6.  
  7.   int    PId = 0;
  8.   HANDLE  hThread = 0;
  9.   DWORD  ExitCode = 0;
  10.   LPTHREAD_START_ROUTINE hLib; // = (LPTHREAD_START_ROUTINE)LoadLibrary("dll");;
  11.   PROCESSENTRY32 proc = { sizeof(proc) };
  12.   HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  13.   if(hSysSnapshot != reinterpret_cast<HANDLE>(-1) && Process32First(hSysSnapshot, &proc)){
  14.     do{
  15.         if(!stricmp(proc.szExeFile, Proceso)){
  16.           PId = proc.th32ProcessID;
  17.           if(PId){
  18.             HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false,PId);
  19.             if(hProc){
  20.               // Localizo memoria en el espacio de direcciones de la víctima
  21.               void*  Buffer = VirtualAllocEx(hProc, 0, strlen(dll)+1, MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
  22.               if(Buffer){
  23.                 if(WriteProcessMemory(hProc, Buffer, (void*)dll, strlen(dll)+1, NULL)){
  24.                   hLib = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32.dll"), "LoadLibraryA");
  25.                   if(hLib){
  26.                     hThread =:: CreateRemoteThread(hProc, NULL, 0, hLib, Buffer, 0, 0);
  27.                     if(hThread){
  28.                       WaitForSingleObject(hThread, INFINITE ); // Espero a que se cree el Thread
  29.                       GetExitCodeThread(hThread, &ExitCode);  // Termino el Thread
  30.                       CloseHandle(hThread);                    // Cierro el Handle hThread
  31.                     }
  32.                   }
  33.                 }
  34.                 // libero la memoria localizada...               
  35.                 VirtualFreeEx(hProc, Buffer, 0, MEM_RELEASE); // Libero memoria
  36.               }
  37.               CloseHandle(hProc);                      // Cierro el Handle hProc
  38.             }
  39.           }
  40.         }
  41.     }while(Process32Next(hSysSnapshot, &proc));
  42.   }
  43.   CloseHandle(hSysSnapshot);
  44.  
  45.   return (HMODULE)ExitCode;
  46. }



Saludos.
  • 0




IP.Board spam blocked by CleanTalk.