├── 效果.png ├── README.md └── 识别沙箱检测 └── main.go /效果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ed1s0nZ/See_through_Sandbox/HEAD/效果.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # See_through_Sandbox 2 | 用Golang完成的一个 识别沙箱检测 的小demo! 3 | 4 | 一共五个级别: 5 | 1. 检测延时运行; 6 | 2. 检测开机时间; 7 | 3. 检测物理内存; 8 | 4. 检测CPU核心数; 9 | 5. 检测临时文件数。 10 | 11 | 等级越趋向于5越接近真实机。 12 | -------------------------------------------------------------------------------- /识别沙箱检测/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "runtime" 8 | "syscall" 9 | "time" 10 | "unsafe" 11 | ) 12 | 13 | func See_through() { 14 | // 1. 延时运行 15 | timeSleep1, _ := timeSleep() 16 | // 2. 检测开机时间 17 | bootTime1, _ := bootTime() 18 | // 3. 检测物理内存 19 | physicalMemory1, _ := physicalMemory() 20 | // 4. 检测CPU核心数 21 | numberOfCPU1, _ := numberOfCPU() 22 | // 5. 检测临时文件数 23 | numberOfTempFiles1, _ := numberOfTempFiles() 24 | level := timeSleep1 + bootTime1 + physicalMemory1 + numberOfCPU1 + numberOfTempFiles1 // 有五个等级,等级越趋向于5,越像真机 25 | fmt.Println("level:", level) 26 | if level < 4 { 27 | fmt.Println("可能是沙箱!") 28 | } else { 29 | fmt.Println("可能是真机!") 30 | } 31 | } 32 | 33 | // 1. 延时运行 34 | func timeSleep() (int, error) { 35 | startTime := time.Now() 36 | time.Sleep(10 * time.Second) 37 | endTime := time.Now() 38 | sleepTime := endTime.Sub(startTime) 39 | if sleepTime >= time.Duration(10*time.Second) { 40 | fmt.Println("睡眠时间为:", sleepTime) 41 | return 1, nil 42 | } else { 43 | return 0, nil 44 | } 45 | } 46 | 47 | // 2. 检测开机时间 48 | // 许多沙箱检测完毕后会重置系统,我们可以检测开机时间来判断是否为真实的运行状况。 49 | func bootTime() (int, error) { 50 | var kernel = syscall.NewLazyDLL("Kernel32.dll") 51 | GetTickCount := kernel.NewProc("GetTickCount") 52 | r, _, _ := GetTickCount.Call() 53 | if r == 0 { 54 | return 0, nil 55 | } 56 | ms := time.Duration(r * 1000 * 1000) 57 | fmt.Println("开机时常为:", ms) 58 | tm := time.Duration(30 * time.Minute) 59 | if ms < tm { 60 | return 0, nil 61 | } else { 62 | return 1, nil 63 | } 64 | 65 | } 66 | 67 | // 3. 检测物理内存 68 | // 当今大多数pc具有4GB以上的RAM,我们可以检测RAM是否大于4GB来判断是否是真实的运行机器。 69 | func physicalMemory() (int, error) { 70 | var mod = syscall.NewLazyDLL("kernel32.dll") 71 | var proc = mod.NewProc("GetPhysicallyInstalledSystemMemory") 72 | var mem uint64 73 | proc.Call(uintptr(unsafe.Pointer(&mem))) // ret, _, err := proc.Call(uintptr(unsafe.Pointer(&mem))) 74 | mem = mem / 1048576 // 该值以千字节为单位给出,因此除以 1048576 (1024*1024) 以获得以千兆字节为单位的值。 75 | if mem < 4 { 76 | fmt.Printf("物理内存为%dG\n", mem) 77 | return 0, nil // 小于4GB返回0 78 | } 79 | fmt.Printf("物理内存为%dG\n", mem) 80 | return 1, nil // 大于4GB返回1 81 | } 82 | 83 | // 4. 检测CPU核心数 84 | // 大多数pc拥有4核心cpu,许多在线检测的虚拟机沙盘是2核心,我们可以通过核心数来判断是否为真实机器或检测用的虚拟沙箱。 85 | func numberOfCPU() (int, error) { 86 | a := runtime.NumCPU() 87 | fmt.Println("CPU核心数为:", a) 88 | if a < 4 { 89 | return 0, nil // 小于4核心数,返回0 90 | } else { 91 | return 1, nil // 大于4核心数,返回1 92 | } 93 | } 94 | 95 | // 5. 检测临时文件数 96 | // 正常使用的系统,其中用户的临时文件夹中有一定数量的临时文件,可以通过判断临时文件夹内的文件数量来检测是否在沙箱中运行。 97 | func numberOfTempFiles() (int, error) { 98 | conn := os.Getenv("temp") // 通过环境变量读取temp文件夹路径 99 | var k int 100 | if conn == "" { 101 | fmt.Println("未找到temp文件夹,或temp文件夹不存在") 102 | return 0, nil 103 | } else { 104 | local_dir := conn 105 | err := filepath.Walk(local_dir, func(filename string, fi os.FileInfo, err error) error { 106 | if fi.IsDir() { 107 | return nil 108 | } 109 | k++ 110 | // fmt.Println("filename:", filename) // 输出文件名字 111 | return nil 112 | }) 113 | fmt.Println("Temp总共文件数量:", k) 114 | if err != nil { 115 | // fmt.Println("路径获取错误") 116 | return 0, nil 117 | } 118 | } 119 | if k < 30 { 120 | return 0, nil 121 | } 122 | return 1, nil 123 | 124 | } 125 | 126 | func main() { 127 | See_through() 128 | } 129 | --------------------------------------------------------------------------------