个性化阅读
专注于IT技术分析

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

本文概述

如果你认为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个动态链接库和一个配置文件):

Windows中的ILSpy二进制文件

下载后, 你可以通过可执行文件使用ILSpy, 它不是命令行工具, 因为它包含GUI。

2.从WinForms应用程序反编译可执行文件

不要混为一谈, 我们将使用C#中的Visual Studio来反编译我们自己制作的应用程序之一。在我们的示例项目中, 我们将以最不安全的方式为唯一用户公开一个简单的登录表单:

表单不安全登录示例

凭证模型存储在源代码中的变量中, 这显然是安全缺陷。通过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文件夹中生成其二进制文件:

生成解决方案项目Visual Studio

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

ILSpy选择文件

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

ILSpy阅读应用程序的源代码

你看对吗? ILSpy能够获取我们初始应用程序的源代码, 并且我们可以看到WinForms项目的”很棒的登录”算法。反编译显然也适用于非调试版本。

反编译愉快!

赞(0)
未经允许不得转载:srcmini » 如何使用ILSpy反编译.NET Framework程序集(读取其源代码)

评论 抢沙发

评论前必须登录!