2

一些商业混淆器声称它们可以使 ILDASM(以及其他类似的工具,如 Reflector)崩溃

关于他们如何实现这一目标的任何想法?

正如这里的许多线程中所述,有足够动力/时间/技能的人总能找到一种方法来阅读您的代码(也就是如果它是可运行的,它就是可反编译的),但在我看来,大多数普通的代码读者都不会费心反编译我的如果反射器不能为他们做代码。

对我的知识产权的这种保护水平(即,除了那些可能会想办法绕过我向他们投掷的每一个诡计的铁杆家伙之外的任何人)对我来说绝对足够了。

4

1 回答 1

7

有些很可能会引入 CLR 能够运行但 ILDASM 等无法处理的无效 IL。在我看来,这是一件坏事——CLR 将来可能会抱怨它。

其他的很可能会创建有效的 IL,但由于某种方式的意外,它恰好会触发 ILDASM 和 Reflector。作为一个愚蠢的例子,假设一个标识符包含一个不可打印的字符。据我记得,这是有效的,因为 CLR 将标识符视为不透明的 blob,但试图显示它们的东西很可能会失败。这可能只是暂时的帮助——虽然 ILDASM 不经常更新,但 Reflector 经常更新,我希望开发人员在发现这些问题时能够解决此类问题。

第三种有助于防止高级反编译而不是反汇编的方法是创建 IL,它在 C#/VB 中没有明显的类似物,但它是完全有效的。事实上,迭代器块有时已经这样做了(请看文章底部附近)。

我希望任何合法并保证可运行的东西现在或至少在将来的某个时候都可以拆卸(呃)。现在(或者更确切地说,在撰写营销宣传时)崩溃反射器并不是未来崩溃的良好迹象。

于 2009-02-23T12:04:55.063 回答