Código:
IL_002b: call bool [mscorlib]System.String::op_Equality(string, string)
IL_0030: stloc.0
IL_0031: ldloc.0
IL_0032: ret
El call llama a la función System.String::op_Equality osea, compara dos strings. Ahora, la siguiente instrucción, le dice dónde guardar el resultado de esa comparación. stloc.0 sería algo como "store in local var 0", y 0 es la 1er variable definida (osea flag).
Si NOPeas esa instrucción y colocas TRUE al inicio en esa variable, debería funcionar sin mayores cambios.
En otras palabras, la posible solución sería:
1) Inicializar flag a True.
2) NOPear la parte que sobreescribe el valor de la variable (IL_0030: stloc.0)
3) Listo. (ldloc.0 seria algo como "load from local var 0". El ret sale de la función, por lo que cuando decompilás en alto nivel, te sale ret flag (flag es la variable local que esta en el index 0)
Como ves, hay varias formas de solucionar este tema. Como te dije antes, la idea es jugar un poco...
Saludos!