本文概述
如果你认为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, 它不是命令行工具, 因为它包含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文件夹中生成其二进制文件:
构建解决方案项目将更新调试二进制文件, 你可以在bin / Debug文件夹中找到应用程序的可执行文件, 例如C:\ Users \ me \ Documents \ visual studio 2017 \ Projects \ <项目名称> \ bin \ Debug。打开ILSpy, 在菜单栏中单击”文件”, 然后选择”打开”。文件浏览器将启动, 并允许你选择一个程序集, 在此示例中, 该程序集位于我们项目的Debug文件夹中:
选择可执行文件后, ILSpy将开始反编译过程, 并将所选文件作为项目添加到树形视图中。在那里, 你将能够探索文件和源代码的结构和资源。在我们的示例中, 我们有一个单一的表单, 即Form1, 可以通过ILSpy轻松查看:
你看对吗? ILSpy能够获取我们初始应用程序的源代码, 并且我们可以看到WinForms项目的”很棒的登录”算法。反编译显然也适用于非调试版本。
反编译愉快!
评论前必须登录!
注册