在这篇很棒的文章(http://eatplayhate.wordpress.com/2010/07/18/mono-cecil-vs-obfuscation-fight/)中,作者声称 Mono.Cecil 并不完美,但它翻译得很好90%的功能没有任何问题。
我对你们的问题是:一个邪恶的程序员能否混淆无法使用 Mono.Cecil 反混淆的恶意代码,从而导致我的程序(第 3 方代码)严重违规?如果答案是肯定的,您知道我可以使用哪些符号来编写此类代码,或者我如何保护自己免受此类代码的伤害?
在这篇很棒的文章(http://eatplayhate.wordpress.com/2010/07/18/mono-cecil-vs-obfuscation-fight/)中,作者声称 Mono.Cecil 并不完美,但它翻译得很好90%的功能没有任何问题。
我对你们的问题是:一个邪恶的程序员能否混淆无法使用 Mono.Cecil 反混淆的恶意代码,从而导致我的程序(第 3 方代码)严重违规?如果答案是肯定的,您知道我可以使用哪些符号来编写此类代码,或者我如何保护自己免受此类代码的伤害?
当然,一个邪恶的程序员总是能比你去混淆它更好地混淆代码。预先确定任意代码的行为毕竟是一个无法确定的问题。
更实际地,混淆与去混淆的斗争只是在于谁付出了更多的努力。混淆比反混淆容易得多,但出于各种原因,商业混淆器往往不如您可以手写或使用自定义混淆器编写的复杂得多。Mono Cecil 足以对许多常见的混淆工具进行反混淆这一事实并不意味着它可以对后者做任何事情。
如果您想了解一些可以使用手动混淆代码提取的技巧,请查看这个crackme。它是 Java 字节码而不是 CLI,但想法是相似的。在撰写本文时,甚至没有人解决它,尽管crackme 由单个类中的单个方法组成。它甚至不使用反射,正确使用反射使得自动反混淆几乎是不可能的。
然而,真正的问题是你想用这个做什么。您是否正在尝试检查任意代码是否存在恶意行为?对不起,但这实际上是不可能的。您需要在沙箱中运行它。