如何反编译ASP.NET / C#Web应用程序

时间:2017-08-17 14:39:23

标签: c# asp.net decompiling

我刚刚继承了一个Web应用程序,其源代码早已丢失(最初于2010年编写并被搁置)。该应用程序有一些与应用程序本身相关的.dll程序集,例如“applicationCORE.dll”,“applicationBI.dll”,“applicationDATA.dll”和“application.dll”

我见过this question,建议的工具(Just Decompile)很棒,为我反编译的第一个程序集创建了一个.sln和.csproj文件。我的问题是如何合并通过反编译与编译的Web应用程序文件(.aspx)创建的各种项目,如何解析.aspx文件中的引用,即引用不再存在的代码隐藏文件,例如: “default.aspx”引用“default.aspx.cs”,而反编译器创建“default.cs”文件。重命名.cs文件是否更安全,还是应该更新引用?

最后,每个dll会在解决方案中显示为单独的项目吗?

我意识到这可能被视为一个重复的问题,但是似乎没有一个在线资源可以让开发人员完成整个过程。

1 个答案:

答案 0 :(得分:2)

根据David的建议,我设法从反编译程序集中运行应用程序。这是我为使其工作而遵循的流程

  1. 我已经使用Reflector(在试用版中)将各种程序集反编译成项目。
  2. 我在Visual Studio中创建了一个空白的Web表单应用程序
  3. 我通过visual studio
  4. 将网站上的.aspx页面添加到了项目中
  5. 然后从反编译的'application.dll'项目中添加.cs文件(因为这是解决方案中的网站项目。有些文件必须重命名以匹配`.aspx中的codebehind引用。文件
  6. 每个额外的项目,例如然后将applicationCore.dll添加到解决方案
  7. 每个项目的引用都需要更新,并且必须将对新添加项目的引用添加到启动项目中
  8. 由于网站很久以前就已经建成,因此有1000多种语法错误。解决它们的最简单方法是使用Notepad ++和查找和替换。为了安全起见,我按照Visual Studio中的错误而不是批量查找和替换来逐个文件地执行此操作
  9. 在尝试构建时,我注意到所需程序集丢失的错误,因此我将子项目的构建输出目录更改为Web项目的bin文件夹
  10. 我在原网站的web.config中添加了连接字符串和设置。我逐行做了这一点,以确保我没有破坏任何东西,以便我可以追踪每次添加的结果
  11. 最后我成功了!
  12. 其他步骤 还有语法错误,我认为是由于反编译过程。需要添加一些外部参考,并且由于项目的年龄而略有变化,例如asp:AjaxScriptControl已更改为asp:ScriptControl(使用Nuget添加包后)。我还必须为此应用程序安装Crystal Reports,并且必须购买Telerik许可证,因为正在使用UI组件(尽管我会看到我在使用应用程序时是否可以使用开放/本机替代方案)。

    我已使用凭据登录(我必须设置正确的启动页面)并尝试了一些基本的CRUD操作。有些愚蠢的问题需要解决,例如如果您访问受保护的页面,则身份验证无法正常运行并且没有重定向,但与我最初遇到的问题相比,这些事情相对较小。

    我必须说的是,使用本网站的问题和答案解决了每个错误!这一切都在不到6小时内完成。