
O VMAWare (VM+ consciente) é uma biblioteca C ++ cruzada para detecção de máquina virtual.
A biblioteca é:
# 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 " ;
}saída possível:
Virtual machine detected!
VM name: VirtualBox
VM type: Hypervisor (type 2)
VM certainty: 100%

Este projeto também fornece uma ferramenta CLI pequena, mas útil, utilizando todo o potencial do que a biblioteca pode fazer. Isso lhe dará todos os tipos de detalhes sobre o ambiente em que está sendo executado.

Para instalar a biblioteca, faça o download do arquivo vmaware.hpp na seção de liberação mais recente do seu projeto. Os binários também estão localizados lá. Não são necessários links cmake ou objetos compartilhados, é literalmente simples assim.
No entanto, se você deseja o projeto completo (cabeçalhos globalmente acessíveis com <VmaWare.hpp> e a ferramenta da CLI), siga estes 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 ()Você pode ver os documentos completos aqui. Todos os detalhes, como funções, técnicas, configurações e exemplos, são fornecidos. Confie em mim, não é muito intimidador;)
Ele utiliza uma lista abrangente de técnicas de baixo nível (CPU, GPU, HDD e firmware) e anti-VM de alto nível que são contabilizadas em um sistema de pontuação. As pontuações (0-100) para cada técnica são fornecidas arbitrariamente, e todas as técnicas que detectaram uma VM terão sua pontuação adicionada a um único ponto acumulativo, onde um número de ponto limite decidirá se está realmente sendo executado em uma VM.
Ele foi projetado para pesquisadores de segurança, engenheiros da VM, desenvolvedores de jogadores e praticamente qualquer pessoa que precise de um mecanismo de detecção de VM prático e sólido em seu projeto. Por exemplo, a biblioteca é adequada se você estiver fazendo uma VM e estiver testando a eficácia de se esconder. Se você é desenvolvedor de jogos/desenvolvedor de software proprietário, a biblioteca é útil para frustrar contra engenheiros reversos. Se você é analista de malware e deseja verificar a capacidade de ocultação da sua VM, essa seria a ferramenta perfeita para comparar o quão bem conceituado sua VM é contra malware. Além disso, o software pode otimizar o desempenho ou o uso de recursos com base no ambiente detectado, e alguns aplicativos podem querer restringir o uso nas VMs para impedir a distribuição ou teste não autorizado.
Já existem muitos projetos que têm o mesmo objetivo, como o Invizzible, Pafish e Al-Khaser. Mas a diferença entre os projetos acima mencionados é que eles não fornecem uma interface programável para interagir com os mecanismos de detecção, além de ter pouco ou nenhum suporte para sistemas que não sejam de Windows. Eu queria que as técnicas de detecção principal fossem acessíveis programaticamente de maneira cruzada para que todos obtenham algo útil, em vez de fornecer apenas uma ferramenta da CLI. Ele também contém uma quantidade maior de técnicas, por isso é basicamente apenas uma biblioteca de detecção de VM e uma ferramenta em esteróides com máxima flexibilidade.
Existem alguns softwares pagos para proteger o licenciamento de outros softwares contra engenheiros reversos ou rachaduras de software, como o Sentinel RMS de Thales e o VMProtect. Embora estes não sejam apenas bibliotecas de detecção de VM, elas são limitadas em suas capacidades de maneiras diferentes. A detecção de VM da Sentinel RMS não possui tantas marcas de VM (para não mencionar que o preço é destinado apenas a empresas, não a indivíduos), e o VMProtect possui um número muito limitado de técnicas de detecção, onde alguns deles não exigem muito esforço para ignorar, portanto, não há poucas configurações para a VM (o mecanismo de detecção também foi vazado. Falando nisso, a única desvantagem do VmaWare é que é totalmente de código aberto, o que facilita o trabalho de desvios em comparação com a sua fonte fechada. No entanto, eu argumentaria que é uma troca digna, tendo tantas técnicas de detecção de VM de maneira aberta e interativa, incluindo ter um feedback valioso da comunidade para tornar a biblioteca mais eficaz e precisa.
O Hyper-V possui um recurso obscuro, onde se estiver ativado no sistema host, os valores de hardware da CPU fazem parecer que todo o sistema está em execução dentro do Hyper-V, o que não é verdadeiro. Isso torna um desafio determinar se os valores de hardware que a biblioteca está coletando é uma VM Hyper-V real, ou apenas os artefatos do que o Hyper-V deixou como conseqüência de tê-lo permitido no sistema host. A razão pela qual isso é um problema é porque a biblioteca pode concluir falsamente que o seu sistema host está em execução no Hyper-V, o que é um falso positivo. É aqui que o mecanismo Hyper-X entra em jogo para distinguir entre esses dois. Isso foi projetado por Requiem

Sim. Existem algumas técnicas que são trivialmente falsas, e não há nada que a biblioteca possa fazer sobre isso, seja um falso positivo deliberado ou mesmo um falso negativo. Esse é um problema que todo projeto de detecção da VM está enfrentando se está fechado ou de código aberto, e é por isso que a biblioteca está tentando testar todas as técnicas possíveis para obter o melhor resultado com base no ambiente em que está sendo executado. Lembre -se, tudo é tecnicamente falsificável.
Este projeto não está solicitando o desenvolvimento de malware por razões óbvias. Mesmo se você pretende usá -lo para fins de ocultação, provavelmente será sinalizado por antivírus de qualquer maneira e nada será ofuscado para começar. Boa sorte ofuscando 10k+ linhas de código C ++ lmao.
Eu teria feito com que o software proprietário possa usar a biblioteca, mas algumas das técnicas empregadas são de projetos GPL 3.0, e não tenho escolha a não ser usar a mesma licença por motivos legais. Isso me deu uma idéia para criar uma versão do MIT sem todo o código GPL, para que também possa ser usado sem forçar seu código a ser de código aberto. Deve -se notar que a versão do MIT remove 12 técnicas de 116 (a partir da versão 1.9) e quanto menor o número de técnicas, menos preciso será o resultado geral.
Se você estiver compilando com GCC ou CLANG, adicione os sinalizadores
-lme-lstdc++ou use compiladores G ++/CLANG ++. Se você estiver recebendo erros de vinculador de um novo ambiente de VM no Linux, atualize seu sistema comsudo apt/dnf/yum update -ypara instalar os componentes C ++ necessários.
Se você tiver alguma sugestão, idéias ou qualquer tipo de contribuição, fique à vontade para perguntar! Ficarei mais do que feliz em discutir na seção de questões. Se você deseja perguntar pessoalmente algo em particular, minha discórdia é kr.nl
E se você achasse este projeto útil, uma estrela seria apreciada :)
Não sou responsável nem responsável por qualquer dano causado por qualquer uso malicioso deste projeto.
Licença: GPL-3.0/MIT