Vitanuova for 2005 February 25 (entry 1)

< Slouching toward veganism
TCG and the ThinkPad BIOS >

Thanks to Mako, I heard about a remarkable piece of reverse engineering. A reverse engineer (Nils Schneider) wanted to study the firmware of the Apple iPod in order to figure out how to write software that runs on iPods. But he experienced a chicken-and-egg problem: after learning how to write simple programs to run on an iPod, he found that he couldn't figure out how to use the iPod's I/O hardware (in order to extract a copy of the firmwire) without studying the firmwire first to see how Apple does I/O. At the same time, he couldn't study the firmware without first extracting a copy of it.

His ingenious solution was to use someone else's technique for making the iPod squawk and squeak, in order to write a program that output the firmware as a series of sounds (which could then be recorded using a microphone, and analyzed using software on a PC in order to convert them back into a digital representation of the firmware). In effect, he turned the iPod and microphone system into an acoustic modem, and wrote his own modulation scheme for representing data as sound. He wasn't using the iPod's headphone jack; he was making the iPod itself squeak and squawk, using a piezoelectric element somewhere inside the iPod. To protect against background noise, he had to put the iPod and the microphone together inside a padded box, and let them sit for eight hours.

Somehow this reminds me of the scene in William Gibson's "Johnny Mnemonic" in which Johnny is made to recite (for three hours) a memorized computer program to which he has no conscious access. "And then it all faded to cool gray static and an endless tone poem in the artificial language. I sat and sang dead Ralfi's stolen program for three hours." In the story, the program in question is a misappropriated secret; here, despite the interesting aesthetic parallel, I think Schneider's purpose in studying the iPod's firmware is perfectly proper.

In fact, Nils Schneider's remarkable creativity with the iPod gives me a kind of hope for the future. In seventh grade, when I had a computer with a dead monitor (I think it turned out to be unplugged), I wrote a routine to give output in terms of beeps on the speaker; you could tell if a program was working by counting the number of beeps it output. (Strings could be translated into binary and then beeped at you that way, but it was a little tedious writing them down and trying to decode them.)

Schneider's ingenious approach shows several important virtues:


[Main]
Support Bloggers' Rights!
Support Bloggers' Rights!


Contact: Seth David Schoen