Xnu-QEMU-Arm64: iOS on QEMU
github.com
github.com
- https://alephsecurity.com/2019/06/25/xnu-qemu-arm64-2/
- https://alephsecurity.com/2019/06/17/xnu-qemu-arm64-1/
- Here some more recent screenshots: https://twitter.com/JonathanAfek/status/1221719094661197825
It currently supports most non-Swift apps and a small number of Swift apps; once I have proper Swift support, pretty much everything should Just Work (TM). Planning on releasing by end of month (hopefully) for $100/year, aimed primarily at bug bounty hunters and pentesters, though there's nothing stopping you from just using it to play an iOS-specific game or somesuch. If you're curious, you can see Xcode debugging an ARM64 app from the App Store here -- all of their inspection tools work out of the box! https://twitter.com/daeken/status/1242684576738271233
There's also a native ARM build of libc++ and libc++abi, so that it doesn't have to cross the ARM<->Native boundary for C++ stuff, and a bunch of custom hooks on both sides.
Maybe someone can automate the patcher and get this going.
I get it that this is the Linux experience :D you fix stuff by knowing your CLI... but this makes it a huge time-waster for times when all you want is test your actual product.
Is this experience typical for anyone else? Or am I, after all these years using Linux, still challenged on the terminal and need to tough the hell up?
You didn't bother to read the manual and somehow that's not your fault?
Why is this confusing? What you're really looking for is KVM, which -is- a hypervisor that uses the processor's virtualization instructions to implement a complete virtual machine. And then QEMU has a backend, for x86/x86_64, that uses KVM to accelerate its processor virtualization (and I believe some hardware support as well).
Using KVM through QEMU at least gives you a command line interface to do things instead of "write a C program to talk to the kernel API", but this is still far from the level of a tool that a desktop user would want to use. QEMU+KVM is basically at the level of one of the random barely-documented executables that you'd see in the installation of a VM software package.
So what should you use here? The next layer up is libvirt, which provides a system-level daemon to talk to (so you're not just running an emulator from a terminal that exits when you close the terminal) and a command shell & configuration files for defining machines, networks, storage, and so on. Still not a great UX, but at least now you're at the level of being able to define and run a machine.
Many users are going to manage these things through a wizard-based or graphical workflow instead of a CLI, so there's applications like Boxes that's built into GNOME (https://wiki.gnome.org/Apps/Boxes) or virt-manager (https://virt-manager.org/) which is desktop-agnostic. Both of these also help with establishing a graphical interface to the virtual machine itself, if necessary.
* Curse your hardware purchasing choice if you have Broadcom or NVidia, because they add (non-dramatic) steps.
* Make sure, everything Virt-related is enabled in the BIOS/UEFI
* Install normal debian default system
* Install virt-manager, libvirt0, qemu-kvm
* Add your desktop user to system groups kvm and libvirt
* Download Windows Iso and Virtio-Drivers iso
* Create new virtual machine, make sure everything possible is set to "VirtIO", mount both ISOs from above as 2 CDROM drives.
* Install Windows, let it search the VirtIO CD for drivers
* Done, total time less than 2 hours on a machine newer than 2015. (No command line required. Just don't use a linux installer from x years ago, but a recent one, e.g. Debian Buster)
(I wrote iSH)