Задача обфускатора - разрушать отношения, видимые в исходном коде, чтобы они больше не были видны в результирующем исполняемом коде. Отражение опирается на такие отношения, как «свойство, запрошенное этим фрагментом кода, является свойством, определенным этим фрагментом кода». Поэтому неудивительно, что запутывание и отражение плохо сочетаются друг с другом.
Переименование свойств - это просто нулевая степень запутывания. Нетривиальный обфускатор также будет выполнять такие вещи, как разделение свойства на две части, так что, когда в исходном коде упоминается только свойство P, часть кода времени выполнения будет использовать P1, а часть кода времени выполнения будет использовать P2, и этого будет достаточно. присваивания между ними, чтобы при необходимости свойства имели правильное значение, а также паразитные присваивания, чтобы у них не было правильного значения, когда они не нужны. Дело не только в том, что P был переименован: больше не является свойством P.
Я не знаю, почему вы думаете, что рефлексия плюс запутывание «широко распространены и фундаментальны»: и рефлексия, и запутывание довольно редки в большой схеме программирования, и нет никакой корреляции между их использованием, поэтому я не Я думаю, что многие люди пытаются получить и то, и другое.
Отсутствие размышлений, чтобы быть лишь одним пунктом в длинном списке вещей, которые запутывает вас. Если человек, который решил использовать обфускацию, не является специалистом по безопасности, постарайтесь убедить его, что обфускация имеет очень высокую стоимость, которую они наверняка недооценили.