It is the obfuscator's job to break down the relationships that are visible in the source code so that they no longer appear in the resulting executable code. Reflection depends on relationships such as "the property requested by this piece of code, which is determined by this piece of code." Therefore, it is not surprising that obfuscation and reflection are not well combined with each other.
Renaming properties is only a zero level of obfuscation. A non-trivial obfuscator will also do things like splitting a property into two, so when the source code only mentions the P property, part of the runtime code will use P1, and part of the runtime code will use P2, and there will be enough assignments between them to properties had the right value when necessary, but also spurious assignments so that they did not have the right value when they are not needed. It is not only that P has been renamed: there is no longer a property P.
I don’t know why you think that reflection plus obfuscation is “large-scale and fundamental”: both reflection and obfuscation are quite rare in the great programming scheme, and there is no correlation between their use, I think that many people try to have both.
Lack of reflection is just one element in a long list of things that obfuscation costs you. If the person who decided to use obfuscation is not a protective maven, try to hammer it in them, that obfuscation has a very high cost, which they probably underestimated.
Gilles
source share