Если вам попадает чужой продукт, и в нем нужно что-то исправить - читаете код, разбираетесь в нем и исправляете.
Реверс инженеринг - это тоже самое, только исходников нет, приходится разбираться с готовыми исполняемыми файлами, пользуясь дебаггерами, дизассемблерами, анализаторами.
А следовательно нужно учить как работают операционные системы, стандартные библиотеки, протоколы, глубже ассемблер.
И много опыта разработки - невозможно быть хорошим специалистом по реверс-инженерингу и не уметь просто хорошо программировать - вы же должны представлять, как примерно выглядела программа только по ее откомпилированной и рабочей части.
P.S. Если посмотреть ваши вопросы, то есть сомнения, что С и Ассемблер у вас пройденный этап.