Fíjate que el código se puede seguir aún estando ofuscado.
Por ej, en el ejemplo que pusiste, los br.s son lo mismo que un jmp en ASM. Osea, lo que hace es transferir la ejecución a la etiqueta que tiene como parámetro.
Con Reflexil (plugin de Reflector) podrás seguir perfectamente el código, pues te dice que hace cada opcode
El ejemplo "traducido" quedaría:
.method public hidebysig static void () cil managed
{
.maxstack 8
L_000f: call class [mscorlib]System.OperatingSystem [mscorlib]System.Environment::get_OSVersion()
L_0016: callvirt instance valuetype [mscorlib]System.PlatformID [mscorlib]System.OperatingSystem::get_Platform()
L_0004: ldc.i4.2
L_0005: bne.un.s L_000e
L_001d: newobj instance void .::.ctor()
L_0009: stsfld class . .::
L_000e: ret
}
Por supuesto, las "etiquetas" cambiarán, pero ya puedes usar Reflexil para des-ofuscar el código
Saludos!