F# MSIL обфускация


Два вопроса, связанных с запутыванием:

1) существует ли какой-либо инструмент, который может разбирать F# обратно в исходную форму или что-то близкое к ней из целевой формы MSIL? Это не попытка безопасности через неизвестность, но я хочу защитить некоторый исходный код от"кражи".

2) я кратко посмотрел на некоторые выходные данные компилятора F#, и в целом это выглядит довольно тарабарщиной по сравнению с тем, что вы получаете, если разбираете скомпилированный код C#, предположительно потому, что C# ближе к MSIL промежуточное представление. Единственный частично искаженный код, который я видел от компилятора C#, - это итераторы (и, вероятно, асинхронный начиная с C# 5.0).

Пока у меня сложилось впечатление, что скомпилированный F# код достаточно "запутан", но так ли это? (Я понимаю, что это несколько субъективный вопрос.)

2 5

2 ответа:

    Я никогда не слышал ни о чем подобном; однако, я думаю, что вполне вероятно, что такой инструмент появится в относительно ближайшем будущем. Сборки, созданные компилятором F# (то есть MSIL и связанные с ним метаданные), никоим образом не запутываются. Тем не менее, часть кода, который он производит, сильно отличается от кода, созданного C# или VB.NET компиляторы, так что это не будет так же легко, как обратное проектирование (просто потому, что инструменты для этого недоступны). Конечно, как @Craig Stuntz сказал, что это не дает большой защиты от опытного, мотивированного нападающего.

Если вы действительно параноик, вы можете рассмотреть возможность использования инструмента обфускации на ваших скомпилированных сборках перед их отправкой. Я использую {SmartAssembly} с F# с конца 2010 года, поэтому я знаю, что один работает с F#; Если вы идете с другим инструментом, убедитесь, что вы тестируете его на некоторых достаточно сложных сборках F#, прежде чем покупать его-в то время я искал обфускатор, многие из которых были очень сложными. они не работали правильно (или вообще) со сборками F#.

Некоторое время назад я написал несколько заметок о запутывании сборок F#, Если вы хотите прочитать больше: есть ли опыт использования .NET-обфускаторов на сборках F#?

F# является частью языка .NET, поэтому его можно декомпилировать. Вы можете посмотреть на рефлектор RedGate, если хотите потратить деньги или dnSpy 0xd4d (и да, это тот же разработчик, что и очень известный deobfuscator De4Dot). Декомпилированный код очень близок к жесткому коду, логика все та же, и вы можете скопировать/вставить исходный код.

Если вы хотите защитить приложение F#, вы можете рассмотреть возможность использования obfuscator, & в настоящее время они почти все обрабатываются De4Dot так что однако трудно сделать мудрый выбор .NETGuard действительно силен, он может обрабатывать приложения F#, он может производить собственный вывод, и у него есть сильная постоянная защита, и De4Dot не может с ней справиться.