miércoles, 5 de enero de 2011

Obtener Ruta de Procesos

Trabajaba en mi RAT, mejorando el listado de procesos y decidí ponerle la ruta de los procesos.
Investigando un poco y con el conocimiento que tenia les traigo esta función, se debe de poner en un modulo.

01 Private Declare Function GetModuleFileNameEx Lib "PSAPI.DLL" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
02 Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
03 Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
04 Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
05
06 Private Const MAX_PATH As Long = 260
07 Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
08
09
10 Private Function GetPathPID(pID As Long) As String
11 Dim lHandle As Long
12 Dim lEpID As Long
13 Dim lModule(250) As Long
14 Dim lByNeed As Long
15 Dim sPrName As String
16 Dim lSize As Long
17
18 lHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID)
19
20 If lHandle = 0 Then Exit Function
21 lEpID = EnumProcessModules(lHandle, lModule(1), MAX_PATH, lByNeed)
22
23 If lEpID = 0 Then Exit Function
24 sPrName = Space(MAX_PATH)
25 lSize = MAX_PATH
26
27 lEpID = GetModuleFileNameEx(lHandle, lModule(1), sPrName, lSize)
28 sPrName = Trim(Left(sPrName, lEpID))
29
30 lEpID = CloseHandle(lHandle)
31
32 GetPathPID = sPrName
33 End Function

Les explico un poco como lo hace:
[+]La API, GetModuleFileNameEx lo que hace es obtener la ruta, apartir de un handle del proceso y un modulo.
[+]la API, OpenProcess devuelve el handle a partir del pID del proceso(Process ID), se puede especificar apartir de demás APIs.
[+]La API, CloseHandle cierra el handle que hemos usado.
[+]La API, EnumProcessModules devuelve un array de los modulos del proceso.
[+]La constante, PROCESS_ALL_ACCESS sirve para tener acceso al proceso y asi la API devuelve el handle del proceso
[+]La constante, MAX_PATH una constante para minimizar el uso de numero xD.

Solo necesitan especificar el pID del proceso y les devolverá la ruta

Saludos!
xNeoDarkx

No hay comentarios:

Publicar un comentario