Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Debci en 18 Agosto 2010, 19:44 pm



Título: [SOURCE]Inyeccion DLL y control de procesos!
Publicado por: Debci en 18 Agosto 2010, 19:44 pm
Buenas a todos, tras seguir investigando el API de windows, al final he conseguido injectar mi propia dll, en este caso bajo el proceso explorer.exe, que tras realizar pruebas he visto que se bloqueaba, por lo que el programa reinicia el proceso antes de injectar la DLL.

Se que me van a hechar la bronca por abrir el proceso con una call a system(); pero no queria complicarme demasiado la vida, al menos no ahora, queria asegurarme no mas de que funcionaba.

Luego encontre que los antivirus detectan el CreateRemoteThread como malicioso, asi que agradeceria algun otro metodo o consejo.

Sin mas el codigo:

PsControl.h
Código
  1. #ifndef _PSCONTROL_H_
  2. #define _PSCONTROL_H_
  3. #include <Windows.h>
  4. #include <iostream>
  5. #include <cstdlib>
  6. #include <tlhelp32.h>
  7. #include <tchar.h>
  8. #include <stdio.h>
  9. using namespace std;
  10. int killProcess(DWORD pid)
  11. {
  12.    HANDLE proceso;
  13.    proceso=OpenProcess(PROCESS_TERMINATE,FALSE,pid);
  14.  
  15. //cerramos el proceso
  16. TerminateProcess(proceso,0);
  17.  
  18. CloseHandle(proceso);
  19. return 0;
  20.  
  21. }
  22. DWORD getPsId(const char* PsName)
  23. {
  24. DWORD ProcessID;    
  25. HANDLE Handle;
  26. PROCESSENTRY32 ProcI;
  27.  
  28. Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  29. ProcI.dwSize=sizeof(PROCESSENTRY32);
  30.  
  31. while(Process32Next(Handle,&ProcI))
  32.     if(!strcmp(ProcI.szExeFile,PsName))
  33.        ProcessID=ProcI.th32ProcessID;
  34.  
  35.  
  36. CloseHandle(Handle);
  37.  
  38. return ProcessID;
  39. }
  40. #endif
  41.  

main.cpp
Código
  1. #include <windows.h>
  2. #include <Tlhelp32.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <iostream>
  6. #include "PsControl.h"
  7. using namespace std;
  8. void main()
  9. {
  10. HANDLE psHandle;
  11. LPVOID RemoteString;
  12. LPVOID nLoadLibrary;
  13. int PSpid;
  14.  
  15. DWORD psPID = getPsId("explorer.exe");
  16.    cout << psPID << endl;
  17.    killProcess(psPID);
  18. system("explorer.exe");
  19. HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  20.    PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
  21. cout << "[!]Buscando el proceso... "<< endl;
  22.    while(Process32Next(handle, &procinfo))
  23.    {
  24.       if(!strcmp(procinfo.szExeFile, "explorer.exe"))
  25.       {
  26.           CloseHandle(handle);
  27.   PSpid = procinfo.th32ProcessID;
  28.   cout << "[+]Proceso encontrado!" << endl;
  29.       }
  30.    }
  31.    CloseHandle(handle);
  32.  
  33.  
  34. cout << "[!]Iniciando injecion de DLL..." << endl;
  35. cout << "[+]Obteniendo handle del proceso..." << endl;
  36. if(!(psHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PSpid)) == 0)
  37. cout << "[-]Error al conseguir el handler del proceso!" << endl;
  38. nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
  39. RemoteString = (LPVOID)VirtualAllocEx(psHandle,NULL,strlen("C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
  40. WriteProcessMemory(psHandle,(LPVOID)RemoteString,"C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll",strlen("C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll"),NULL);
  41. CreateRemoteThread(psHandle,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
  42. CloseHandle(psHandle);
  43. getch();
  44. }
  45.  
El codigo no esta ordenado, he repetido una misma funcion 2 veces (lo arreglare) pero queria que me dijesen que tal.

Saludos


Título: Re: [SOURCE]Inyeccion DLL y control de procesos!
Publicado por: bizco en 18 Agosto 2010, 20:03 pm
NtCreateThread