Jue Ene 06, 2011 9:26 am
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.
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
Investigando un poco y con el conocimiento que tenia les traigo esta función, se debe de poner en un modulo.
- Código:
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
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
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
Private Const MAX_PATH As Long = 260
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Function GetPathPID(pID As Long) As String
Dim lHandle As Long
Dim lEpID As Long
Dim lModule(250) As Long
Dim lByNeed As Long
Dim sPrName As String
Dim lSize As Long
lHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID)
If lHandle = 0 Then Exit Function
lEpID = EnumProcessModules(lHandle, lModule(1), MAX_PATH, lByNeed)
If lEpID = 0 Then Exit Function
sPrName = Space(MAX_PATH)
lSize = MAX_PATH
lEpID = GetModuleFileNameEx(lHandle, lModule(1), sPrName, lSize)
sPrName = Trim(Left(sPrName, lEpID))
lEpID = CloseHandle(lHandle)
GetPathPID = sPrName
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