ipadecrypt decrypts FairPlay apps on your computer - no device in the loop
for day-to-day use. A jailbroken device is needed exactly once per Apple
account, during bootstrap, to mint a reusable 16-byte account credential.
After that, downloading and decrypting any app for that account is fully
offline.
The offline decryptor handles arm64 slices (everything the modern App Store
ships). A few old builds still ship a 32-bit (armv7) slice - those can't be
decrypted offline, so ipadecrypt automatically falls back to decrypting them
on your jailbroken device when one is configured (the same device used for
minting). Pass --no-on-device to disable the fallback, or --on-device to go
straight to the device.
iproxy) is needed for the one-time mint,
and again only for the on-device fallback on old 32-bit apps.| Requirement | Purpose |
|---|---|
| OpenSSH with root access | The mint and the on-device fallback connect over root SSH (install OpenSSH from Sileo) |
| ≥1 owned App Store app installed | Bought with the same Apple ID; used to trigger FairPlay once during the mint |
AppSync Unified + appinst |
Only for the on-device fallback: installs the app on the device so it can be decrypted |
Tested on iOS 16.7.11 with palera1n rootless and Dopamine on iPhone 8 Plus. iOS 10+ is expected to work for minting; decryption itself runs anywhere.
Download a prebuilt binary from the releases page.
Using go install:
go install github.com/londek/ipadecrypt/cmd/ipadecrypt@latest
From source (refer to BUILDING.md for detailed instructions):
git clone https://github.com/londek/ipadecrypt
cd ipadecrypt
go build ./cmd/ipadecrypt
ipadecrypt bootstrap
A three-step interactive wizard:
~/.ipadecrypt/config.json. The first sign-in downloads and caches the Apple frameworks the App Store engine emulates (~tens of MB, range-extracted from a pinned macOS image) under ~/.cache/ipadecrypt/; later runs reuse the cache.~/.ipadecrypt/credentials/.appinst present, helper uploads and execs). Best-effort: a missing prerequisite only disables that fallback and is reported, not fatal.Run it again anytime; it skips minting if a credential is already cached (pass
--remint to force). After bootstrap, decrypting modern (arm64) apps is fully
offline - the device is only needed again for the on-device fallback on old
32-bit apps.
ipadecrypt decrypt <bundle-id|app-store-id|app-store-url|path-to-local-ipa>
This decrypts offline. If the app ships a 32-bit slice the offline path can't handle and a jailbroken device is configured, ipadecrypt automatically falls back to decrypting it on the device. Useful flags:
--on-device - skip the offline attempt and decrypt on the device directly.--no-on-device - never touch the device; fail if offline can't fully decrypt.--patch-device-type - expand UIDeviceFamily so an app built for a different device type still installs during the on-device fallback.--no-uninstall / --force-uninstall - control whether the app is removed from the device after an on-device decrypt (default: removed only if this run installed it).ipadecrypt versions <bundle-id|app-store-id|app-store-url>
SC_Info format fall back to the on-device path when a device is configured.IOKit function is not mapped at the same address in fairplayd. This is in the upstream fairplay-decrypt device code and is tracked upstream.MIT.
task_for_pid + mach_vm_read from a suspended spawn, entitlement set.This project was developed with the assistance of AI tools. While I can't guarantee the accuracy of all AI-generated content, I have overviewed creation process and then reviewed, tested the code to ensure it meets the project's requirements.
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|