Page 1 of 1

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

Posted: Thu Aug 25, 2022 2:30 pm
by DiklosGroupLtd
Здравствуйте! Есть ли планы реализации защиты .NET бинарей под линкус?
Ибо не сразу узнал что защита .NET только в Windows, а кроссплатформенный .NET так и просится под Linux и MacOS

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

Posted: Thu Aug 25, 2022 2:37 pm
by Admin
Какая может быть защита .NET бинарников в среде, которая даже не создает файловую проекцию в памяти для загружаемого модуля? Все внутренности файла живут исключительно внутри .NET рантайма и до них невозможно достучаться через GetHINSTANCE.

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

Posted: Thu Aug 25, 2022 3:43 pm
by DiklosGroupLtd
Admin wrote:Какая может быть защита .NET бинарников в среде, которая даже не создает файловую проекцию в памяти для загружаемого модуля? Все внутренности файла живут исключительно внутри .NET рантайма и до них невозможно достучаться через GetHINSTANCE.
Я в целом хочу узнать планируется ли добавление защиты .NET приложений на ОС Linux, сейчас же никакой защиты нет для бинарей под линукс, а она очень нужна :)

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

Posted: Wed Aug 31, 2022 11:44 am
by Admin
К сожалению у нас нет таких планов, но в любом случае возможна разработка такой версии за дополнительную плату.

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

Posted: Tue Apr 02, 2024 10:51 am
by Admin
В версии 3.8.7.2037 добавлена поддержка .NET для Linux (не путать с NET Framework под Mono).

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

Posted: Mon Apr 08, 2024 2:00 pm
by DiklosGroupLtd
Admin wrote: Tue Apr 02, 2024 10:51 am В версии 3.8.7.2037 добавлена поддержка .NET для Linux (не путать с NET Framework под Mono).
Отличные новости! :D
Проверил простой Console Hello World - всё работает
Начал проверять сериализацию/десериализацию JSON (System.Text.Json) - есть нюанс:
Названия переменных "слетают" (Я так понял вместо названий идёт их hex адрес), пример:

Code: Select all

root@diklosvm1:~/cmp2# ./ConsoleApp1
Deserialized!
{"D30B37B2":false,"ADBF60AD":null,"25AC9CA1":0}
root@diklosvm1:~/cmp2#
А ещё создаётся .map файл с названиями филдов:

Code: Select all

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
Вообще достаточно воспроизвести вот так:

Code: Select all

private static void Main(string[] args)
{
    string test = "c0ffee";
    Console.WriteLine(myDeserializedClass.GetType().FullName);
}
На всякий приложил тестовый проект.
ConsoleApp1.zip
(1.47 KiB) Downloaded 60 times
p.s. Простой aspnet проект тоже не стартует после накрытия протекта, но пока надо бы с этого начать)

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

Posted: Mon Apr 08, 2024 2:04 pm
by Admin
Просьба в архивы включать в том числе и откомпилированные бинарники.

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

Posted: Mon Apr 08, 2024 2:18 pm
by DiklosGroupLtd
Admin wrote: Mon Apr 08, 2024 2:04 pm Просьба в архивы включать в том числе и откомпилированные бинарники.
Прошу прощения, впредь буду включать бинари.
Я так понял что моя проблема возникает при опубликовании приложения (dotnet publish)
Приложил архив, вас должно заинтересовать \bin\Release\net8.0\publish\linux-x64\
ConsoleApp1.zip
(844.47 KiB) Downloaded 89 times

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

Posted: Mon Apr 08, 2024 2:29 pm
by Admin
Названия переменных "слетают" (Я так понял вместо названий идёт их hex адрес)
Это не названия переменных слетают, а vmprotect их переименовывает (опция "Удалять отладочную информацию"). В выходном MAP файле сохраняется информация о новых и старых именах для работы с "Stack Trace Decoder".
Я так понял что моя проблема возникает при опубликовании приложения (dotnet publish)
Ваша проблема возникает из-за того, что вам нужно исключить класс Root из переименования.

Code: Select all

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

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

Posted: Tue Apr 09, 2024 2:46 pm
by DiklosGroupLtd
Admin wrote: Mon Apr 08, 2024 2:29 pm
Названия переменных "слетают" (Я так понял вместо названий идёт их hex адрес)
Это не названия переменных слетают, а vmprotect их переименовывает (опция "Удалять отладочную информацию"). В выходном MAP файле сохраняется информация о новых и старых именах для работы с "Stack Trace Decoder".
Я так понял что моя проблема возникает при опубликовании приложения (dotnet publish)
Ваша проблема возникает из-за того, что вам нужно исключить класс Root из переименования.

Code: Select all

[Obfuscation(Feature = "renaming", Exclude = true, ApplyToMembers = true)]
class Root {
...
Спасибо, ещё буду проверять но пока работает :D
Если вдруг возникнут сложности - я отпишусь тут