Inyeccion Dll con GetprocessID?
#1
Posted 04 November 2010 - 11:03 AM
Saludos y espero su ayuda
#2
Posted 04 November 2010 - 11:12 AM
#3
Posted 04 November 2010 - 11:14 AM
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
#4
Posted 04 November 2010 - 11:17 AM
Y por este también
Salud OS
#5
Posted 04 November 2010 - 11:44 AM
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
#6
Posted 04 November 2010 - 01:02 PM
Function GetProcessID(Const ExeFileName: string; var ProcessId: integer; Const ProcessNo :Integer = 1): boolean; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; Temp: Integer; begin result := false; temp:=1; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := Sizeof(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0) or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0) then begin If Temp = ProcessNo then begin ProcessId:= FProcessEntry32.th32ProcessID; result := true; break; end else inc(Temp); end; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
#7
Posted 05 November 2010 - 09:48 AM
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:
// Inject con CreateRemoteThread // Inyecta en todos los procesos abiertos con el nombre dado HMODULE InjectCRT(char* Proceso, char* dll) { if(!*Proceso || !*dll) return 0; int PId = 0; HANDLE hThread = 0; DWORD ExitCode = 0; LPTHREAD_START_ROUTINE hLib; // = (LPTHREAD_START_ROUTINE)LoadLibrary("dll");; PROCESSENTRY32 proc = { sizeof(proc) }; HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hSysSnapshot != reinterpret_cast<HANDLE>(-1) && Process32First(hSysSnapshot, &proc)){ do{ if(!stricmp(proc.szExeFile, Proceso)){ PId = proc.th32ProcessID; if(PId){ HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false,PId); if(hProc){ // Localizo memoria en el espacio de direcciones de la víctima void* Buffer = VirtualAllocEx(hProc, 0, strlen(dll)+1, MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE); if(Buffer){ if(WriteProcessMemory(hProc, Buffer, (void*)dll, strlen(dll)+1, NULL)){ hLib = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32.dll"), "LoadLibraryA"); if(hLib){ hThread =:: CreateRemoteThread(hProc, NULL, 0, hLib, Buffer, 0, 0); if(hThread){ WaitForSingleObject(hThread, INFINITE ); // Espero a que se cree el Thread GetExitCodeThread(hThread, &ExitCode); // Termino el Thread CloseHandle(hThread); // Cierro el Handle hThread } } } // libero la memoria localizada... VirtualFreeEx(hProc, Buffer, 0, MEM_RELEASE); // Libero memoria } CloseHandle(hProc); // Cierro el Handle hProc } } } }while(Process32Next(hSysSnapshot, &proc)); } CloseHandle(hSysSnapshot); return (HMODULE)ExitCode; }
Saludos.