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

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

#223 in Network programming

Download history 941/week @ 2024-01-02 957/week @ 2024-01-09 708/week @ 2024-01-16 614/week @ 2024-01-23 742/week @ 2024-01-30 1315/week @ 2024-02-06 1220/week @ 2024-02-13 814/week @ 2024-02-20 803/week @ 2024-02-27 673/week @ 2024-03-05 569/week @ 2024-03-12 1390/week @ 2024-03-19 428/week @ 2024-03-26 972/week @ 2024-04-02 721/week @ 2024-04-09 913/week @ 2024-04-16

3,176 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.4–9.5MB
~64K SLoC