Reverse Engineering Iwork
Posted3 months agoActive3 months ago
andrews.substack.comTechstory
supportivepositive
Debate
10/100
Reverse EngineeringIworkFile Formats
Key topics
Reverse Engineering
Iwork
File Formats
The author reverse-engineered iWork file formats, sparking a discussion among HN users who shared their own experiences with similar projects.
Snapshot generated from the HN discussion
Discussion Activity
Light discussionFirst comment
6h
Peak period
1
4-6h
Avg / period
1
Key moments
- 01Story posted
Oct 15, 2025 at 7:44 AM EDT
3 months ago
Step 01 - 02First comment
Oct 15, 2025 at 1:38 PM EDT
6h after posting
Step 02 - 03Peak activity
1 comments in 4-6h
Hottest window of the conversation
Step 03 - 04Latest activity
Oct 16, 2025 at 7:39 AM EDT
3 months ago
Step 04
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
ID: 45590935Type: storyLast synced: 11/20/2025, 12:41:39 PM
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.
I also did something similar back around 2014 in https://github.com/dunhamsteve/iwork but I didn't get much further than tables on the Numbers side before taking a break. There I translated iwork files to HTML. That code has been largely neglected since then, and I never wrote up my process. Like the other commenter, I based this on https://github.com/obriensp/iWorkFileFormat
For ObjC programs that don't embed the descriptors, I wrote a python script that reverse engineers protobuf schemas from disassembled code: https://gist.github.com/dunhamsteve/224e26a7f56689c33cea4f0f... I don't remember what project that was for, but maybe it's useful to someone.
And for Notes.app, I reverse engineered the description from the binary protobuf data. Since there is ambiguity between binary data and nested objects, my script would build a tentative schema and then refine it against further examples. I later learned that the full schema, in text form, was embedded in the web version of the application. That project is at https://github.com/dunhamsteve/notesutils and also is neglected. I believe the table format has changed enough that tables are no longer working.
I spent a couple hours maybe 6 months ago trying to reverse engineer the protobuf version. I could not. Above my ability.
This is frankly kind of fascinating to read and sounds like it targets exactly me.
I wish they'd just gone with a better XML format, or JSON or something. Locking a users raw data away in a binary file even if it's a protobuf will never not be rude.