It's definitely IDA Pro. If anyone is considering how difficult this is, let me offer you my experience. It is incredibly hard and requires utmost persistence. I tried to refresh (learn more about) my knowledge of x86/x86-64 asm and decided to give a go on modifying a binary that was not produced by me. It seems to be a common exercise, so I though - how difficult can this be? Right? You follow code procedures, take note of jumps, there's even a handy visual graph of the things, take another application that can offer you to see function names and break calls... Suddenly, you're in this loop where you take notes on paper (yes), you seem to understand a part, move to the next and then you realise you didn't actually understand the part before and go back, and then you get tangled in variables and registers..
It takes a special set of skills and a mindset to do this. I recommend everyone to try that once. Just take a foreign binary, any which you know the application of, and try to modify it. Then, after you give up, take a note this was done on an unknown binary with (almost) unknown functionality. TBH, he did say he looked up a table of known functions on a wiki somewhere, but still...