当前位置:   article > 正文

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

net反编译工具

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个组件组成。解决方案如下所示:

这是原始代码:

  1. //======================================
  2. namespace AlphaAssembly
  3. internal class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Console.WriteLine(Resource1.HW);
  8. A a2=new A2();
  9. a2.PrintMessage();
  10. A a3 = new A3();
  11. a3.PrintMessage();
  12. B b2 = new B2();
  13. b2.PrintMessage();
  14. B b3 = new B3();
  15. b3.PrintMessage();
  16. }
  17. }
  18. public class A
  19. {
  20. public virtual void PrintMessage()
  21. {
  22. Console.WriteLine(Resource1.HWA);
  23. }
  24. }
  25. public class A2:A
  26. {
  27. public override void PrintMessage()
  28. {
  29. Console.WriteLine(Resource1.HWA2);
  30. }
  31. }
  32. public class A3 : A
  33. {
  34. public override void PrintMessage()
  35. {
  36. Console.WriteLine(Resource1.HWA3);
  37. }
  38. }
  39. //======================================
  40. namespace BetaAssembly
  41. public class B
  42. {
  43. public virtual void PrintMessage()
  44. {
  45. Console.WriteLine("Hello World from B");
  46. }
  47. }
  48. public class B2 : B
  49. {
  50. public override void PrintMessage()
  51. {
  52. Console.WriteLine("Hello World from B2");
  53. }
  54. }
  55. public class B3 : B
  56. {
  57. public override void PrintMessage()
  58. {
  59. Console.WriteLine("Hello World from B3");
  60. }
  61. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/90638
推荐阅读
相关标签
  

闽ICP备14008679号