Machine code is code like any other code. Sure, often not easy to read or modify, but not impossible. I'd start with a disassembler, a debugger, possibly a decompiler and lots of patience. Given appropriate time and pay I might even consider it a fun job.
I suppose it depends on the code you're trying to understand. Depending on its size, style (therefore, ability for a human or for a decompiler to understand it) and other factors, the best blend of tools can change.