[SOURCE]Inyeccion DLL y control de procesos!

Iniciado por Debci, 18 Agosto 2010, 19:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

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 (cpp) [Seleccionar]

#ifndef _PSCONTROL_H_
#define _PSCONTROL_H_
#include <Windows.h>
#include <iostream>
#include <cstdlib>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdio.h>
using namespace std;
int killProcess(DWORD pid)
{
   HANDLE proceso;
   proceso=OpenProcess(PROCESS_TERMINATE,FALSE,pid);

//cerramos el proceso
TerminateProcess(proceso,0);

CloseHandle(proceso);
return 0;

}
DWORD getPsId(const char* PsName)
{
DWORD ProcessID;    
HANDLE Handle;
PROCESSENTRY32 ProcI;

Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcI.dwSize=sizeof(PROCESSENTRY32);

while(Process32Next(Handle,&ProcI))
    if(!strcmp(ProcI.szExeFile,PsName))
       ProcessID=ProcI.th32ProcessID;


CloseHandle(Handle);

return ProcessID;
}
#endif


main.cpp
Código (cpp) [Seleccionar]

#include <windows.h>
#include <Tlhelp32.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include "PsControl.h"
using namespace std;
void main()
{
HANDLE psHandle;
LPVOID RemoteString;
LPVOID nLoadLibrary;
int PSpid;

DWORD psPID = getPsId("explorer.exe");
   cout << psPID << endl;
   killProcess(psPID);
system("explorer.exe");
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
   PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
cout << "[!]Buscando el proceso... "<< endl;
   while(Process32Next(handle, &procinfo))
   {
      if(!strcmp(procinfo.szExeFile, "explorer.exe"))
      {
          CloseHandle(handle);
  PSpid = procinfo.th32ProcessID;
  cout << "[+]Proceso encontrado!" << endl;
      }
   }
   CloseHandle(handle);


cout << "[!]Iniciando injecion de DLL..." << endl;
cout << "[+]Obteniendo handle del proceso..." << endl;
if(!(psHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PSpid)) == 0)
cout << "[-]Error al conseguir el handler del proceso!" << endl;
nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(psHandle,NULL,strlen("C:\\Users\\Administrador\\Documents\\Visual Studio 2008\\Projects\\Injectado\\Debug\\Injectado.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
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);
CreateRemoteThread(psHandle,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(psHandle);
getch();
}

El codigo no esta ordenado, he repetido una misma funcion 2 veces (lo arreglare) pero queria que me dijesen que tal.

Saludos