So, back to the GSM project. I figured, sure, I could design a GSM receiver from scratch, or probably social engineer some datasheets from older phones. But why not stick with what I know, the iPhone. It has a fully functional GSM transceiver. I spent two days starting from the ground up with the firmware. I found the Nucleus OS calls(it's cool, they use ASCII ids) and traced out every task and interrupt. But the first set of task didn't make sense. They called a common main loop, but passed unintelligible data. I wonder if the dev team figured this out...
But either way, I've been becoming increasing aggravated with IDA. It misses so many xrefs, and is a totally static disassembly. So I came up with this idea. Instead of doing everything manually, run it through a simulator first. Not only can you get xrefs to functions, but you can also get memory/register states to functions. It would easily determine what is code and what is data. It would do all relocations for you. It wouldn't miss any references the program uses. IDA misses any that even involve tracking the register states for two instructions.
So I started coding around midnight, I now have a simulator which can run through and disassemble the bootrom. It traces through the bootrom, and actually jumps to the correct place in the NOR. It's really cool to watch. All the crypto stuff(like the IPSF RSA bug) will soon make sense as well.
The code is online
here. I am still debating whether or not to make a pretty GUI for this, or just to have it extend IDA.