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