我一直在玩弄一些模糊代码的逆向,我偶然发现了一个棘手的 DLL,它在 byte[] 数组中有一个“方法体”(IL 代码),后来用动态调用来调用它。分析 MSIL 是唯一的方法吗?你如何处理这些?
我花了几个小时在线研究工具,使我能够从字节数组中的 IL 生成 C# 代码(至少是一些基础知识)。真的没有吗?
ldarg.0
ldarg.1
add
如果那里存在某些东西会很棒,使用上面的一些基本 MSIL 可以生成 a + b。
我一直在玩弄一些模糊代码的逆向,我偶然发现了一个棘手的 DLL,它在 byte[] 数组中有一个“方法体”(IL 代码),后来用动态调用来调用它。分析 MSIL 是唯一的方法吗?你如何处理这些?
我花了几个小时在线研究工具,使我能够从字节数组中的 IL 生成 C# 代码(至少是一些基础知识)。真的没有吗?
ldarg.0
ldarg.1
add
如果那里存在某些东西会很棒,使用上面的一些基本 MSIL 可以生成 a + b。
MZ64,您好,欢迎来到 SO!
不幸的是,您要问的是反编译器服务/API/工具,它根本没有内置到 .NET 框架中。您可能需要为此检查各种第三方解决方案。
过去,.NET Reflector是用于此目的的#1 工具。今天有各种各样的工具,特别是dotPeek - Reflector 应该仍然存在。您将不得不为其中的大多数支付一些钱,但您可能会找到一个很好的免费工具(我尝试过但失败了)。
但是,如果您想将 IL 代码作为纯文本并尝试运行它,那么您应该使用内置的 ILGenerator.Emit()。我能想到的最简单的方法应该是将您的纯文本映射到操作码/变量,并逐行发出您的 IL。我不知道它是否有帮助,但理论上应该是可能的。
看这里的例子: