至少我们曾经在一起过。
来自:一言
简单的原理
对虚拟机一些特征进程,文件进行判断。如果存在的话,就判断为虚拟机,从而退出进程,或者执行一些别的安全操作。[aru_3]
ps:该方法只是简单的反虚拟机,没有免杀功能,免杀需要另外做。
下面是我用go简单的写了几个检测虚拟机的函数,希望对大家有所帮助。
源码
func PathExists(path string) (bool, error) { //判断文件是否存在 _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func fack(path string) { //判断虚拟机关键文件是否存在 b, _ := PathExists(path) if b { fmt.Printf("当前是虚拟机环境,别分析了,哥。") os.Exit(1) //如果是虚拟机就退出当前进程 } } func check() { fack("C:\\windows\\System32\\Drivers\\Vmmouse.sys") fack("C:\\windows\\System32\\Drivers\\vmtray.dll") fack("C:\\windows\\System32\\Drivers\\VMToolsHook.dll") fack("C:\\windows\\System32\\Drivers\\vmmousever.dll") fack("C:\\windows\\System32\\Drivers\\vmhgfs.dll") fack("C:\\windows\\System32\\Drivers\\vmGuestLib.dll") fack("C:\\windows\\System32\\Drivers\\VBoxMouse.sys") fack("C:\\windows\\System32\\Drivers\\VBoxGuest.sys") fack("C:\\windows\\System32\\Drivers\\VBoxSF.sys") fack("C:\\windows\\System32\\Drivers\\VBoxVideo.sys") fack("C:\\windows\\System32\\vboxdisp.dll") fack("C:\\windows\\System32\\vboxhook.dll") fack("C:\\windows\\System32\\vboxoglerrorspu.dll") fack("C:\\windows\\System32\\vboxoglpassthroughspu.dll") fack("C:\\windows\\System32\\vboxservice.exe") fack("C:\\windows\\System32\\vboxtray.exe") fack("C:\\windows\\System32\\VBoxControl.exe") } func main() { a, _ := windows.GetUserPreferredUILanguages(windows.MUI_LANGUAGE_NAME) //获取当前系统首选语言 if a[0] != "zh-CN" { fmt.Printf("当前不是中文系统") os.Exit(1) //网上的沙盒等系统都是英文界面,我们可以利用这个进行判断 } else { check() //先进行判断系统语言,然后再进行判断虚拟机关键文件是否存在 //这边检测完了,就可以执行你想执行的代码了,如shellcode } }
效果图
本文作者为TRY,转载请注明。
队长带带