node-vm-detect
v0.5.0
Published
VM Detection Library for Nodejs & Electron
Maintainers
Readme
Node VM Detect
A Node.js library that detects whether the current environment is a virtual machine (VM).
It operates as a cross-platform C++ module via the VMAware library.
This can be particularly useful for detecting VM environments in Electron-based applications.
For more detailed information on VM detection, refer to VMAware.
Install
npm i node-vm-detectUsage
Call without any options—this is sufficient for most use cases.
import { getVMInfo } from 'node-vm-detect';
const {
isVM,
brand,
type,
conclusion,
percentage,
detectedTechniques,
} = await getVMInfo();Return value
| Value | Type | Desciption |
| -------------------- | ---------------- | --------------------------------------- |
| isVM | boolean | Whether the current PC is a VM |
| brand | string | VM brand |
| type | string | VM type |
| conclusion | string | Commentary on detection results |
| percentage | number | VM certainty. A value between 0 and 100 |
| detectedTechniques | TechniqueFlags[] | List of detected techniques |
Setting flags
These correspond to the setting flags used in VMAware.
For a detailed description of each flag, refer to VMAware.
Additional setting flags
Additional setting flags can be specified as an array in the settings field.
settings: ('MULTIPLE' | 'HIGH_THRESHOLD' | 'DYNAMIC')[]| Flag | Desciption |
| ---------------- | ---------------------------------------------------------- |
| MULTIPE | Displays multiple VM Hosts. |
| HIGH_THRESHOLD | Increase the threshold for determining if a VM is present. |
| DYNAMIC | Display the conclusion message in detail. |
Technique flags
These correspond to VMAware’s flag table.
Setting a preset
techniques can be selected from DEFAULT or ALL (only one must be selected).
techniques: 'DEFAULT' | 'ALL'| Flag | Desciption |
| --------- | ----------------------------------------------------------------- |
| DEFAULT | Use all techniques except the excluded ones. This is the default. |
| ALL | Use all techniques, including excluded techniques. |
Custom technique flags
You can selectively exclude or include certain techniques.
techniques: {
only: TechniqueFlags[],
disable: TechniqueFlags[]
}Examples
1. Use all available techniques without exclusions
getVMInfo({
techniques: 'ALL',
});2. Increase detection threshold and show more detail in the conclusion message
getVMInfo({
settings: ['HIGH_THRESHOLD', 'DYNAMIC'],
});3. Exclude the VMID technique
getVMInfo({
techniques: {
disable: ['VMID'],
},
});4. Use only the CPU_BRAND technique
getVMInfo({
techniques: {
only: ['CPU_BRAND'],
},
});Same result as:
getVMInfo({
techniques: {
only: ['VMID', 'CPU_BRAND'],
disable: ['VMID'],
},
});Clean
VM detection is performed on the child process.
After detection, child process is removed.
This is useful for new detections without affecting existing results, or to reduce memory usage.
When called with false, it works in the current process, and the detection results are stored in memory and recycled on each call with false.
The default value is true.
getVMInfo({ clean: true });Supported Platforms & Requirements
VMAware supports 32-bit environments, but this library only supports 64-bit platforms.
- Requires Node.js 18 or later (Electron 23 or later).
| OS | Arch | Supported | | ------- | ----- | --------- | | Windows | x64 | ✅ | | Windows | x86 | ❌ | | Windows | Arm64 | ✅ | | Windows | Arm32 | ❌ | | MacOS | x64 | ✅ | | MacOS | Arm64 | ✅ | | Linux | x64 | ✅ | | Linux | x86 | ❌ | | Linux | Arm64 | ✅ | | Linux | Arm32 | ❌ |
TODOS
- Deno support with Deno FFI
- Include other VM detection packages
LICENSE
MIT
