
VMAWARE (VM+ ADKE) es una biblioteca C ++ de plataforma cruzada para la detección de máquinas virtuales.
La biblioteca es:
# include " vmaware.hpp "
# include < iostream >
int main () {
if ( VM::detect ()) {
std::cout << " Virtual machine detected! " << " n " ;
} else {
std::cout << " Running on baremetal " << " n " ;
}
std::cout << " VM name: " << VM::brand () << " n " ;
std::cout << " VM type: " << VM::type () << " n " ;
std::cout << " VM certainty: " << ( int ) VM::percentage () << " % " << " n " ;
}Posible salida:
Virtual machine detected!
VM name: VirtualBox
VM type: Hypervisor (type 2)
VM certainty: 100%

Este proyecto también proporciona una pequeña pero práctica herramienta CLI que utiliza todo el potencial de lo que la biblioteca puede hacer. Le dará todo tipo de detalles sobre el entorno en el que se ejecuta.

Para instalar la biblioteca, descargue el archivo vmaware.hpp en la última sección de lanzamiento a su proyecto. Los binarios también se encuentran allí. No son necesarios los enlaces CMake o de objetos compartidos, es literalmente tan simple.
Sin embargo, si desea el proyecto completo (encabezados accesibles a nivel mundial con <vmaware.hpp> y la herramienta CLI), siga estos comandos:
git clone https://github.com/kernelwernel/VMAware
cd VMAwaresudo dnf/apt/yum update -y # change this to whatever your distro is
mkdir build
cd build
cmake ..
sudo make installcmake -S . -B build/ -G " Visual Studio 16 2019 " # edit this
set ( DIRECTORY "/path/to/your/directory/" )
# if you want the MIT version, toggle this to ON
option (MIT "MIT version" OFF )
if (MIT)
set (EXTENSION "_MIT" )
else ()
set (EXTENSION "" )
endif ()
set ( DESTINATION " ${DIRECTORY} vmaware ${EXTENSION} .hpp" )
if ( NOT EXISTS ${DESTINATION} )
message ( STATUS "Downloading VMAware" )
set (URL "https://github.com/kernelwernel/VMAware/releases/latest/download/vmaware ${EXTENSION} .hpp" )
file (DOWNLOAD ${URL} ${DESTINATION} SHOW_PROGRESS )
else ()
message ( STATUS "VMAware already downloaded, skipping" )
endif ()Puede ver los documentos completos aquí. Se proporcionan todos los detalles, como funciones, técnicas, configuraciones y ejemplos. Confía en mí, no es demasiado intimidante;)
Utiliza una lista completa de técnicas de bajo nivel (CPU, GPU, HDD y firmware) y anti-VM de alto nivel que se contabilizan en un sistema de puntuación. Los puntajes (0-100) para cada técnica se administran arbitrariamente, y cada técnica que haya detectado una VM tendrá su puntaje agregado a un solo punto acumulativo, donde un número de punto umbral decidirá si realmente se está ejecutando en una VM.
Está diseñado para investigadores de seguridad, ingenieros de VM, desarrolladores de jugadores y casi cualquier persona que necesite un mecanismo de detección de VM práctico y sólido en roca en su proyecto. Por ejemplo, la biblioteca es adecuada si está haciendo una VM y está probando la efectividad de ocultarse. Si eres un desarrollador de juegos/desarrollador de software patentado, la biblioteca es útil para frustrar los ingenieros inversos. Si es analista de malware y desea verificar la capacidad de ocultación de su VM, esta sería la herramienta perfecta para comparar qué tan bien concebida está su VM contra el malware. Además, el software podría optimizar el rendimiento o el uso de recursos en función del entorno detectado, y algunas aplicaciones pueden querer restringir el uso en máquinas virtuales para evitar la distribución o las pruebas no autorizadas.
Ya hay un montón de proyectos que tienen el mismo objetivo, como Invizzible, Pafish y Al-Khaser. Pero la diferencia entre los proyectos antes mencionados es que no proporcionan una interfaz programable para interactuar con los mecanismos de detección, además de tener poco o ningún soporte para los sistemas que no son de Windows. Quería que las técnicas de detección de núcleo fueran accesibles programáticamente de una manera multiplataforma para que todos obtengan algo útil en lugar de proporcionar solo una herramienta CLI. También contiene una mayor cantidad de técnicas, por lo que básicamente es solo una biblioteca de detección de VM y una herramienta con esteroides con máxima flexibilidad.
Hay algunos software pagado para proteger la licencia de otro software contra ingenieros inversos o grietas de software, como el Sentinel RMS de Thales y VMProtect. Aunque estos no están destinados a ser solo bibliotecas de detección de VM, están limitadas en sus capacidades de diferentes maneras. La detección de VM de Sentinel RMS no tiene tantas marcas de VM (sin mencionar que el precio solo está destinado a corporaciones, no individuos), y VMProtect tiene un número muy limitado de técnicas de detección, donde algunos de ellos de ellas no requieren mucho esfuerzo para pasar por alto con solo unas pocas configuraciones a la VM (el mecanismo de detección también se ha filtrado, por lo que no se ha beneficiado mucho de tener una fuente cerrada ahora). Hablando de eso, el único inconveniente de VMAWARE es que es de código abierto, lo que hace que el trabajo de los derivadores sea más fácil en comparación con tenerlo de código cerrado. Sin embargo, diría que es una compensación digna al tener tantas técnicas de detección de VM de una manera abierta e interactiva, incluida la valiosa retroalimentación de la comunidad para hacer que la biblioteca sea más efectiva y precisa.
Hyper-V tiene una característica oscura en la que si está habilitado en el sistema host, los valores de hardware de la CPU hacen que parezca que todo el sistema se está ejecutando dentro de Hyper-V, lo que no es cierto. Esto hace que sea un desafío determinar si los valores de hardware que la biblioteca está recopilando es una verdadera VM Hyper-V o simplemente los artefactos de lo que Hyper-V ha dejado como consecuencia de tenerlo habilitado en el sistema de host. La razón por la cual esto es un problema es porque la biblioteca podría concluir falsamente que su sistema host se está ejecutando en Hyper-V, lo cual es un falso positivo. Aquí es donde entra en juego el mecanismo Hyper-X para distinguir entre estos dos. Esto fue diseñado por Réquiem

