project · method · ethics
An evidence-based atlas of the HTTP API used by archived, already-decrypted builds of the official Reddit iOS app — plus the client you are looking at, built on the endpoints that survived.
Older builds of the official Reddit iOS app were written against a Reddit that no longer
exists: a pre-OAuth web API, cookie sessions, a X-Modhash header. Those builds are
archived, and the oldest of them were shipped without FairPlay encryption, which means
their __cstring sections can be read. The question this project asks is narrow and
testable:
Do those builds expose API endpoints and embedded configuration that a new third-party client cannot obtain today — and can a modern client be built on them?
The answer is confirmed, partially. The app-only read surface still works with the configuration recovered from a 2016 build; the user surface does not.
The 2016 app embeds an OAuth client_id next to its scope string. Installed-app
clients carry no secret — that is Reddit's design for apps that cannot keep one — so
the identifier is the whole credential. It still exchanges for an app-only access token
against the live API:
POST https://www.reddit.com/api/v1/access_token
Authorization: Basic <client_id>:
grant_type=https://oauth.reddit.com/grants/installed_client
device_id=<uuid>A control probe with a random 14-character identifier returns 401, so the exchange is
validating the id rather than accepting anything. This matters because Reddit stopped
issuing new OAuth client ids to third-party developers; one that predates that change is
the scarce thing, not the technique.
The live-validation table on the analysis page shows the full result
set: reads answer 200, user-gated endpoints answer 403 USER_REQUIRED, and the
pre-OAuth paths are gone.
cryptid) and select only builds whose __TEXT is plaintext. Encrypted builds are out of scope, not merely hard.
__cstring / __objc_* and classify hosts, paths, OAuthconfiguration, User-Agent template and auth flows. Decompile the networking layer where the string evidence alone is ambiguous.
provenance.
The UI is deliberately read-only. An app-only token can read; it cannot vote, comment,
submit or moderate. Rather than render controls that would fail, the interface offers
none of them — and says so. The OAuth token lives in apps/api and never reaches the
browser; every request the page makes is a GET.
Data flow: apps/web → apps/api (token cache, response cache, rate-limit
awareness) → oauth.reddit.com. When the API is unreachable, the pages fall back to
bundled snapshots so the analysis stays readable; the badge on each page tells you which
source you are looking at.
circumvented, no decryption is performed, and encryption is detected rather than defeated.
GETs against public hosts. Nomutating endpoint was called with real credentials, and no user data was accessed.
git-ignored secrets/ directory; documentation and this UI refer to it in masked
form only. The masking is applied at render time as well as at snapshot-generation
time, so no secret can leak into the DOM.
exercise, not a service. If you are Reddit and you would like something here changed, that is a reasonable request to make.