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