Files
go-obfuscation/pkg/antivm/antivm_darwin.go
T
2026-05-31 19:48:56 +01:00

99 lines
1.4 KiB
Go

//go:build darwin
package antivm
import (
"net"
"os/exec"
"strings"
)
var vmIdentifiers = []string{
"VMware",
"VirtualBox",
"QEMU",
"KVM",
"Xen",
"Microsoft Corporation",
"Parallels",
}
var vmMACPrefixes = []string{
"00:0c:29",
"08:00:27",
"52:54:00",
"00:1c:42",
}
func containsAny(s string, needles []string) bool {
for _, n := range needles {
if strings.Contains(s, n) {
return true
}
}
return false
}
func checkMAC() bool {
ifaces, err := net.Interfaces()
if err != nil {
return false
}
for _, iface := range ifaces {
mac := strings.ToLower(iface.HardwareAddr.String())
if mac == "" {
continue
}
for _, prefix := range vmMACPrefixes {
if strings.HasPrefix(mac, prefix) {
return true
}
}
}
return false
}
func checkSystemProfiler() bool {
out, err := exec.Command("system_profiler", "SPHardwareDataType").Output()
if err != nil {
return false
}
return containsAny(string(out), vmIdentifiers)
}
func checkIOKit() bool {
out, err := exec.Command("ioreg", "-l").Output()
if err != nil {
return false
}
return containsAny(string(out), vmIdentifiers)
}
func checkDMI() bool {
return false
}
func checkCPUID() bool {
return false
}
func checkDisk() bool {
return false
}
func checkPCI() bool {
return false
}
func checkTiming() bool {
return false
}
func checkRegistry() bool {
return false
}
func checkWMI() bool {
return false
}