Sí. Hay algunas técnicas que son trivialmente falsificables, y no hay nada que la biblioteca pueda hacer al respecto, ya sea un falso positivo deliberado o incluso un falso negativo. Este es un problema en el que cada proyecto de detección de VM enfrenta, ya sea de código abierto o abierto, por lo que la biblioteca está tratando de probar todas las técnicas posibles para obtener el mejor resultado en función del entorno en el que se ejecuta. Recuerde, todo es técnicamente suplantable.
Este proyecto no solicita el desarrollo de malware por razones obvias. Incluso si tiene la intención de usarlo para fines de ocultación, lo más probable es que sea marcado por los antivirus de todos modos y no se ofusca nada para empezar. Buena suerte que ofusca 10k+ líneas de código C ++ LMAO.
Lo habría hecho estrictamente MIT, por lo que el software patentado puede hacer uso de la biblioteca, pero algunas de las técnicas empleadas son de proyectos GPL 3.0, y no tengo más remedio que usar la misma licencia por razones legales. Esto me dio una idea para hacer una versión MIT sin todo el código GPL para que también se pueda usar sin obligar a su código a ser de código abierto. Cabe señalar que la versión MIT elimina 12 técnicas de 116 (a partir de la versión 1.9), y cuanto menor sea el número de técnicas, menos preciso podría ser el resultado general.
Si está compilando con GCC o Clang, agregue las banderas
-lmy-lstdc++, o use los compiladores G ++/Clang ++ en su lugar. Si recibe errores de enlazador de un entorno VM nuevo en Linux, actualice su sistema consudo apt/dnf/yum update -ypara instalar los componentes C ++ necesarios.
Si tiene alguna sugerencia, ideas o cualquier tipo de contribución, ¡no dude en preguntar! Estaré más que feliz de discutir en la sección del tema. Si quieres preguntar personalmente algo en privado, mi discordia es kr.nl
Y si encontrara este proyecto útil, una estrella sería apreciada :)
No soy responsable ni responsable de ningún daño que cause a través de cualquier uso malicioso de este proyecto.
Licencia: GPL-3.0/MIT