Se que hay maneras mucho mas simples de hacerlo pero vi otra parecido por ahi y lo modifique,en vez de detectar el sbiedll.dll detecta los procesos dentro de la sandbox,otra manera de hacerlo,una tonteria vamos,saludos.
Private Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function IsProcessRunning(strServer, strProcess)
Dim Process, strObject
IsProcessRunning = False
strObject = "winmgmts://" & strServer
For Each Process In GetObject(strObject).InstancesOf("win32_process")
If UCase(Process.Name) = UCase(strProcess) Then
IsProcessRunning = True
Exit Function
End If
Next
End Function

Public Function ComputerName() As String
Dim cn As String
Dim ls As Long
Dim res As Long
 
cn = String(1024, 0)
ls = 1024
res = GetComputerName(cn, ls)
If res <> 0 Then
ComputerName = Mid(cn, 1, InStr(cn, Chr(0)) - 1)
Else
ComputerName = ""
End If
End Function

Uso:
If IsProcessRunning(ComputerName, "SandboxieDcomLaunch.exe") And _
IsProcessRunning(ComputerName, "SandboxieRpcSs.exe") Then End
"Concentrarse en las fortalezas, reconocer las debilidades, las oportunidades y tomar la guardia contra las amenazas."

―Sun Tzu
He optimizado un poco tu codigo, así no necesitas usar API's.
Public Function IsProcessRunning(ByVal sProcess As String) As Boolean
    On Error Resume Next
    
    Dim sCurrent As Object

    IsProcessRunning = False
    
    For Each sCurrent In GetObject("winmgmts://" & Environ$("Computername")).InstancesOf("Win32_Process")
        If UCase(sCurrent.Name) = UCase(sProcess) Then
            IsProcessRunning = True
            Exit Function
        End If
    Next
End Function
Ej. de Uso: If IsProcessRunning("SandboxieDcomLaunch.exe") And IsProcessRunning("SandboxieRpcSs.exe") Then End

PD: Lo hice al vuelo, ahora no puedo testear, cualquier fallo avisen.

//Regards.
Ikarus: Backdoor.VBS.SafeLoader
Agnitum: Trojan.VBS.Safebot.A
http://indeseables.github.io/
Scorpio escribió:He optimizado un poco tu codigo, así no necesitas usar API's.
Public Function IsProcessRunning(ByVal sProcess As String) As Boolean
    On Error Resume Next
    
    Dim sCurrent As Object

    IsProcessRunning = False
    
    For Each sCurrent In GetObject("winmgmts://" & Environ$("Computername")).InstancesOf("Win32_Process")
        If UCase(sCurrent.Name) = UCase(sProcess) Then
            IsProcessRunning = True
            Exit Function
        End If
    Next
End Function
Ej. de Uso: If IsProcessRunning("SandboxieDcomLaunch.exe") And IsProcessRunning("SandboxieRpcSs.exe") Then End

PD: Lo hice al vuelo, ahora no puedo testear, cualquier fallo avisen.

//Regards.
Eso mismo iba a hacer lo de no usar apis pero te adelantaste, me estaba mirando lo de los objects porque todavia no se manejarlos,acabo de probar el codigo y funciona perfectamente
xxxPoseidonxxx escribió:Yo recuerdo haber hecho una, solo hacia detectar un DLL y si estaba pues... y sino pues ejecutar ajjaja
Si a eso me referia con lo de que hay formas de hacerlo mas simple con lo de getmodulehandle en sbiedll.dll,esto es solo otra forma.
La unica pega que le veo a esta es que podria saltar cuando esten esos procesos activos pero porque el sandboxie tenga abierto esos procesos por tener otro programa en la sandbox y no el mismo propio aunque eso seria mas casualidad.

Saludos.
Responder

Volver a “Fuentes”