.NET – 5个免费的反编译器

1. 简介

在本文中,我们将概述目前可用的一系列免费的.NET反编译器。我们只专注于完全免费的完整版本工具,可以在非商业和商业环境中免费运行。如果一个软件工程师在家里投入时间和精力来学习和培养技能,而这些工具只对非商业环境是免费的,然后在他的工作场所发现公司不打算购买该特定工具,那就是浪费时间和精力。

1.1. 测试的工具

以下是引起我们注意的免费.NET反编译器列表:

  1. Ildasm.exe(随Visual Studio 2022一起提供)
  2. Telerik justDecompile (JustDecompile .NET Assembly Decompiler & Browser - Telerik)
  3. dnSpyEx (Releases · dnSpyEx/dnSpy · GitHub)
  4. ILSpy (Releases · icsharpcode/ILSpy · GitHub)
  5. JetBrains dotPeek (dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains)

2. 测试申请

为了测试反编译器,我们创建了一个小的C#11/.NET7项目由2个组件组成。解决方案如下所示:

这是原始代码:

//======================================
namespace AlphaAssembly

internal class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Resource1.HW);

        A a2=new A2();
        a2.PrintMessage();

        A a3 = new A3();
        a3.PrintMessage();

        B b2 = new B2();
        b2.PrintMessage();

        B b3 = new B3();
        b3.PrintMessage();
    }
}

public class A
{
    public virtual void PrintMessage()
    {
        Console.WriteLine(Resource1.HWA);
    }
}

public class A2:A
{
    public override void PrintMessage()
    {
        Console.WriteLine(Resource1.HWA2);
    }
}

public class A3 : A
{
    public override void PrintMessage()
    {
        Console.WriteLine(Resource1.HWA3);
    }
}

//======================================
namespace BetaAssembly

public class B
{
    public virtual void PrintMessage()
    {
        Console.WriteLine("Hello World from B");
    }
}

public class B2 : B
{
    public override void PrintMessage()
    {
        Console.WriteLine("Hello World from B2");
    }
}    

public class B3 : B
{
    public override void PrintMessage()
    {
        Console.WriteLine("Hello World from B3");
    }
}  

3. Ildasm.exe

3.1. 详情

3.2. 概述

您可以从命令行启动它:

基本装配视图:

这是AlphaAssembly.A.PrintMessage()方法的IL代码:

这是元数据信息视图:

3.3. 印象

  • 许可证不是免费的,但它随Visual Studio一起提供,因此大多数.NET开发人员都会拥有它。
  • 非常基本的功能,几乎处于“概念验证”级别
  • 只需启用IL查看,无需反编译为C#代码

4. Telerik justDecompile

4.1. 详情

4.2. 概述

当我启动应用程序并尝试加载我的 AlphaAssembly.dll 时,我得到了一个非常不愉快的窗口:

它希望我将其指向.NET 7。这是我解决它的方法:

下面是基本的装配体视图:

这是在IL中的AlphaAssembly.A类:

这是C#中的AlphaAssembly.A类:

当我们尝试逆向工程BetaAssemblyC#项目中时,我们得到了这个:

4.3. 印象

  • 似乎不再维护此应用程序。它不知道如何处理.NET 7。
  • 它可以在文件级别提供对基本C#代码的仍然有用的反编译。
  • 现有的选项是功能性的,但有限。在其他产品中看不到那么多花哨的工具/选项。
  • 对于像“Telerik”这样的大牌来说,这个应用程序的状况如此糟糕,这很奇怪。他们标榜自己是“最快的反编译器”。比竞争对手快10倍,但实际上,它看起来像一个废弃的应用程序。

5 dnSpyEx

5.1 详情

5.2 概述

下面是基本的装配体视图:

以下是IL中的AlphaAssembly.A类:

下面是 C# 中的AlphaAssembly.A类:

我一直在寻找是否可以将BetaAssembly.dll逆向工程到C#项目中,但看不到这是不可能的。

另一个好处是它可以向您显示文件/程序集的PE格式标头:

花哨的是,即使您没有源代码,您也可以调试程序集。下面是一个屏幕截图,我们将断点放入反向工程代码中,并将程序集运行到断点。

这是一件非常奇特的事情。特别是对于某些应用程序的逆向工程。可以在调试器中监视变量的状态。

如果需要,可以反编译为C#VB.NET

5.3 印象

  • 看起来像一个漂亮而稳定的反编译器。
  • 真的很喜欢PE格式标题查看器。
  • 调试是一个非常花哨的功能。
  • 有些人会喜欢“反编译到VB.NET”功能,这是许多其他反编译器不提供的。

6. ILSpy

6.1. 详情

6.2. 概述

下面是基本的装配体视图:

这是IL中的AlphaAssembly.A类:

这是C#中的AlphaAssembly.A类:

非常奇特的是,您甚至可以选择要查看的C#风格/版本。这可能非常有趣。

当我们尝试逆向工程BetaAssemblyC#项目中时,它奏效了:

但是我们无法立即构建该项目。我们遇到了一些构建错误。

另一个好处是它可以向您显示文件/程序集的PE格式标头。只是他们将所有内容隐藏在通用名称Metadata下。

6.3. 印象

  • 看起来该项目定期维护并得到Microsoft的支持。
  • 非常花哨地反编译成特定版本的C#。我非常喜欢。
  • 真的很喜欢PE格式标题查看器。
  • 逆向工程到VS项目中很好,它可能会与一些手动微调一起使用。

7. JetBrains dotPeek

7.1. 详情

7.2. 概述

下面是基本的装配体视图:

