#protocols #backdoor #guest #vm #hypervisor #interaction #v-mware

vmw_backdoor

A pure-Rust library for VMware host-guest protocol ("VMXh backdoor")

8 releases

0.2.4 Jun 2, 2023
0.2.3 Nov 29, 2022
0.2.1 Apr 19, 2021
0.2.0 Oct 8, 2020
0.1.1 Mar 26, 2020

#356 in Network programming

Download history 1444/week @ 2024-05-18 714/week @ 2024-05-25 1026/week @ 2024-06-01 1362/week @ 2024-06-08 803/week @ 2024-06-15 947/week @ 2024-06-22 535/week @ 2024-06-29 234/week @ 2024-07-06 294/week @ 2024-07-13 292/week @ 2024-07-20 294/week @ 2024-07-27 238/week @ 2024-08-03 242/week @ 2024-08-10 225/week @ 2024-08-17 84/week @ 2024-08-24 68/week @ 2024-08-31

625 downloads per month
Used in afterburn

MIT/Apache

27KB
599 lines

vmw_backdoor

crates.io Documentation

A pure-Rust library for VMware host-guest protocol ("VMXh backdoor").

This library provides helpers to access and use the VMware backdoor from a guest VM. It allows bi-directional interactions with the VMWare hypervisor and host environment.

The "backdoor" protocol does not have official specifications, but it has been widely analyzed and there are multiple projects documenting it:

  1. https://github.com/vmware/open-vm-tools/blob/stable-11.0.5/open-vm-tools/lib/include/backdoor_def.h
  2. https://wiki.osdev.org/VMware_tools
  3. https://sysprogs.com/legacy/articles/kdvmware/guestrpc.shtml
  4. https://github.com/vmware/vmw-guestinfo/tree/master/bdoor
  5. https://sites.google.com/site/chitchatvmback/backdoor

Example

let is_vmw = vmw_backdoor::is_vmware_cpu();
println!("VMware CPU detected: {}.", is_vmw);

let mut guard = vmw_backdoor::access_backdoor().unwrap();
println!("Raised I/O access to reach backdoor port.");

let found = guard.probe_vmware_backdoor().unwrap_or(false);
println!("VMware backdoor detected: {}.", found);

let mut erpc = guard.open_enhanced_chan().unwrap();
let key = "guestinfo.ignition.config.data";
let guestinfo = erpc.get_guestinfo(key.as_bytes()).unwrap();

if let Some(val) = guestinfo {
    println!("Got value for key '{}':", key);
    println!("{}", String::from_utf8_lossy(&val));
};

Some more examples are available under examples.

License

Licensed under either of

at your option.

Dependencies

~0.3–8MB
~60K SLoC