.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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
APK反编译器CSDN是一个面向开发者的软件工具,用于将Android应用程序的APK文件进行反编译,即将编译后的二进制代码重新转换为可读的源代码。CSDN是一个知名的IT技术社区,提供了大量的技术资源和文档。 APK反编译器的使用可以帮助开发者更深入地了解和学习其他应用程序的代码结构和实现方式。通过反编译,开发者可以查看其他应用程序的源代码,分析其算法和逻辑,学习其他开发者的编程思路和技术实现方法。 CSDN作为一个IT技术社区,为开发者提供了丰富的技术资源和文档,包括各类编程语言、框架、开发工具等方面的知识。在CSDN上可以找到很多关于APK反编译器的相关教程和解释,帮助开发者快速入门和掌握反编译技术。 然而,需要注意的是,APK反编译器的使用必须遵守法律法规,尊重知识产权和隐私权。反编译他人的应用程序可能涉及到未经授权的代码使用,可能违反相关法律法规。因此,在使用APK反编译器时,开发者需要遵守相关规定,仅限于学习和研究目的使用,并尊重他人的知识产权。 总之,APK反编译器CSDN是一个有助于开发者学习和研究Android应用程序的工具,可以通过反编译APK文件,查看其他应用程序的源代码。CSDN作为一个知名的IT技术社区,为开发者提供了丰富的技术资源和教程,帮助开发者更好地利用反编译器进行学习和研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值