Introduction

You may be a Linux user, but you may have an iPhone as well. Occasionally there will be times when you’ll need to restore and update your iPhone. You may think that because you’re using Linux you are unable to restore or update your iOS device without a virtual machine or dualboot. Thankfully this is not true. Thanks to the developers behind libimobiledevice there are new tools to do the restore and update process directly from Linux. The tool is called idevicerestore!

Installation

Thankfully for Arch Linux users it’s already in the AUR! On Ubuntu and other distros that use the apt package manager you can install it using this script although I cannot confirm this script works so beware that I haven’t tested. Another options is compiling the source code.

Using

Typing idevicerestore in the terminal will show you the syntax.

Usage: idevicerestore [OPTIONS] PATH
Restore IPSW firmware at PATH to an iOS device.

PATH can be a compressed .ipsw file or a directory containing all files
extracted from an IPSW.

Options:
 -i, --ecid ECID  Target specific device by its ECID
                  e.g. 0xaabb123456 (hex) or 1234567890 (decimal)
 -u, --udid UDID  Target specific device by its device UDID
                  NOTE: only works with devices in normal mode.
 -l, --latest     Use latest available firmware (with download on demand).
                  Before performing any action it will interactively ask to
                  select one of the currently signed firmware versions,
                  unless -y has been given too.
                  The PATH argument is ignored when using this option.
                  DO NOT USE if you need to preserve the baseband (unlock)!
                  USE WITH CARE if you want to keep a jailbreakable firmware!
 -e, --erase      Perform a full restore, erasing all data (defaults to update)
                  DO NOT USE if you want to preserve user data on the device!
 -y, --no-input   Non-interactive mode, do not ask for any input.
                  WARNING: This will disable certain checks/prompts that are
                  supposed to prevent DATA LOSS. Use with caution.
 -n, --no-action  Do not perform any restore action. If combined with -l option
                  the on-demand ipsw download is performed before exiting.
 -h, --help       Prints this usage information
 -C, --cache-path DIR  Use specified directory for caching extracted or other
                  reused files.
 -d, --debug      Enable communication debugging

Advanced/experimental options:
 -c, --custom     Restore with a custom firmware
 -s, --cydia      Use Cydia's signature service instead of Apple's
 -x, --exclude    Exclude nor/baseband upgrade
 -t, --shsh       Fetch TSS record and save to .shsh file, then exit
 -k, --keep-pers  Write personalized components to files for debugging
 -p, --pwn        Put device in pwned DFU mode and exit (limera1n devices only)

Homepage: <http://libimobiledevice.org>

For restoring to the latest iOS version which is the thing most people will do, you simply do idevicerestore -e -l

~ ❯ idevicerestore -e -l
Found device in Normal mode
Identified device as n71ap, iPhone8,1
The following firmwares are currently being signed for iPhone8,1:
  [1] 13.3 (build 17C54)
Select the firmware you want to restore: 1
Selected firmware 13.3 (build 17C54)
Downloading firmware (http://updates-http.cdn-apple.com/2019FallFCS/fullrestores/061-61296/1EFCEDB4-179E-11EA-B3B3-D73E73E9483A/iPhone_4.7_13.3_17C54_Restore.ipsw)

More advanced things you can do is use -t to save shsh blobs although I’m not sure this works on 64bit. You can also put the device into pwned DFU mode if it’s A4 and restore a CFW.

Wrap Up

This tool has saved me many times. I recommend everyone check out idevicerestore if they want a way to restore iOS devices from Linux. If you have an iOS device it’s a helpful tool to keep installed even if you won’t be using it much.