在维基百科上的逆向工程:
逆向工程是通过对设备、对象或系统的结构、功能和操作进行分析来发现其技术原理的过程。
反射肯定会作为结构分析满足要求。但是在内省和实际逆向工程之间应该如何界定呢?从法律角度来看,反射是否算作逆向工程?
当能够轻松反编译语言成为 Reflection 的一部分时,必须质疑对“逆向工程”一词的定义。
使用像 .NET Reflector 这样的工具,我觉得界限开始变得模糊了!
以 SO 本身的一个例子来说明,他们最近反混淆了 WMD 编辑器的源代码。我认为这更加定义了逆向工程,而不是 Reflection。
反射只是从程序集中读取信息的工具,本身并不是逆向工程。
如果您使用这些信息来找出程序集是如何创建的,例如使用.NET反编译器生成可读的源代码,以生成相同的IL代码,那就是逆向工程。
反射是一种工具,可用于许多事情,包括代码的逆向工程。反射还可用于许多其他目的,例如,借助反射实现动态语言要容易得多。
但仅靠反射还不足以进行逆向工程。虽然可以通过这种方式找到程序结构的信息,但仍需要对代码进行反编译。像反编译器这样的工具可以添加这种功能。
事实上,它是逆向工程的直接相反。
严格来说,“逆向工程”是指观察一个过程的结果,然后倒推出这个过程的方法。通常情况下,这是在不了解原始代码的情况下完成的,并且通常得到的结构非常不同。
尽管版权持有人发出了可怕的威胁,但这完全是合法的。
“反汇编”(也称为“反射”)只是读取硬盘上的字节并对其进行解释的操作。这正是 CPU 运行代码时所做的。在这里,我们只是让它变得容易阅读。同样地,尽管版权持有人发出了可怕的威胁,但这完全是合法的。
以一种避免版权持有人从他的作品中获利的方式销售其他人的代码(或自己使用它),是非法的,但这并不是我们在这里探讨的内容。
我认为你在这里谈论了两件不同的事情:
从法律角度来看,如果你使用反射进行逆向工程,那么它取决于你的目的。
当然,我不是律师,但我相信逆向工程本身并不违法。它可能会成为一种代理非法活动,即通过侵犯版权等方式。
不是的。使用反射,你通常只是在谈论一种不同的调用方法,或者可能查看方法属性。
相比之下,我期望逆向工程的产物能够生成源代码,以便我可以查看并理解作者的算法和思想,这通常是他们试图保护的内容。
涉及法律问题的必须咨询律师。律师需要收费。如果因为没有请律师而被起诉,那么花费的代价将更高。
最好的选择是:不需要咨询。微软已经开放了许多.NET源代码,请参见http://www.microsoft.com/resources/sharedsource/default.mspx。
这完全取决于你使用反射的程度。如果你使用像Reflector这样的工具,或者自己编写类似的代码,那么这将是逆向工程,因为你实际上正在获取源代码。
反射可以用于调用方法或查看属性,就像Don所说的那样,但它也可以用于分析程序集的结构,甚至可以窥视底层的MSIL代码。因此,反射的一个用途可能是无辜的,而另一个用途则是逆向工程。