Is there a good FOSS utility for converting machine code to assembly or even C?

view story

http://unix.stackexchange.com – If I buy a piece of x86 32-bit or 64-bit software but I don't receive the source code, and I need to modify the software, I'll need to convert the machine code back into a high level language or at least assembly code. Is there a good utility to go from machine code to C? I assume that it would attempt to identify whether the program was compiled with a C compiler as opposed to C++ or Objective C or anything else. Thanks. (HowTos)