渗透测试|Go语言进行简单的反虚拟机检测

TRY 4,622 1

至少我们曾经在一起过。

来自:一言

简单的原理

对虚拟机一些特征进程,文件进行判断。如果存在的话,就判断为虚拟机,从而退出进程,或者执行一些别的安全操作。[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
         }
}

效果图

渗透测试|Go语言进行简单的反虚拟机检测

温馨提示

只是一些简单的虚拟机的想法,大佬们勿喷[aru_15],又是被自己菜哭的一天[aru_16]

发表评论 取消回复
表情 图片 链接 代码

  1. 鸽王
    鸽王 Lv 5

    队长带带

分享