- Rust 100%
apple crate collection #
At some point I started a sideloader rewrite in Rust in parallel of my D rewrite.
To this end, I wanted to have clean crates to interact with Apple servers. After trying the other solutions, I always find the API clunky and kind of pile of hacks.
So I rewrote everything taking in account only Apple implementations.
But when you start rewriting following Apple behaviours, it shapes your code in a way that encourages you to reimplement more and more. I ended-up rewriting my sideloader, but along with it, I started reimplementing a whole Apple daemon userland xD. It requires so many APIs.
Eventually, I wrote enough code for the LLMs to be able to understand how I write code, and I let those write more code, following my guidance on how I want things to be done.
The number of crates here skyrocketed in consequence. Here is a breakdown of every crate here:
But just before, don't hesitate to reach me out if you have any questions, in the discussion tab here or on Discord! I do my best to be reactive and useful.
Also, if you enjoy my work, please consider giving me a small tip in GitHub sponsors ❤️
(and for other payment methods see in DM)
Apple server interaction #
ADI implementations #
adi #
Abstracts an ADI connection, allows communication with ADI code. You can use any ADI backend, and there are wrappers for every official Apple implementation in other crates, cool for your tests.
adid-proxy #
The ADI wrapper for adid, Apple's implementation of ADI on iOS/tvOS/iPadOS and macOS High Sierra and later.
On macOS Golden Gate (27.0), this daemon now needs an entitlement to be contacted.
Create an adi::ADIProxy on a Darwin system that can connect to the adid daemon.
android-coreadi #
The ADI wrapper for Android libCoreADI.so (not other libCoreADI.so, because I know there are others :p,
but the impl inside isn't much different xD). The main advantage is that it is available on most architecture and is
customizable, but now Apple blocks it from using iTunes/iCloud APIs ('cause this kind of ADI is not used with iCloud).
library-coreadi #
Create an adi::ADIProxy given a distribution of CoreADI for your system.
This includes Intel Macs (using an old iTunes' binary), Windows (with iCloud, iTunes, or any other MS Store Apple application), and Android (with Apple Music for Android's binaries, or Apple TV for Android (NOT Android TV, and no other esoteric impl)).
APIs #
grandslam #
A fully-featured, type-safe, well-designed Apple server API wrapper.
You can log into an Apple account via GSA APIs with any ADIProxy, fetch the tokens, while handling every error correctly, including Apple's server errors.
You might ask: How do I handle 2FA? There's no API?
Yeah, grandslam does not handle that, but in the URLBag, there is the second step URL.
You need to request it with an IdentityHTTPSession (along with all the subsequent requests), and translate the mustache
templates in it to show it right.
And why would I use your crate that leaves me with that gigantic work? Because it handles everything!! Continuation tokens, PET, tokens in general, ADSID, Reprovision, Sync, URL Switching, custom bundles, with good typed APIs. You can really build solid software on top of it.
aps #
Connect to Apple Push Services and APNS as a Mac. It used to contain a Windows implementation too, but it seems that Apple does no longer accept Windows client so everyone know need to look like a Mac!
The usage is narrow but still cool to have it for what it's worth.
icloud (unfinished) #
Retrieve iCloud Contacts. For now, it's only that, probably more in the future.
itunes (basically a stub) #
Implement iTunes APIs here, store APIs…
macos-catalog #
Get a list of available macOS updates. Useful to know all current Mac devices along with their identifiers.
sharing #
Fetch a certificate to be able to identify to other Apple devices on AWDL (AirDrop).
If you are authenticated, this gets linked to your Apple Account so your other devices trust it.
xcode #
Interact with Xcode legacy and more recent API, and get the Xcode download catalogs, both for personal and paid developer accounts.
Other good stuff #
airdrop #
Basically a rip-off of part of omdrop to re-use my sharing crate.
apple-codesign-quick #
A port of Sideloader's barebone very fast signer in Rust.
Sideloader's signer is less hacky than zsign and is way faster than apple-codesign-rs (probably partly because it takes a few shortcuts too in addition of being multithreaded and designed with performance in mind).
elf-loader #
A better minimal cross-platform elf-loader crate.
I will add feature as needed for the other packages
fairplay #
You can decrypt Apple executables personalized for a specific device if you have their keys.
A simplification of part of the code of fairplay-decrypt/
plist-macros #
Allows declarative syntax for Apple property lists (plist).
Should be included in the official plist crate if you ask me.