5

两个混淆相关的问题:

1) 是否有任何工具可以将 F# 从 MSIL 目标形式反汇编回其源形式或接近它的形式?这不是试图通过默默无闻来确保安全,但我想保护一些源代码不被“盗窃”。

2) 我简要查看了一些 F# 编译器输出,一般来说,与反汇编 C# 编译代码相比,它看起来很乱,大概是因为 C# 更接近 MSIL 中间表示。我从 C# 编译器中看到的唯一部分损坏的代码是迭代器(从 C# 5.0 开始可能是异步的)。

到目前为止,我的印象是 F# 编译的代码被合理地“混淆”了,但这是真的吗?(我意识到这是一个有点主观的问题。)

4

2 回答 2

8
  1. 我还没有听说过这样的事情;但是,我认为这样的工具很可能会在不久的将来出现。
  2. F# 编译器生成的程序集(即 MSIL 和相关元数据)不会以任何方式混淆。但是,它生成的一些代码与 C# 或 VB.NET 编译器生成的代码大不相同,因此逆向工程不会那么容易(仅仅是因为没有这样做的工具)。当然,正如@Craig Stuntz 所说,这对于有经验的、积极的攻击者来说并不能提供太多保护。

如果您真的很偏执,您可能会考虑在发布之前对已编译的程序集使用混淆工具。自 2010 年底以来,我一直在将{SmartAssembly}与 F# 一起使用,所以我知道它可以与 F# 一起使用;如果您使用其他工具,请确保在购买之前针对一些相当复杂的 F# 程序集对其进行测试——当时我正在寻找一个混淆器,其中许多无法正常(或根本)无法与 F# 程序集一起使用。

如果您想阅读更多信息,我不久前写了一些关于混淆 F# 程序集的笔记:在 F# 程序集上使用 .NET 混淆器的任何经验?

于 2013-01-02T20:56:21.320 回答
1

F# 是 .NET 语言的一部分,因此可以反编译。如果你想花钱,你可以看看 RedGate 的 Reflector 或者 0xd4d 的 dnSpy(是的,它和著名的反混淆器 De4Dot 是同一个开发者)。反编译代码非常接近硬编码代码,逻辑还是一样的,你可以复制/粘贴源代码。

如果你想保护 F# 应用程序,你可以考虑使用混淆器,目前它们几乎都由 De4Dot 处理,因此很难明智地选择,虽然.NETGuard非常强大,它可以处理 F# 应用程序,它可以产生原生输出& 它有一些强大的持续保护,De4Dot 无法处理它。

于 2016-03-19T13:37:17.107 回答