Есть ряд вещей, которые делают обратный инжиниринг довольно простым.
Тип информации. Это массивно. В ассемблере x86 вы должны определить типы переменных в зависимости от того, как они используются.
структура. Информация о структуре приложения более доступна в ил разборки. Это, в сочетании с информацией о типе, дает вам огромное количество данных. В данный момент вы работаете на довольно высоком уровне (относительно ассемблера x86). В нативном ассемблере вы должны определить структуру структур (и даже тот факт, что они являются структурами) на основе того, как используются данные. Не невозможно, но гораздо больше времени.
имена. Знание названий вещей может быть полезным.
Все это в совокупности означает, что у вас достаточно данных об исполняемом файле. Il в основном работает на уровне, намного более близком к исходному, чем компилятор нативного кода. Чем выше уровень, на котором работает байт-код, тем проще обратная инженерия, вообще говоря.