Bueno, lo prometido es deuda... aquí os deja la función para detectar si nuestro malware se está ejecutando en la
Sandbox de
Sandboxie:
IsSandboxiePresent()¿Que es Sandboxie?Es un software diseñado para ejecutar aplicaciones dentro de un entorno seguro (dentro de una
Sandbox). Su funcionamiento consiste en aislar el ejecutable y detectar todos los cambios que realice en el sistema, permitiendo borrarlos con un solo click. Se parece a una máquina virtual, pero más sencillo de usar y configurar, para más info:
:http://www.sandboxie.com/
¿Que método utiliza para detectar Sandboxie?He incluido 2 métodos, uno de ellos programado por
steve10120 de hackhound y el otro método (menos efectivo pero mucho más simple) programado por mí. El segundo método requiere que nuestro malware tenga un Form en su interior.
El método de
steve10120 detecta si se ha cargado el modulo
SbieDll.dll dentro de nuestra aplicación, si se encuentra el módulo significa que nuestro malware está dentro de una
Sandbox.
El otro método comprueba el caption de nuestro Formulario, si detecta la string
"[ # ]" significa que nuestra aplicación se encuentra dentro de la
Sandbox. Como verás el primer método es más profesional, pero más fácilmente detectable por la heurística al usar una API. El segundo método solo busca una serie de caracteres, esto puede inducir a falsos positivos pero es más sencillo de implementar.
Ok, ¿y el source?Aquí os dejo el source completo:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Program: Anti-Sandboxie 1.0
' Coder: MadAntrax
' Web: foro.elhacker.net
' Date: 28/06/08
'
' Programa que detecta si nuestro malware
' se ejecuta en la SandBox de Sandboxie, permitiendo
' finalizar el proceso y evitar que inspeccionen nuestro
' malware :)
'
' Usar la función IsSandboxiePresent(byval OptionToCheck As Integer) As Boolean
' Se han añadido 2 métodos de detección para Sandboxie, el primero
' está basado en la idea original de http://hackhound.org
'
' El segundo método esta diseñado integramente por mí
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Ejemplos para usar esta función:
'
' Método 1:
' If IsSandboxiePresent(1) = True Then End
'
' Método 2:
' If IsSandBoxiePresent(2,Form1) = True Then End
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Function IsSandBoxiePresent(ByVal OptionToCheck As Integer, Optional MainFrm As Form) As Boolean
Select Case OptionToCheck
Case 1 'Recomendado
Dim hSbie As Long
hSbie = GetModuleHandle("SbieDll.dll")
If hSbie <> 0 Then
IsSandBoxiePresent = True
Else
IsSandBoxiePresent = False
End If
Case 2 'No recomendado
If InStr(MainFrm.Caption, "[#]") <> 0 Then
IsSandBoxiePresent = True
Else
IsSandBoxiePresent = False
End If
End Select
End Function
Y para llamarlo hay que usar lo siguiente:
Sub Main()
If IsSandBoxiePresent(1) = True Then End
' Your Code Hare...
End Sub
Y si quieres usar el segundo método, de esta forma:
Private Sub Form_Load()
If IsSandBoxiePresent(2, Form1) = True Then End
'Your Code Here
End Sub
Saludos!!