真的没有办法通过方法主体从包含IL的byte []中“生成” C#吗?

时间:2019-01-07 23:03:54

标签: c# roslyn dynamic-invoke

我一直在尝试反转一些混淆的代码,但我偶然发现了一个棘手的DLL,该DLL在byte []数组中具有“方法体”(IL代码),后来通过动态调用它调用。分析MSIL是这里唯一的方法吗? 您如何处理这些?

我花了数小时在网上研究工具,以使我能够从字节数组中的IL生成C#代码(至少是一些基础知识)。真的没有吗?

ldarg.0
ldarg.1     
add

如果那里存在某种东西,那将是很好的,如果像上面这样的基本MSIL可能会生成+ b。

1 个答案:

答案 0 :(得分:0)

MZ64,您好,欢迎光临!

不幸的是,您要的是反编译服务/ API /工具,而该工具根本没有内置于.NET框架中。您可能要为此检查各种第三方解决方案。

在过去, .NET Reflector 是用于此目的的#1工具。如今有各种各样的工具,尤其是 dotPeek -Reflector应该仍然存在。您将不得不为其中的大多数支付一些钱,但是您可能会找到一个不错的免费工具(我尝试并失败了)。

但是,如果要将IL代码作为纯文本并尝试运行它,则应使用内置的ILGenerator.Emit()。我能想到的最简单的方法应该是将纯文本映射到OpCode /变量,并逐行发出IL。我不知道是否有帮助,但从理论上讲应该有可能。

看这里的例子:

https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-define-and-execute-dynamic-methods