Dark theme for stock firmware on 6th/7th gen iPods
I'm working on a dark-themed version of the 2.0.5 Apple firmware for my 7th gen iPod Classic, and I think it's coming together. Getting excited about it and wanted to make a post. (And yes, I will share the tooling/push to Github hopefully by the weekend, even if it's a bit messy. It's a bit too messy at the moment.)
Mostly just toning down the interface to not burn my retinas out at night: dark menus, orange highlights, and lower minimum brightness (matching Rockbox's minimum).
Process so far has been:
- Get encrypted firmware dumps from theapplewiki
- Use wInd3x to decrypt the firmware blob
- Patch davidmonterocrespo24's QEMU iPod emulator to run the newer firmware
- Use ghidra, xxd, some other reverse engineering tools and some agents to identify pieces of the firmware responsible for drawing artifacts on screen. Test patches in the QEMU emulator.
- Load the patched unencrypted firmware through Rockbox's bootloader on my actual device.
- I started with chainloading--opening the custom build through rockbox file browser, but it's working well enough to boot straight into now.
Rockbox was handy for launching/capturing some hardware and memory data from the iPod to inform some patches to the emulator. The emulator isn't working perfectly yet, but it matches the hardware a little more than it did at the start and has been serviceable for visual debugging at least.
Still some visual artifacts to work out on e.g. the Now Playing screen (artwork reflection and progress bar are a bit funky).
Using a couple LLM-based tools to drive the grunt work. I'm a software dev by profession, but new to reverse-engineering type work and only have so much IRL time to throw at this, so it is what it is.
This is also my first iPod in well over a decade, certainly the first I've really tinkered with. I haven't looked into the software modding scene of the older unencrypted Classics yet, but maybe I can find some more ideas there going forward.
Open to suggestions (and certainly pull requests after I get some repos/forks published too).
(Posted by a human 🙋♂️ LLMs in my dubious code only)
233 points · 21 comments
Mentions
Dark theme for stock firmware on 6th/7th gen iPods I'm working on a dark-themed version of the 2.0.5 Apple firmware for my 7th gen iPod Classic, and I think it's coming together. Getting excited about it and wanted to make a post. (And yes, I will share the tooling/push to Github hopefully by the weekend, even if it's a bit messy. It's a bit too messy at the moment.) Mostly just toning down the interface to not burn my retinas out at night: dark menus, orange highlights, and lower minimum brightness (matching Rockbox's minimum). Process so far has been: - Get encrypted firmware dumps from theapplewiki - Use wInd3x to decrypt the firmware blob - Patch davidmonterocrespo24's QEMU iPod emulator to run the newer firmware - Use ghidra, xxd, some other reverse engineering tools and some agents to identify pieces of the firmware responsible for drawing artifacts on screen. Test patches in the QEMU emulator. - Load the patched unencrypted firmware through Rockbox's bootloader on my actual device. - I started with chainloading--opening the custom build through rockbox file browser, but it's working well enough to boot straight into now. Rockbox was handy for launching/capturing some hardware and memory data from the iPod to inform some patches to the emulator. The emulator isn't working perfectly yet, but it matches the hardware a little more than it did at the start and has been serviceable for visual debugging at least. Still some visual artifacts to work out on e.g. the Now Playing screen (artwork reflection and progress bar are a bit funky). Using a couple LLM-based tools to drive the grunt work. I'm a software dev by profession, but new to reverse-engineering type work and only have so much IRL time to throw at this, so it is what it is. This is also my first iPod in well over a decade, certainly the first I've really tinkered with. I haven't looked into the software modding scene of the older unencrypted Classics yet, but maybe I can find some more ideas there going forward. Open to suggestions (and certainly pull requests after I get some repos/forks published too). (Posted by a human 🙋♂️ LLMs in my dubious code only)