This repository documents the decryption and analysis of 39 iPod firmware binaries spanning every PortalPlayer and Samsung S5L-based iPod generation (2001–2014). This represents the most comprehensive publicly available firmware analysis of Apple's iPod product line.
All firmware binaries were extracted from official Apple IPSW files and — where applicable — decrypted using the device's hardware AES engine via the wInd3x BootROM exploit. Analysis performed using Ghidra and Capstone disassembly.
| # | Generation | Model | Firmware | SoC | Encrypted | Spec |
|---|---|---|---|---|---|---|
| 1 | 1st Gen (2001) | iPod 5/10GB | 1.1.5 | PP5002 | No | Spec |
| 2 | 3rd Gen (2003) | iPod Dock Connector | 2.2.3 | PP5002 | No | Spec |
| 3 | Mini 1G (2004) | iPod Mini 4GB | 6.1.4.1 | PP5020 | No | Spec |
| 4 | Mini 2G (2005) | iPod Mini 4/6GB | 7.1.4.1 | PP5022 | No | Spec |
| 5 | 4th Gen Mono (2004) | Click Wheel 20/40GB | 4.3.1.1 | PP5020 | No | Spec |
| 6 | 4th Gen Color (2004) | Color/Photo 20-60GB | 11.1.2.1 | PP5020 | No | Spec |
| 7 | 5th Gen Video (2005) | iPod Video 30/60GB | 13.1.2.1 | PP5021 | No | Spec |
| 8 | 5G Late 2006 | iPod Video 30/80GB | 20.1.2.1 | PP5021 | No | Spec |
| 9 | 5.5G Enhanced (2006) | iPod Video Enhanced | 25.1.2.1 | PP5022C | No | Spec |
| 10 | Nano 1G (2005) | iPod Nano 2GB | 14.1.3.1 | PP5022 | No | Spec |
| 11 | Nano 1G (2005) | iPod Nano 4GB | 17.1.3.1 | PP5022 | No | Spec |
| 12 | Nano 3G (2007) | iPod Nano 4/8GB | 26.1.1.3 | S5L8702 | Yes (AES) | Spec |
| 13 | Classic 6G (2007) | iPod Classic 80/160GB | 1.1.2 | S5L8702 | Yes (AES) | Spec |
| 14 | Classic 6.5G (2008) | iPod Classic 120GB | 2.0.1 | S5L8702 | Yes (AES) | Spec |
| 15 | Nano 5G (2009) | iPod Nano 8/16GB | 1.0.2 | S5L8730 | Yes (AES) | Spec |
| 16 | Classic 7G (2009) | iPod Classic 160GB | 2.0.4 | S5L8702 | Yes (AES) | Spec |
| 17 | Classic 7G (2012) | iPod Classic 160GB | 2.0.5 | S5L8702 | Yes (AES) | Spec |
Additional firmware dumps analyzed: iPod 4th Gen Mono (FamilyID 10), 4th Gen Color (FamilyID 5), 5G Video (13.1.3, 20.1.3), 5.5G (25.1.2.3, 25.1.3), Classic 7G (2.0.4 no-DRM variant).
| Feature | 1G | 3G | Mini | 4G Mono | 4G Color | 5G/5.5G | Nano 1G | Nano 3G | Classic 6G | Classic 6.5G | Nano 5G | Classic 7G |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RTXC RTOS | ✅ | ✅ | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Pixo OS | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| FreeType2 | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| MeCCA Codecs | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| SQLite | — | — | — | — | — | — | — | — | — | ✅ | ✅ | ✅ |
| FairPlay DRM | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Cover Flow | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Nike+ iPod | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Voice Memos | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Photos | — | ✅ | — | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Games | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Video Playback | — | — | — | — | — | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Debug Menu | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Disk Mode | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ |
| FM Radio | — | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ |
| Genius | — | — | — | — | — | — | — | — | — | ✅ | ✅ | ✅ |
| Genius Mixes | — | — | — | — | — | — | — | — | — | ✅ | ✅ | ✅ |
| Demo Mode | — | — | — | — | — | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| EU Volume Limit | — | — | — | — | — | — | — | — | — | — | — | ✅ (2.0.5) |
| HW AES Encryption | — | — | — | — | — | — | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Camera | — | — | — | — | — | — | — | — | — | — | ✅ | — |
| Pedometer | — | — | — | — | — | — | — | — | — | — | ✅ | — |
| VoiceOver | — | — | — | — | — | — | — | — | — | — | ✅ | — |
| Shake Gesture | — | — | — | — | — | — | — | — | — | — | ✅ | — |
| FM Live Pause | — | — | — | — | — | — | — | — | — | — | ✅ | — |
| Document | Description |
|---|---|
| Boot Chain | Full boot sequence from BootROM → NOR → Disk → OSOS |
| Memory Map | S5L8702 physical memory map, peripheral registers, DRAM layout |
| IPSW Format | IPSW container structure, MSE sections, IMG1 header format |
| NOR Flash | NOR flash memory map, SysCfg structure, boot image locations |
| RTOS Internals | RTXC task table, scheduling model, kernel API |
| Codec Framework | MeCCA pipeline architecture, audio/video decode flow |
| DRM Architecture | FairPlay key hierarchy, AES hardware, game signing |
| Cover Flow Engine | Rendering pipeline, fixed-point math, DMA double-buffering |
| RSRC Resources | Resource partition format, contents, security model |
All iPod firmware is distributed as IPSW files (standard ZIP archives). Two formats exist:
| Format | Era | Contents | Encryption |
|---|---|---|---|
| Format A | PortalPlayer (2001–2006) + Classic/Nano 2-3 | Firmware-{ID}.{ver} + manifest.plist |
None (PP) / AES (S5L) |
| Format B | Samsung S5L (Nano 4–7) | {Board}.bootloader.rb3 + Firmware.MSE + manifest.plist |
AES-128-CBC |
53 IPSWs cataloged across 18 generations. See architecture/IPSW_FORMAT.md for complete inventory.
Power On → BootROM (silicon, 64KB) → NOR Bootloader (IMG1) → AES Decrypt → RetailOS (OSOS) → RTXC Kernel → Application Layer
The S5L8702 boot chain has no post-decryption hash verification — encryption serves as the sole authentication mechanism. See architecture/BOOT_CHAIN.md.
| Region | Offset | Size | Content |
|---|---|---|---|
| SysCfg | 0x00000 | 256 B | Device identity (serial, model, HW revision) |
| Boot Image 1 | 0x08000 | 104 KB | Primary IMG1 bootloader |
| Boot Image 2 | 0x22000 | 108 KB | Backup bootloader |
| Extended | 0x41D00 | 762 KB | Bootloader data / disk mode |
SysCfg tags: SCfg, SrNm, FwId, HwId, HwVr, SwVr, MLBN, MMod, Regn, Codc. See architecture/NOR_FLASH.md.
| Address Range | Size | Description |
|---|---|---|
| 0x00000000–0x0000FFFF | 64 KB | BootROM (mirrored) |
| 0x08000000–0x0BFFFFFF | 64 MB | DRAM (main working memory) |
| 0x20000000–0x200FFFFF | 1 MB | NOR Flash (bootloader, SysCfg) |
| 0x22000000–0x2200FFFF | 64 KB | SRAM (RTXC kernel, DFU buffer) |
| 0x38000000–0x3FFFFFFF | 128 MB | Hardware Peripherals (MMIO) |
Peripheral reference counts from firmware analysis: GPIO (1,155 refs), LCD (0x38200000), Clock/Power (1,313 refs), Timer/IRQ (871 refs), AES Engine (866 refs). See architecture/MEMORY_MAP.md.
├── README.md ← You are here
├── DECRYPTION_GUIDE.md All-model decryption/extraction guide
├── LICENSE MIT License
├── wind3x-patch/ wInd3x device descriptor patch (code)
│ ├── README.md
│ ├── devices.go
│ ├── devices.go.patch
│ ├── BUILD.md
│ └── TESTED_OUTPUT.md
├── specs/ Per-device firmware feature specifications
│ ├── iPod_1st_Gen_1_1_5.md
│ ├── iPod_3rd_Gen_2_2_3.md
│ ├── iPod_Mini_1st_Gen_6_1_4_1.md
│ ├── iPod_Mini_2nd_Gen_7_1_4_1.md
│ ├── iPod_4th_Gen_Mono_4_3_1_1.md
│ ├── iPod_4th_Gen_Color_11_1_2_1.md
│ ├── iPod_4th_Gen_Photo_5_1_2_1.md
│ ├── iPod_5th_Gen_Video_13_1_2_1.md
│ ├── iPod_5th_Gen_Video_Late_20_1_2_1.md
│ ├── iPod_5_5G_Video_Enhanced_25_1_2_1.md
│ ├── iPod_Nano_1st_Gen_2GB_14_1_3_1.md
│ ├── iPod_Nano_1st_Gen_4GB_17_1_3_1.md
│ ├── iPod_Nano_3rd_Gen_4GB_26_1_1_3.md
│ ├── iPod_Classic_6G_Initial_24_1_0_1.md
│ ├── iPod_Classic_6G_Initial_24_1_0_3.md
│ ├── iPod_Classic_6G_Initial_24_1_1.md
│ ├── iPod_Classic_6G_Initial_24_1_1_2.md
│ ├── iPod_Classic_6_5G_Rev_A_33_2_0.md
│ ├── iPod_Classic_6_5G_Rev_A_33_2_0_1.md
│ ├── iPod_Nano_5th_Gen_34_1_0_2.md
│ ├── iPod_Classic_7G_35_2_0_4.md
│ └── iPod_Classic_7G_38_2_0_5.md
├── comparisons/ Version-to-version diffs
│ ├── Classic_Evolution_6G_to_7G.md
│ ├── Classic_6G_vs_6_5G_vs_7G.md
│ ├── Nano_3G_vs_Classic_6G.md
│ ├── Classic_204_vs_205.md
│ ├── Nano3G_vs_Classic.md
│ ├── iPod_4th_Gen_Mono_vs_Color.md
│ ├── iPod_5th_Gen_versions.md
│ └── iPod_Nano_1G_2GB_vs_4GB.md
└── architecture/ Deep dive documents
├── BOOT_CHAIN.md
├── MEMORY_MAP.md
├── IPSW_FORMAT.md
├── NOR_FLASH.md
├── RTOS_INTERNALS.md
├── CODEC_FRAMEWORK.md
├── DRM_ARCHITECTURE.md
├── COVERFLOW_ENGINE.md
└── RSRC_RESOURCES.md
- PortalPlayer era (2001–2006): PP5002/PP5020/PP5021/PP5022 SoCs running Pixo OS
- Samsung S5L8702 era (2007–2012): S5L8702 SoC (ARM926EJ-S) running RTXC with "Silver" UI framework
- Samsung S5L8730 era (2009): S5L8730 SoC (ARM Cortex-A8, ARMv7) — first iPod with ARMv7
- All iPods use ARM cores (ARM7TDMI → ARM926EJ-S → Cortex-A8)
- The Nano 3G and ALL Classic variants share the same S5L8702 SoC and N25C codename
- Classic firmware grew from 9.47 MB (6G, 2007) to 10.14 MB (7G 2.0.5, 2012) — a 7% increase over 5 years
- Classic 6G Initial (2007): 21,203 functions, 67,349 strings — no Genius, no EU Volume
- Classic 6.5G Rev A (2008): 22,810 functions (+7.6%), 71,744 strings — Genius added
- Classic 7G Rev B (2009): 23,036 functions (+1.0%), 72,926 strings — minor refinements
- Classic 7G Rev C (2012): 23,164 functions (+0.6%), 73,500+ strings — EU Volume Limit added
- First ARM Cortex-A8 iPod — transitions from ARMv5TEJ to ARMv7
- First Thumb-dominant firmware — 94.9% Thumb-2 code (vs 76.5% ARM on Nano 3G)
- Smaller binary, more features — 6.95 MB with camera, pedometer, FM Live Pause, VoiceOver
- 30 RTOS tasks (vs 11 on Classic) — dedicated tasks for camera, pedometer, radio
- iPod 4th Gen Mono: FamilyID 4 and FamilyID 10 are byte-identical
- iPod 4th Gen Color/Photo: Color, Color FamilyID 11, and Photo FamilyID 5 are byte-identical
- iPod Nano 1G: 2GB (FamilyID 14) and 4GB (FamilyID 17) are byte-identical
Hidden Features (S5L8702 Devices)
- Debug Menu — Full internal debug interface with disk browser, memory viewer, unit tests
- Demo Mode — Apple Store kiosk mode (TCDemoMode controller)
- RTXCbug — Interactive RTOS debugger with task/object inspection
- 22 Logging Channels — Disk, USB, playback, photo import telemetry
- Unit Test Framework — Built-in test suite (TUnitTestSuiteCntlr)
- MockupMode — Developer UI prototyping tool
The S5L8702 has no GPU or hardware 2D/3D accelerator. Cover Flow is achieved through highly optimized fixed-point ARM assembly rendering at ~30 FPS on a 200MHz CPU. Column-by-column affine texture mapping with DMA double-buffering.
See DECRYPTION_GUIDE.md for complete instructions covering all iPod models:
- Unencrypted models (1G–5G, Nano 1G, Mini): Simple IPSW extraction
- Encrypted models (Classic 6G/7G, Nano 3G+): Hardware AES decryption via wInd3x
See wind3x-patch/ for the device descriptor patch that adds iPod Classic support to wInd3x.
Quick reference:
DFU PID: 0x1223 (Rev A/B) / 0x1250 (Rev C)
WTF PID: 0x1247 (Rev B) / 0x1250 (Rev C)
SoC: S5L8702 (same as Nano 3G)
Protocol: DFUProtoVersion1
| Codename | Device | SoC | FamilyIDs |
|---|---|---|---|
| N25C | iPod Classic 6G / 6.5G / 7G (all revisions) | S5L8702 | 24, 33, 35, 38 |
| N46 | iPod Nano 3rd Generation | S5L8702 | 26, 27 |
| N58s | iPod Nano 4th Generation | S5L8720 | 31 |
| N33 | iPod Nano 5th Generation | S5L8730 | 34 |
| N20 | iPod Nano 6th Generation | S5L8723 | 36 |
| N31 | iPod Nano 7th Generation | S5L8740 | 37 |
Note: All iPod Classic variants (6G Initial, 6.5G Rev A, 7G Rev B, 7G Rev C) share the N25C codename because they use the same S5L8702 SoC and PCB design. The hardware revisions differ only in HDD capacity, minor board component changes, and USB PID assignments.
- freemyipod/wInd3x — BootROM exploit and firmware tool
- Olsro/reddit-ipod-guides — iPod Classic modding guides
- DavidBuchanan314/classic-ipod-tools — NOR flash tools
- TheAppleWiki - USB Product IDs
- TheAppleWiki - DFU Mode
- TheAppleWiki - iPod Firmware
This research is conducted for educational and interoperability purposes under fair use principles. All analyzed iPod models are discontinued products. No copyrighted Apple code is distributed — only analysis results and documentation.
MIT License — see LICENSE.