逆向工程托管代码

逆向工程 。网
2021-06-25 21:00:31

从 .NET 逆向工程托管代码是更容易还是更难?我认为它可能是可以轻松转换回源代码的 Java 字节码。.NET 中的托管代码是否相似,为什么?

3个回答

没有任何反逆向工程保护的逆向工程 .net 是微不足道的。

原因是像这样的程序被编译成一种我们称之为字节码的中间语言,它包含高级信息(符号名称、数据定义等),从而可以恢复与原始代码几乎相似的源代码,从而简化了逆向工程过程。

因为这混淆的是很常见的,所以看看这些.NET反混淆工具张贴在woodmann

那么 .NET 恶意软件通常是编译成本机映像并进行混淆,还是通常只是混淆了 .NET 代码?

我怀疑恶意软件作者是否希望将 .net 之类的东西转换为本机代码。

我猜有人使用 .net 恶意软件的原因是因为它可以在许多平台上运行而无需关心处理器架构,因此在 .net 恶意软件中,他们肯定希望 CIL 存在。

还要考虑 .net 支持的不同语言。

一般来说,字节码比编译后的代码更容易逆向工程。它(通常)包含更多元数据并使用理想化的计算模型。一个好的混淆器可以使这变得更加困难,但仍然不像使用逆向工程编写的本机代码那么复杂。这是因为字节码语言不允许使用与现实世界处理器一样多的“技巧”,因为它们被设计为更高级别、更安全和可移植。

为了解决您的具体问题,您可以在Wikipedia 上看到 .NET 的 CIL 是多么简单,并且 MS在其 .NET SDK 中提供了一个反汇编程序。更高级的工具只是一个谷歌。

请注意,.NET 代码也可以编译为本机映像,如 MS 在将MSIL 编译为本机代码一文中所述这通常用于明显的安全原因:

  • 代码更难逆向工程
  • 运行时不需要 JIT 编译器