//! a simple shell for uploading to the orbic device. //! //! It literally just runs bash as UID/GID 0, with special Android GIDs 3003 //! (AID_INET) and 3004 (AID_NET_RAW). use std::env; use std::os::unix::process::CommandExt; use std::process::Command; #[cfg(target_arch = "arm")] use nix::unistd::Gid; fn main() { let mut args = env::args(); // Android's "paranoid network" feature restricts network access to // processes in specific groups. More info here: // https://www.elinux.org/Android_Security#Paranoid_network-ing #[cfg(target_arch = "arm")] { let gids = &[ Gid::from_raw(3003), // AID_INET Gid::from_raw(3004), // AID_NET_RAW ]; nix::unistd::setgroups(gids).expect("setgroups failed"); } // discard argv[0] let _ = args.next(); // This call will only return if there is an error let error = Command::new("/bin/bash").args(args).uid(0).gid(0).exec(); eprintln!("Error running command: {error}"); std::process::exit(1); }