这是IL中的AlphaAssembly.A类:

这是C#中的AlphaAssembly.A类:

非常花哨的是,您可以选择要查看的C#的低级/高级版本。这可能非常有趣。

当我们尝试逆向工程BetaAssemblyC#项目中时,它奏效了:

但是我们无法立即构建该项目。我们遇到了一些构建错误。

然后我查看了项目文件:

看起来很奇怪,似乎它创建了一个版本为7.0.NET Framework样式项目。谁知道这里发生了什么?但这不可用。

另一个好处是它可以向您显示文件/程序集的PE格式标头。只是他们将所有内容隐藏在通用名称Metadata下。

它可以创建一些不错的依赖关系图。

另一个不错的功能是,当您将鼠标悬停在某些IL指令上时,您会得到有关该指令的一些提示。

7.3. 印象

  • 感觉真的很好,就像一个具有许多导航选项的专业应用程序。
  • 非常花哨地反编译成C#的低级/高级。我非常喜欢。
  • 真的很喜欢PE格式标题查看器。
  • 逆向工程进入VS项目有问题,这对于JetBrains这样的大牌来说很奇怪。
  • 依赖关系图是一个很好的补充,它们对于记录项目很有用。

8. 结论

我个人最喜欢的是:

如果您正在寻找一个稳定、功能丰富、漂亮的图形界面和维护良好的应用程序,dotPeek是您的选择。这是您唯一需要的.NET反编译器,您可以在家中和您将工作的任何工作场所自由使用它。

但是,另一个给人留下良好印象的应用程序是ILSpy Releases · icsharpcode/ILSpy · GitHub )。它支持反编译为所选版本的C#,因此在分析和比较不同版本的C#语言时非常有用。

如果要调试没有源代码的.NET应用程序,则唯一提供的反编译器是dnSpyExReleases · dnSpyEx/dnSpy · GitHub )。

但是,当然,偏好和意见不同,因此每个人都有权选择自己喜欢的工具并随意使用它。

9. 参考资料

https://www.codeproject.com/Articles/5355807/NET-5-Free-Decompilers

1、无需设置 由于它是一个便携式工具,它不需要您将其安装在目标计算机上,因为只需拆包其存档并启动可执行文件即可完全访问其功能。 您还可以从可移动存储介质(如USB闪存驱动器或外部HDD)运行它。此外,它不会修改系统中的注册表项,也不会在您的PC上生成其他文件或文件夹,但未经您的明确许可。 2、综合界面 dnSpy配备了一个时尚,全面的用户界面,包含广泛的有用功能,它们整齐地组织在主窗口的标准菜单中。 更重要的是,它具有标准配置窗口,您可以在其中调整各种组件的设置,如其反编译器,调试器或十六进制编辑器,但也可以修改显示或其他参数。 3、.NET反汇编程序 如果您需要一个高效的工具,可以通过为您提供各种有用的工具来帮助您反编译.NET程序集,您可以转到dnSpy。它配有一个反编译器,一个调试器,一个十六进制编辑器和一个程序集编辑器,让你以有效的方式处理程序集。 主窗口附带了一个Assembly Explorer窗格,您可以在其中访问所需程序集的树视图。您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以有效的方式逆向工程.NET程序集,为您提供广泛的有用工具,包括反编译器,程序集编辑器和调试器。它不需要安装,具有全面,平滑的用户界面,并为您提供了一个标准配置窗口,您可以在其中调整各种组件的设置。
MySQL主从复制是一种高可用性和可扩展性的解决方案,可以提高数据库系统的性能和可靠性。 以下是MySQL主从架构搭建的步骤: 1. 配置主服务器:在主服务器上,编辑MySQL配置文件,使其开启二进制日志功能。在my.cnf配置文件中添加以下内容: ``` [mysqld] log-bin=mysql-bin server-id=1 ``` 其中,log-bin参数表示开启二进制日志功能,server-id参数表示服务器的唯一ID号,一般设置为1。 2. 创建从服务器账户:在主服务器上,创建一个用于从服务器连接主服务器的账户,并授予REPLICATION SLAVE权限。可以使用以下命令创建账户: ``` CREATE USER 'slave'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; ``` 其中,'slave'@'%'表示从服务器的IP地址,'password'是账户的密码。 3. 导出主服务器数据:在主服务器上,使用mysqldump命令导出数据库的数据,并将数据保存到一个.sql文件中。可以使用以下命令: ``` mysqldump -u root -p --all-databases --master-data > db.sql ``` 其中,--master-data参数会在导出的SQL语句中加入CHANGE MASTER TO语句。 4. 导入数据到从服务器:将导出的SQL文件拷贝到从服务器上,并使用以下命令导入数据: ``` mysql -u root -p < db.sql ``` 5. 配置从服务器:在从服务器上,编辑MySQL配置文件,设置server-id参数为一个唯一的ID号。可以使用以下命令: ``` [mysqld] server-id=2 ``` 6. 启动从服务器:在从服务器上启动MySQL服务,并使用以下命令连接到主服务器: ``` CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='slave', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; ``` 其中,MASTER_HOST参数是主服务器的IP地址,MASTER_USER和MASTER_PASSWORD参数是之前创建的账户和密码,MASTER_LOG_FILE和MASTER_LOG_POS参数是在导出数据时自动生成的,可以在导出的SQL文件中找到。 7. 启动主从复制:在从服务器上,使用以下命令启动主从复制: ``` START SLAVE; ``` 至此,MySQL主从架构就搭建完成了。从服务器会自动从主服务器同步数据,并且可以实现读写分离、负载均衡等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值