This is just an idea to throw out, since I have very little free time and am already tied up in my own projects, but eh?
Writing a good decompiler. Basically, take a disassembler to the next level; have it convert code right back to C or C++, including known header functions it finds, various function conventions (__cdecl, __fastcall, etc).
This would probably be very difficult, but eh?
That's all for now.. it's about 6 hours past my bed time :)
Tell me when you've made it better than IDA :)
I'll get right on it :-P
It's on the bottom of my real life priority queue right now, and the queue is big and my speed is slow, so it could take awhile :)
It'd require figuring out how vc++ expands ifs and classes. You'd probably need to write a debugger too, to runtime check the types of variables PUSHed on the stack as function args.
Good luck once you get into virtual functions/dynamic binding/inheritance/templates/polymorphism or even classes for that matter... one word: Impossible.
You might be able to get some level of conversion to C, but you'll never be able to convert it back to it's C++ equivalent. (Assuming it was written in C++)
Also note that optimization modifies all the original structures generated very much - interleaving instructions from different source code lines, removing/joining redundant instructions etc.
Not to mention how much things can change depending on the compiler used (ebx used as this sometimes in VC7, for example).
And, and, and ... good luck when ... you know ... good luck.
If it was easy, there would already be one floating around, but I've never heard of one so it must be fairly difficult :-D