ANDY_WARHOL: No, jde o to, ze na zaklade C# zdrojaku jsi schopen vytvorit jen podmnozinu moznosti, ktere lze udelat v IL.
Jeden priklad za vsechny: v C# nemuzes volat (i definovat) dve metody lisici se pouze typem navratoveho parametru. V IL s tim neni problem. Pri dekompilaci do C#/VB.NET/atd... se ti tento kus proste nepovede prevest. A pokud se ti povede prevest do C#, tak ho uz ale nezkompilujes.
V IL je taktez validni, kdyz staticka metoda neni v zadnem typu (trida/struktura) a je obsazena primo v modulu (tam co jsou typy). Nicmene v C#/VB.NET/atd... to je nevalidni.
Dalsi moznosti je delat tam ruzny prasarny. V nejakym blogpostu jsem cetl napad cloveka, kterej vzal vygenerovanej IL ze C# kde byl klasicky "for(int i = 0; ......)" a zprahazel tam nejaky IL instrukce. Ve vysledku to fungovalo uplne stejne dobre, ale dekompilatory si s tim neporadili (nedokazali zrekonstruovat ten upravenej "for").
Nicmene pokud chces necemu takovymu zabranit chytrejsim zpusobem nez jen pouzit nejaky dostupny obfuskator, tak se nevyhnes primy praci s IL.
Ve vsech pripadech ale plati, ze si to vzdycky muze diassemblovat primo do IL a upravit si to rovnou v nem. Kdyz si v projektu nekde vedle udela metodu se stejnou signaturou, vyplni ji svym kodem a nasledne vznikly IL vymeni za ten tvuj, nejspis bude uspesny.