在Reflector反编译的ASP.NET上取得了多少成功?
我刚刚完成一个小项目,需要对预编译但不再受支持的ASP.NET网站进行更改。该代码很丑陋,但是在编译之前就很丑陋,令我印象深刻的是,一切似乎仍然可以正常工作。
进行了一些编辑,例如删除控件声明,因为它们被放入生成的文件中,并且与反编译的基类发生冲突,但是几个小时后仍无法解决。
现在,我只是好奇有多少其他人在此方面取得了多少成功。实际上,我实际上想写一篇CodeProject文章,介绍如何定义(如果不是自动化的话)反向工程过程。
解决方案
回答
由于.NET平台中存在所有编译器功能,因此如果没有非常复杂的反编译器,就无法将二进制文件反编译为原始代码。例如,编译器在后台创建类来处理附件。使这种事情自动化似乎是一项艰巨的任务。但是,处理预期的问题以使其能够编译可能是可编写脚本的。
回答
Will: Due to all the compiler sugar that exists in the .NET platform
幸运的是,这个特定的应用程序非常简单,但是我不希望将其反编译为原始代码,而只是像原始代码那样将其反编译,甚至无法深入了解原始代码的工作原理,从而可以"拼接"新代码。
回答
我必须做类似的事情,实际上我比拥有代码要快乐。这样做可能花了我较少的时间,但是经过编译器优化后的代码质量可能比原始代码要好。因此,是的,如果它是一个简单的应用程序,则对其进行反向工程相对简单。另一方面,我希望避免将来再这样做。
回答
如果使用.NET 1.1或者.NET 2.0编写,则与使用VS 2008编译器进行编译相比,我们将获得更多的成功,这主要是由于新语言版本(Lambda,匿名类等)带来的语法提示。
只要代码没有被混淆,我们就应该能够使用反射器来获得可行的代码,如果我们将其放入VS中,则应该立即在反射的代码中发现错误。
一直在寻找以<<>开头的变量/方法,我看到了很多(特别是在反映.NET 3.5时)。
我们能做的最坏的事情是将其全部导出到VS,进行编译并确定有多少错误,然后从中进行调用。
但是,如果这是一个足够简单的项目,则我们应该能够从反射器中进行反向工程,至少使用反射器来了解代码正在做什么的基本内容,然后重新编写代码。