VMProtect for .NET released

VMProtectDemo (build 1167):
http://vmpsoft.com/files/VMProtectDemo.exe

P.S. Mixed assemblies are not supported.

I downloaded the demo from above however it is not the 1125 build.
If I were purchase a new license today, would I be eligible for the update that includes the dotnet protection ? Or is that going to be a separate add on ? Is there any ETA on this as well ?

Please download the demo again (now it’s the 1125 build).

P.S. The full version with the .NET support isn’t available.

AMAZING! This is something I have been waiting for a very long time :smiley:

VMProtectDemo (build 1130):
http://vmpsoft.com/files/VMProtectDemo.exe

Where i can see .net SDK examples?

Look at this:
C:\Users\Public\Documents\VMProtect\Code Markers\Net
C:\Users\Public\Documents\VMProtect\Licensing\Net

Даже если я пытаюсь защитить приложение из примера C:\Users\Public\Documents\VMProtect\Code Markers\Net\bin\Project1.exe VMProtect Professional зависает на моменте сохранения .net, версия VMProtect 1130. Любая функция SDK вызывает проблему зависания VMProtect в момент сохранения.

Исправлено в 1031 билде:
http://vmpsoft.com/files/VMProtectDemo.exe

Тут я напишу все те баги которые я смог найти в VMProtect for .NET версии 1130. Я создал стандартное пустое приложение .net Forms версии 4.0
Добавил функции:

Приложение защищает
  1. “Защита памяти”;
  2. “Упаковать выходной файл”;
  3. “Удалять отладочную информацию”;
  4. “Водяной знак”.
Зависает VMProtect
  1. Добавил функцию “Отладчик” User-mode или User-mode + Kernel-mode.
Зависает VMProtect
  1. Добавил функцию Отладчик User-mode.
Зависает VMProtect
  1. Добавил функцию “Инструменты виртуализации”.
После закрытия приложение выдаёт ошибку. Ошибку вызывает Dispose(bool)

  1. Оставил рабочие функции и добавил все “Функции для защиты”;
Зависает VMProtect на моменте создании при попытки использование методов из библиотеки VMProtect.SDK.dll

Файл с которым я работал Log in

/del

После защиты 1031 в .net перестаёт работать соединение с сервером

Соединение не происходит даже если отключить все функции защиты и отключит SDK
Использую .net 4.7.2

public static string CheckForInternetConnection()
        {
            Version version = Assembly.GetEntryAssembly().GetName().Version;
            try
            {
                using (var client = new WebClient())
                using (client.OpenRead("https://***.ru/" + version + ".php"))
                {
                    return "https://***.ru/" + version + ".php";
                }
            }
            catch
            {
                try
                {
                    using (var client = new WebClient())
                    using (client.OpenRead("https://***.ru/" + version + ".php"))
                    {
                        return "https://***.ru/" + version + ".php";
                    }
                }
                catch
                {
                    try
                    {
                        using (var client = new WebClient())
                        using (client.OpenRead("https://***.ru/" + version + ".php"))
                        {
                            return "https://***.ru/" + version + ".php";
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                        Process.GetCurrentProcess().Kill();
                        return "";
                    }
                }
            }
        }

зависает на этапе компиляции на 7%

После защиты 1031 в .net перестаёт работать соединение с сервером

Присылайте простейший пример.

While the new .NET mode works quite well, there is quite a few suggestions I have:

  • Renaming: I don’t want to have to run my executable through another obfuscator before VMProtect. Class/method/field renaming is standard on even free .NET obfuscators and VMProtect should have it too. (maybe have it be apart of the ‘Strip debug information’ option?)
  • String encryption by default: Most .NET protectors allow you to have an option to protect all strings in the executable. Would be a nice convenience feature instead of doing SDK.DecryptString for every single string you use.
  • Native VMs: While probably quite hard to implement, having a native VM for .NET CIL would make the protection much stronger and also differentiate you guys from the rest of .NET protectors. (the only other product that does this costs 2000$ and having that would make you guys the top of the line for .NET right now)

Renaming: I don’t want to have to run my executable through another obfuscator before VMProtect. Class/method/field renaming is standard on even free .NET obfuscators and VMProtect should have it too. (maybe have it be apart of the ‘Strip debug information’ option?)

We are going to implement this feature in LUA script.

String encryption by default: Most .NET protectors allow you to have an option to protect all strings in the executable. Would be a nice convenience feature instead of doing SDK.DecryptString for every single string you use.

Because “most .NET protectors” have no API like VMProtectDecryptString :slight_smile:) Anyway, protection of all strings is useless like protection of all functions in an application. Usually a developer want to protect only critical strings like “Correct/incorrect login/password”.

Native VMs: While probably quite hard to implement, having a native VM for .NET CIL would make the protection much stronger and also differentiate you guys from the rest of .NET protectors. (the only other product that does this costs 2000$ and having that would make you guys the top of the line for .NET right now)

I don’t understand what you mean. We have already implemented own VM for CIL code. Did you try it?

Решил проблему с соединением предварительно пропустив .net приложение через ConfuserEx. Так и не смог понять с чем связана проблема с соединением.
SDK.DecryptString(“…”) - не работает, всегда выдаёт ошибку.

Я не использую никакие методы защиты, просто прогоняю через VMProtect

Прогнав приложение через дебагер я понял, что ошибка появляется при попытке вызова метода, сам метод не вызывается, при попытке сделать шаг внутрь сразу ловлю эксепшн.

PS: Версия VMProtect 1031
PS2: Возьмите пожалуйста в интернете .net приложение с 2000+ строками кода и проверьте на нем VMProtect и исправьте пожалуйста все ошибки которые возникнут при защите.

Прошу добавить в функционал для .net

  1. Защищенный виртуальный контейнер для загружаемых файлов и .dll;
  2. Нативную оболочку;
  3. Обфускацию методов;
  4. Защиту внедренных ресурсов.

Рекомендую обратить внимание на https://github.com/Loksie/KoiVM-Virtualization

Господа,

Хочу обратить ваше внимание на следующие моменты:

  1. Если вы столкнулись к какими-то багами, то просим присылать нам простейшие примеры, на которых воспроизводится ваша проблема. Никакие картинки из отладчика исправить проблему нам не помогут.
  2. VMProtect встраивает в защищенное приложение собственный runtime, который обрабатывается совместно с кодом пользователя, и он весит намного больше чем 2000+ строк кода.
  3. Ядро VMProtect написано на C++, поэтому поддержка .NET доступна даже без наличия .NET Framework на компьютере, а также возможна в версиях “VMProtect for OSX” и “VMProtect for Linux”.
  4. По поводу других протекторов для .NET - мы уже внимательно изучили все, что есть сейчас на рынке, в том числе и открытые проекты на github-е. Какие-то нужные фишки, которые присутствуют в этих продуктах, будут добавляться постепенно. На текущем этапе мы представили функционал по обфускации кода (не путать с переименованием классов/методов/полей) - это Virtualization (преобразование CIL в команды для нашей собственной ВМ) и Mutation (изменение Control Flow Graph). Также доступны дополнительные фишки по упаковке кода и SDK, в том числе и система лицензирования, которая полностью совместима с системой лицензирования для нативных приложений (для форматов PE, Mach-O, ELF).

Отправил вам программу для анализа проблем на почту info@vmpsoft.com
PS: Приложение работает на .net framework 4.7.2 и проблемы которые я перечислил можно воспроизвести если .net версия ниже 4.7
После вашего ответа

Я понял что проблема в не совместимости с .net framework 4.7.2. Подскажите пожалуйста на какой версии .net framework надо писать код?