をEnum.IsDefined。Eazfuscator.NETブレークは、私は多くの小さな列挙型を使用することが私のコードでは
bool valid_input = Enum.IsDefined(typeof(UserRequest), user_byte_value);
このアプローチは、列挙型がFlagsAttributeを使用するときには機能しません。 Enum.IsDefinedは自動的にフラグを結合して指定された値にすることはできません。しかし、私はFlagsAttributeを必要としないで回避することができました。
しかし、Eazfuscator.NETの難読化はEnum.IsDefinedを破ります。私はそれが可能であることを知っていましたが、System.Reflection名前空間にないので、それは望んでいませんでした(しかし、それはSystem.Reflectionを大量に使用しています)。
誰かが良い選択肢を知っているのだろうかと思います。私は具体的に次のとおりです:
- 整数が指定された列挙型にあるかどうかを調べることができます。
- .NET Framework 2.0およびMono Frameworkと互換性があります。
- 明示的に無効にすることなく(属性またはGUIツールを使用して)難読化を継承します。
「Eazfuscatorが自分のコードを壊す」という質問は常にあります。通常、「彼らは応答していません」。それを捨てなさい。 –
@ HansPassant IIRC、私が使用した他の難読化ツールのいくつかはEnumを破損しません。定義されていますが、私はEazfuscatorを非難しません。私は、私が「enum guards」と呼んでいると思っている解決策を検討するかもしれません。 enum UserRequests:byte {Burp = 0、Sneeze = 1、Fart = 2、MAXVAL = 3} そして、指定された整数がそれと比較してフラグに入っているかどうかを確認することができますMAXVAL。 –
[Crypto Obfuscator](http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm)を試してください。 enumベースのシナリオにはいくつかのインテリジェントな自動除外ルールがあります。免責事項:私はLogicNPソフトウェア、Crypto Obfuscatorの開発者のために働いています。 – logicnp