- Apex Legends external cheat for Linux.
- As of Season 23, for QEMU/KVM (formerly for Proton).
+----------+ +----------+ +------------+ +--------------+
| Linux PC | -> | QEMU/KVM | -> | Windows VM | -> | Apex Legends |
+----------+ +----------+ +------------+ +--------------+
- The goal of this project is to have a working Linux cheat that can run alongside Apex Legends on my i5-6600K 4c/4t Linux PC.
- Press F8 to dump r5apex and scan for offsets
- Overlay based ESP for players and items
- Press 5 / 6 / 7 / 8 / 9 / 0 to cycle LIGHT / ENERGY / SHOTGUN / HEAVY / SNIPER / GEAR items
- Map radar
- Spectators list
- Humanized aimbot
- Hold SHIFT to lock on target and triggerbot auto fire
- Weaken aimbot strength with CURSOR_LEFT; "<" symbol in the upper left corner of the screen
- Toggle ADS locking with CURSOR_RIGHT; ">" symbol in the upper left corner of the screen
- Disable/enable triggerbot auto fire with CURSOR_UP; "^" symbol in the upper left corner of the screen
- Bind X in-game to fire, triggerbot will use that key (default AIMBOT_FIRING_KEY)
- Unbind LMB (Left Mouse Button) in-game from fire, so that the cheat will fire for you instead (AIMBOT_ACTIVATED_BY_MOUSE default YES)
- Toggle hitbox with CURSOR_DOWN;
body
/neck
/head
text in the upper left corner of the screen - Hold CAPS_LOCK to superglide
- Terminate cheat with F9
-
Enter BIOS and enable Virtualization Technology:
- VT-d for Intel (VMX)
- AMD-Vi for AMD (SVM)
- Enable "IOMMU"
- Disable "Above 4G Decoding"
-
Nested Virtualization for Intel:
sudo su
echo "options kvm_intel nested=1" >> /etc/modprobe.d/kvm.conf
- Nested Virtualization for AMD:
sudo su
echo "options kvm_amd nested=1" >> /etc/modprobe.d/kvm.conf
- Preload
vfio-pci
module so it can bind to PCI IDs:
sudo su
echo "softdep nvidia pre: vfio-pci" >> /etc/modprobe.d/kvm.conf
echo "softdep nouveau pre: vfio-pci" >> /etc/modprobe.d/kvm.conf
- Update initramfs:
sudo dracut --force
Install on Arch Linux (EndeavourOS KDE):
sudo pacman -S qemu-desktop
sudo pacman -S virt-manager
Install on Fedora Linux (Fedora KDE):
sudo dnf install @virtualization
- Edit
/etc/libvirt/qemu.conf
and uncomment (needed for audio):
#user = "libvirt-qemu"
user = "1000"
- Edit
/etc/libvirt/libvirtd.conf
and uncomment:
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
- Join libvirt group and enable libvirt daemon:
sudo usermod -aG libvirt $USER
sudo systemctl enable libvirtd.service
-
Restart Linux PC.
-
Start default virtual network:
sudo virsh net-autostart default
sudo virsh net-start default
-
Enable XML editing in Virtual Machine Manager >> Edit >> Preferences >> General
-
Download "Stable virtio-win ISO" from: https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
-
Virtual Machine Manager >> File >> New Virtual Machine
-
Local install media (ISO image or CDROM) >>
Windows10.iso
>> Choose Memory and CPU settings >> Disable storage for this virtual machine >> Customize configuration before install- Overview >> Chipset: Q35, Firmware: x64/OVMF_CODE.secboot.4m.fd >> Apply
- Boot Options >> Boot device order: Enable boot menu >> Apply
- [Add Hardware] >> Storage >> Device type: CDROM device >> Manage...
virtio-win.iso
>> [Finish] - [Add Hardware] >> Storage >> Device type: Disk device >> Bus type: VirtIO >> Create a disk image for the virtual machine: 140 GiB >> Advanced options >> Serial: A0B1C2D3E4F56789 >> [Finish]
- [Begin Installation] >> Virtual Machine >> Shut Down >> Force Off
-
Virtual Machine Manager >> [Open] >> View >> Details >> Overview >> XML
-
Replace
<domain type="kvm">
and [Apply]:Spoiler
<domain type="kvm" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0"> <qemu:commandline> <qemu:arg value="-smbios"/> <qemu:arg value="type=0,vendor=ASUS,version=X.23,date=06/14/2024,release=12.34"/> <qemu:arg value="-smbios"/> <qemu:arg value="type=1,manufacturer=ASUS,product=ASUS Zenbook 14X UX1337,version=23.41,serial=D3E4F56789"/> <qemu:arg value="-smbios"/> <qemu:arg value="type=2,manufacturer=ASUS,product=87FD,version=34.12,serial=B1C2D3E4F56789"/> <qemu:arg value="-smbios"/> <qemu:arg value="type=3,manufacturer=ASUS,version=23.41,serial=D3E4F56789"/> <qemu:arg value="-smbios"/> <qemu:arg value="type=17,manufacturer=Samsung,loc_pfx=BANK,speed=4800,serial=E4F56789"/> <qemu:arg value="-smbios"/> <qemu:arg value="type=4,manufacturer=Intel(R) Corporation,version=13th Gen Intel(R) Core(TM) i9-13900H @ 2.60GHz,max-speed=5400,current-speed=2600"/> </qemu:commandline>
-
Replace
</metadata>
and [Apply]:Spoiler
<vmware xmlns="http://www.vmware.com/schema/vmware.config"> <config> <entry name="hypervisor.cpuid.v0" value="FALSE"/> </config> </vmware> </metadata>
-
Replace from
<memory unit="KiB">4194304</memory>
to<vcpu placement="static">2</vcpu>
and [Apply]:Spoiler
<memory unit="KiB">12582912</memory> <currentMemory unit="KiB">12582912</currentMemory> <vcpu placement="static">4</vcpu>
-
Replace from
<features>
to</clock>
and [Apply]:Spoiler
<features> <acpi/> <apic/> <hyperv mode="passthrough"> <relaxed state="on"/> <vapic state="on"/> <spinlocks state="on" retries="8191"/> <vpindex state="on"/> <synic state="on"/> <stimer state="on"> <direct state="on"/> </stimer> <reset state="on"/> <vendor_id state="on" value="GenuineIntel"/> <frequencies state="on"/> <reenlightenment state="off"/> <tlbflush state="on"/> <ipi state="on"/> <evmcs state="off"/> <avic state="on"/> </hyperv> <kvm> <hidden state="on"/> </kvm> <vmport state="off"/> <smm state="on"/> <ioapic driver="kvm"/> </features> <cpu mode="host-passthrough" check="none" migratable="off"> <topology sockets="1" dies="1" cores="4" threads="1"/> <cache mode="passthrough"/> <feature policy="require" name="hypervisor"/> <feature policy="disable" name="vmx"/> <feature policy="disable" name="svm"/> <feature policy="disable" name="aes"/> <feature policy="disable" name="x2apic"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="pdpe1gb"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="amd-ssbd"/> <feature policy="require" name="stibp"/> <feature policy="require" name="amd-stibp"/> <feature policy="require" name="tsc-deadline"/> <feature policy="require" name="tsc_adjust"/> <feature policy="require" name="arch-capabilities"/> <feature policy="require" name="rdctl-no"/> <feature policy="require" name="skip-l1dfl-vmentry"/> <feature policy="require" name="mds-no"/> <feature policy="require" name="pschange-mc-no"/> <feature policy="require" name="cmp_legacy"/> <feature policy="require" name="xsaves"/> <feature policy="require" name="perfctr_core"/> <feature policy="require" name="clzero"/> <feature policy="require" name="xsaveerptr"/> </cpu> <clock offset="timezone" timezone="Europe/London"> <timer name="rtc" present="no" tickpolicy="catchup"/> <timer name="pit" tickpolicy="discard"/> <timer name="hpet" present="no"/> <timer name="kvmclock" present="no"/> <timer name="hypervclock" present="yes"/> <timer name="tsc" present="yes" mode="native"/> </clock>
-
Replace
</devices>
and [Apply]:Spoiler
<shmem name="looking-glass"> <model type="ivshmem-plain"/> <size unit="M">32</size> </shmem> </devices>
-
Where do you want to install Windows?
- Load driver >> OK >>
E:\amd64\w10\viostor.inf
- Load driver >> OK >>
-
Virtual Machine Manager >> [Open] >> View >> Details >> Boot Options >> Boot device order:
- VirtIO Disk 1 >> [Apply]
- Find GPU location with:
lspci -v | grep -i VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06) (prog-if 00 [VGA controller])
02:00.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070] (rev a1) (prog-if 00 [VGA controller])
- GeForce RTX 2070 has 4 PCI IDs:
lspci -v | grep -i NVIDIA
02:00.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070] (rev a1) (prog-if 00 [VGA controller])
Subsystem: NVIDIA Corporation TU106 [GeForce RTX 2070]
02:00.1 Audio device: NVIDIA Corporation TU106 High Definition Audio Controller (rev a1)
Subsystem: NVIDIA Corporation Device 1f02
02:00.2 USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller (rev a1) (prog-if 30 [XHCI])
Subsystem: NVIDIA Corporation Device 1f02
02:00.3 Serial bus controller: NVIDIA Corporation TU106 USB Type-C UCSI Controller (rev a1)
Subsystem: NVIDIA Corporation Device 1f02
- Find PCI IDs with:
lspci -n -s 02:00
02:00.0 0300: 10de:1f02 (rev a1)
02:00.1 0403: 10de:10f9 (rev a1)
02:00.2 0c03: 10de:1ada (rev a1)
02:00.3 0c80: 10de:1adb (rev a1)
- Edit
/etc/default/grub
, use either intel_iommu=on or amd_iommu=on:
GRUB_CMDLINE_LINUX="module_blacklist=nvidia,nouveau vfio-pci.ids=10de:1f02,10de:10f9,10de:1ada,10de:1adb intel_iommu=on iommu=pt"
- Update GRUB and restart Linux PC:
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Inspect IOMMU enabled with:
if compgen -G "/sys/kernel/iommu_groups/*/devices/*" > /dev/null; then echo "IOMMU enabled."; fi
- Inspect kernel driver in use with:
lspci -k -s 02:00
02:00.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070] (rev a1)
Subsystem: NVIDIA Corporation TU106 [GeForce RTX 2070]
Kernel driver in use: vfio-pci
Kernel modules: nouveau
02:00.1 Audio device: NVIDIA Corporation TU106 High Definition Audio Controller (rev a1)
Subsystem: NVIDIA Corporation Device 1f02
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel
02:00.2 USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller (rev a1)
Subsystem: NVIDIA Corporation Device 1f02
Kernel driver in use: xhci_hcd
02:00.3 Serial bus controller: NVIDIA Corporation TU106 USB Type-C UCSI Controller (rev a1)
Subsystem: NVIDIA Corporation Device 1f02
Kernel driver in use: vfio-pci
Kernel modules: i2c_nvidia_gpu
- Not loaded as a module,
xhci_hcd
will be managed by libvirt.
-
Virtual Machine Manager >> [Open] >> View >> Details >> [Add Hardware] >> PCI Host Device:
- 02:00.0 NVIDIA Corporation TU106 [GeForce RTX 2070] >> [Finish]
- 02:00.1 NVIDIA Corporation TU106 High Definition Audio Controller >> [Finish]
- 02:00.2 NVIDIA Corporation TU106 USB 3.1 Host Controller >> [Finish]
- 02:00.3 NVIDIA Corporation TU106 USB Type-C UCSI Controller >> [Finish]
-
Install GPU drivers on Windows VM.
-
If your
Windows10.iso
is updated to poop level:- Search >> Reputation-based protection >> Check apps and files >> Off
-
https://looking-glass.io/downloads >> Windows Host Binary
- At least one GPU display port needs to be populated, shop online for HDMI Dummy Plug if needed.
- Windows Host Binary will not start without it.
Install dependencies on Arch Linux (EndeavourOS KDE):
sudo pacman -S cmake
Install dependencies on Fedora Linux (Fedora KDE):
sudo dnf install cmake g++ fontconfig-devel spice-protocol nettle-devel wayland-devel libxkbcommon-x11-devel libXi-devel libXScrnSaver-devel libXinerama-devel libXcursor-devel libXpresent-devel libglvnd-devel pipewire-devel pulseaudio-libs-devel libsamplerate-devel binutils-devel libXrandr-devel
-
https://looking-glass.io/downloads >> Source
-
Build Looking Glass B6:
cd path/to/extracted/repository
cd client
mkdir build
cd build
cmake ..
make
-
Virtual Machine Manager >> [Open] >> View >> Details >> Video QXL >> Model: None >> [Apply]
-
Start your Windows VM and connect to it using Looking Glass B6:
cd path/to/extracted/repository
cd client/build
./looking-glass-client
- Install:
cd path/to/extracted/repository
chmod +x nika
- Run:
cd path/to/extracted/repository
sudo ./nika
- Edit XML for Intel (on Linux PC):
<feature policy="disable" name="hypervisor"/>
<feature policy="require" name="vmx"/>
- Edit XML for AMD (on Linux PC):
<feature policy="disable" name="hypervisor"/>
<feature policy="require" name="svm"/>
- Open a Command Prompt as Administrator (on Windows VM):
DISM /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All
-
Download
memflow-0.2.1-source-only.dkms.tar.gz
from: https://github.com/memflow/memflow-kvm/releases -
Install:
sudo dnf install kernel-devel-$(uname -r)
sudo dnf install kernel-devel-matched-$(uname -r)
sudo dnf install dkms
sudo dkms install --archive=memflow-0.2.1-source-only.dkms.tar.gz
- Run:
sudo modprobe memflow
cd path/to/extracted/repository
sudo ./nika