The cause why there isn't any program of that type isn't because the code of the programs of big companies would be known, the cause is because it's very very very complex doing that kind of program because there's no a unique sollution to the problem.
I mean: you have an EXE, that's the same as if you have some ASM code. Well, from the ASM code you can't decide what the original C code was, because several C codes can give as result the same ASM code and also the C code may have been so optimized that once you have the ASM it's impossible to know the original code.
Also, suppose the program can "extract" the C code: As you know, the C language uses variables (as most of all high-level programming languages). Well, what would the name of those variables be? Note that the names of variables are only nemonics (<- dodgy spelling
). The only thing that the supposed decompiler could do is assing names like v0001, v0002, and so.. and with those names you wouldn't be able to understand the code. Similar things would happen with inline functions, global optimizations, calling conventions, etc... The code would be unreadable.
In short: there are some things in high-level languages that help the programmer in doing his/her job, and those things exists only in high-level languages. They're lost when you compile a program and they can't be restored in a decompilation. That's why, in case that kind of tool exists, it'd be useless.