Some of the most painful games I've had to crack were those that used obfuscated assembly (usually by xor'ing entire sections of code). This had the annoying effect of making it impossible to put breakpoints too far ahead of the code because assembly debuggers put breakpoints by modifying the opcodes (usually calling an interrupt) so by the time the unrolling routine comes along, it will decode the wrong bytes and you'll get garbage (and usually, a nice lock up or reboot).
The only way around that was to painfully go stage by stage, which was very time consuming.
The only way around that was to painfully go stage by stage, which was very time consuming.