2013-01-02 43 views
5

兩個模糊處理相關的問題:F#MSIL混淆

1)是否有可以拆卸F#回其源代碼的形式,或接近它,從MSIL目標形式的任何工具?這不是通過默默無聞的安全嘗試,但我想保護一些源代碼免遭「盜竊」。 2)我簡單地看了一些F#編譯器的輸出,總的來說,如果你反彙編C#編譯後的代碼,它會顯得非常亂,大概是因爲C#更接近MSIL中間表示。我從C#編譯器看到的唯一部分破壞的代碼是迭代器(大概是C#5.0以外的異步代碼)。

到目前爲止,我的印象是F#編譯代碼被合理地「混淆」了,但這是真的嗎? (我意識到這是一個有點主觀的問題。)

+4

你的對手有多好?任何有能力的惡意軟件分析師都可以從內存轉儲中反轉你的代碼,而不必介意IL。你從誰那裏「保護」你的來源? –

+0

潛在的競爭對手。我覺得它不太可能,但比對不起更安全。我只是不希望代碼能夠通過正確的工具輕鬆消除。應該很難,自己編寫代碼更容易。我不認爲惡意軟件分析師在目標範圍內。更像是對F#有中級理解的人。 :-) –

+2

我不會說這是混淆。它只是翻譯。所有F#糖都撤消了。另外,如果你反編譯它,它很明顯來自F#,任何半經驗的F#/ C#個人都可以從反編譯的版本中重新合成F#。有一些模式可以發生,你所要做的就是創建一些測試場景來查看反編譯器的功能,並且你可以看到事情是如何解決的。 – devshorts

回答

8
  1. 我還沒有聽說過這樣的事情;不過,我認爲這種工具很可能會在相對不遠的將來出現。
  2. 由F#編譯器生成的程序集(即MSIL和相關元數據)不以任何方式混淆。但是,它生成的一些代碼與C#或VB.NET編譯器生成的代碼有很大不同,所以它不會像反編譯那樣簡單(僅僅因爲這樣做的工具不可用)。當然,正如@Craig Stuntz所說的那樣,這對於一個經驗豐富,積極進取的攻擊者來說無能爲力。

如果你真的偏執,你可能會考慮在你編譯的程序集上使用一個模糊處理工具,然後再運送它們。自2010年年底以來,我一直在使用{SmartAssembly}與F#,所以我知道一個人可以使用F#。如果您使用其他工具,請確保在購買之前針對一些相當複雜的F#程序集進行測試 - 當時我在尋找混淆器時,其中許多工具都無法正確(或完全)使用F#程序集工作。

我寫了一些筆記前陣子關於混淆F#組件,如果你想了解更多:Any experience using .NET obfuscators on F# assemblies?

1

F#是因此可以反編譯.NET語言的一部分。如果你想花錢或者使用0xd4d的dnSpy(是的,它和衆所周知的debfuscator De4Dot是同一個開發者),你可以看看RedGate的Reflector。反編譯代碼非常接近硬編碼代碼,邏輯仍然相同,您可以複製/粘貼源代碼。

如果你想保護你可以考慮使用混淆一個F#應用程序,&目前他們幾乎全部由De4Dot處理,所以很難做出明智的選擇,雖然.NETGuard真的很強,它可以處理F#應用程序,它可以產生本機輸出&它有一些強大的恆定保護,De4Dot無法處理它。