Защита .NET бинарников под Linux

Здравствуйте! Есть ли планы реализации защиты .NET бинарей под линкус?
Ибо не сразу узнал что защита .NET только в Windows, а кроссплатформенный .NET так и просится под Linux и MacOS

Какая может быть защита .NET бинарников в среде, которая даже не создает файловую проекцию в памяти для загружаемого модуля? Все внутренности файла живут исключительно внутри .NET рантайма и до них невозможно достучаться через GetHINSTANCE.

Я в целом хочу узнать планируется ли добавление защиты .NET приложений на ОС Linux, сейчас же никакой защиты нет для бинарей под линукс, а она очень нужна :slight_smile:

К сожалению у нас нет таких планов, но в любом случае возможна разработка такой версии за дополнительную плату.

В версии 3.8.7.2037 добавлена поддержка .NET для Linux (не путать с NET Framework под Mono).

Отличные новости! :smiley:
Проверил простой Console Hello World - всё работает
Начал проверять сериализацию/десериализацию JSON (System.Text.Json) - есть нюанс:
Названия переменных “слетают” (Я так понял вместо названий идёт их hex адрес), пример:

root@diklosvm1:~/cmp2# ./ConsoleApp1
Deserialized!
{"D30B37B2":false,"ADBF60AD":null,"25AC9CA1":0}
root@diklosvm1:~/cmp2#

А ещё создаётся .map файл с названиями филдов:

0A9EC1B1	get_Cint
0AA3D906	set_Cint
1836242F	set_Cstring
1C12AB97	value
2408611D	get_Cbool
25AC9CA1	Cint
87A8F99E	ConsoleApp1.Program
95821B3F	args
A435622A	value
A5A8D718	Main
ABB26238	set_Cbool
ADBF60AD	Cstring
C5320026	get_Cstring
CC0E37B2	<Cint>k__BackingField
CD8CF980	value
CD9EBF30	ConsoleApp1.Root
CE8394AA	<Cbool>k__BackingField
D30B37B2	Cbool
D917C2B8	<Cstring>k__BackingField

Вообще достаточно воспроизвести вот так:

private static void Main(string[] args)
{
    string test = "c0ffee";
    Console.WriteLine(myDeserializedClass.GetType().FullName);
}

На всякий приложил тестовый проект.
ConsoleApp1.zip (1.47 KB)
p.s. Простой aspnet проект тоже не стартует после накрытия протекта, но пока надо бы с этого начать)

Просьба в архивы включать в том числе и откомпилированные бинарники.

Прошу прощения, впредь буду включать бинари.
Я так понял что моя проблема возникает при опубликовании приложения (dotnet publish)
Приложил архив, вас должно заинтересовать \bin\Release\net8.0\publish\linux-x64
ConsoleApp1.zip (844 KB)

Названия переменных “слетают” (Я так понял вместо названий идёт их hex адрес)

Это не названия переменных слетают, а vmprotect их переименовывает (опция “Удалять отладочную информацию”). В выходном MAP файле сохраняется информация о новых и старых именах для работы с “Stack Trace Decoder”.

Я так понял что моя проблема возникает при опубликовании приложения (dotnet publish)

Ваша проблема возникает из-за того, что вам нужно исключить класс Root из переименования.

[Obfuscation(Feature = "renaming", Exclude = true, ApplyToMembers = true)]
class Root {
...

Спасибо, ещё буду проверять но пока работает :smiley:
Если вдруг возникнут сложности - я отпишусь тут