如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

本文概述

  • 1.下载ILSpy二进制文件
  • 2.从WinForms应用程序反编译可执行文件
如果你认为WinForms .NET应用程序从一开始就是安全的并且无法读取源代码, 那么让我告诉你你错了。任何人都可以使用将可执行文件作为输入的反编译器, 并尝试创建高级源文件(应用程序的源代码)。建议在发布应用程序之前, 使用一些反编译工具对生成的可执行文件进行反编译, 以检查代码上的安全漏洞。除了检查可能的安全漏洞外, 如果你继承了没有文档或注释的应用程序, 那么查看带有反编译器的编译代码的行为可能非常有用。
如果你出于任何原因愿意反编译.NET程序集, 我们建议你使用ILSpy项目。 ILSpy是反编译器, 与Jadx(APK反编译器)的工作方式相同, 但是它不反编译Java, 而是反编译C#。 ILSpy是开源.NET程序集浏览器和反编译器。该反编译器最知名的功能是:
  • 装配浏览
  • IL拆卸
  • 支持C#5.0″ 异步”
  • 反编译为C#
    • 支持lambda和” 收益率回报”
    • 显示XML文档
  • 反编译成VB
  • 节省资源
  • 将反编译的程序集另存为.csproj
  • 搜索类型/方法/属性(子字符串)
  • 基于超链接的类型/方法/属性导航
  • 基本/派生类型导航
  • 导航历史
  • BAML到XAML反编译器
  • 将程序集另存为C#项目
  • 查找字段/方法的用法
  • 可通过插件(MEF)扩展
  • 装配清单
在本文中, 你将了解在计算机上下载ILSpy以及反编译Visual Studio生成的可执行文件以最终查看其源代码的难易程度。
1.下载ILSpy二进制文件 没有官方的安装程序, ILSpy是便携式的。 ILSpy的二进制文件可以通过Github的” 发行版” 区域中的项目发行版获得, 也可以通过单击官方网站上的” 下载二进制文件” 来获得。压缩包包含截止日期的11个文件(1个可执行文件, 9个动态链接库和一个配置文件):
如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

文章图片
下载后, 你可以通过可执行文件使用ILSpy, 它不是命令行工具, 因为它包含GUI。
2.从WinForms应用程序反编译可执行文件 不要混为一谈, 我们将使用C#中的Visual Studio来反编译我们自己制作的应用程序之一。在我们的示例项目中, 我们将以最不安全的方式为唯一用户公开一个简单的登录表单:
如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

文章图片
凭证模型存储在源代码中的变量中, 这显然是安全缺陷。通过if语句, 我们将检查用户单击登录按钮时用户是否知道凭据。我们的应用程序的源代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Sandbox{public partial class Form1 : Form{public string globalUsername = "Batman"; public string globalPassword = "batmobil"; public Form1(){InitializeComponent(); }private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){string username = textBox1.Text; string password = textBox2.Text; if(username == globalUsername & & password == globalPassword){MessageBox.Show("Login granted, awesome !"); }else{MessageBox.Show("Login denied, check your credentials !"); }}}}

现在, 我们将编译(构建解决方案)我们的项目, 以便在项目的bin / Debug文件夹中生成其二进制文件:
如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

文章图片
构建解决方案项目将更新调试二进制文件, 你可以在bin / Debug文件夹中找到应用程序的可执行文件, 例如C:\ Users \ me \ Documents \ visual studio 2017 \ Projects \ < 项目名称> \ bin \ Debug。打开ILSpy, 在菜单栏中单击” 文件” , 然后选择” 打开” 。文件浏览器将启动, 并允许你选择一个程序集, 在此示例中, 该程序集位于我们项目的Debug文件夹中:
如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

文章图片
选择可执行文件后, ILSpy将开始反编译过程, 并将所选文件作为项目添加到树形视图中。在那里, 你将能够探索文件和源代码的结构和资源。在我们的示例中, 我们有一个单一的表单, 即Form1, 可以通过ILSpy轻松查看:
如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

文章图片
你看对吗? ILSpy能够获取我们初始应用程序的源代码, 并且我们可以看到WinForms项目的” 很棒的登录” 算法。反编译显然也适用于非调试版本。
【如何使用ILSpy反编译.NET Framework程序集(读取其源代码)】反编译愉快!

    推荐阅读