Защита от копирования .NET - PullRequest
2 голосов
/ 17 июля 2009

Можно ли каким-то образом ограничить исполняемый файл .NET для конкретной машины, чтобы его можно было запускать только на этой машине.

Ответы [ 8 ]

9 голосов
/ 18 июля 2009

Да, и я делаю это в своих приложениях. Работает чудесно.

Получение информации о системе (CPUID, MacID, HDD) легко с помощью WMI (настоятельно рекомендуется).

Я создал систему, которая практически надежна (если вы не профессиональный хакер).

Когда мои приложения впервые устанавливаются на ПК пользователя, они возвращаются на мой сервер с помощью веб-служб. Они идентифицируют себя, используя хэш пароля, и ищут код авторизации / идентификатор заказа для клиента.

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

Если клиент переформатирует компьютер, все, что ему нужно, - это идентификатор заказа для повторной автоматической активации программного обеспечения (когда программа проверяет мой сервер, данные системы проверяются и утверждаются, если они совпадают). Если клиент устанавливает программное обеспечение на другом компьютере, он должен обратиться в мою службу поддержки для получения разрешения.

- Вся информация зашифрована и хеширована (двойное шифрование). - Весь код запутан и упакован.

В настоящее время он работает довольно надежно.

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

2 голосов
/ 17 июля 2009

Если на машине установлена ​​сетевая карта, вы можете использовать MAC-адрес :

Считывание MAC-адреса с сетевого адаптера в .NET

2 голосов
/ 17 июля 2009

Не могу использовать идентификатор процессора и проверять его каждый раз (?)

Вот пример кода , который я написал некоторое время назад.

Imports System.Management

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'Declare following three object variables

        Dim objMOS As ManagementObjectSearcher
        Dim objMOC As Management.ManagementObjectCollection
        Dim objMO As Management.ManagementObject

        'Now, execute the query to get the results
        objMOS = New ManagementObjectSearcher("Select * From Win32_Processor")

        objMOC = objMOS.Get

        'Finally, get the CPU's id.
        For Each objMO In objMOC
            MessageBox.Show("CPU ID = " & objMO("ProcessorID"))
        Next

        'Dispose object variables

        objMOS.Dispose()
        objMOS = Nothing
        objMO.Dispose()
        objMO = Nothing

    End Sub
End Class
1 голос
/ 23 марта 2011

.NET ужасен, потому что его легко вернуть обратно к исходному коду с помощью общедоступных инструментов. (Мы делаем демо, где взломаем .NET примерно через 2 минуты). Решение Сирила звучит хорошо, потому что он использует шифрование и хэш отпечатков пальцев на целевой машине. К сожалению, эти решения уязвимы для некоторых видов атак «человек посередине», хотя его решение звучит лучше, чем большинство. Одна из проблем привязки к компьютеру заключается в том, что токены для снятия отпечатков, которые вы хотите использовать (например, MAC-адрес, серийный номер процессора и т. Д.), Должны быть получены с помощью вызовов ОС, которые могут быть подделаны взломщиком среднего уровня.

В зависимости от стоимости вашего программного обеспечения в $, использование такого хорошего ключа, как CodeMeter, Hasp HL или KeyLok, обеспечит вам значительную защиту. Однако использование «плохого» ключа не поможет вам.

1 голос
/ 17 июля 2009

Из коробки - нет.

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

0 голосов
/ 03 апреля 2012

Если вам нужна готовая схема лицензирования, поддерживающая этот сценарий, см. CryptoLicensing

Это не совсем так. CryptoLicensing использует только имя компьютера, но не идентификатор процессора.

0 голосов
/ 13 декабря 2010

Для этого вам потребуется встроить код лицензии с каким-либо машинным кодом, сгенерированным из MAC-идентификатора, жесткого диска, идентификатора процессора и т. Д.

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

Если вам нужна готовая лицензионная схема, поддерживающая этот сценарий, см. CryptoLicensing

0 голосов
/ 17 июля 2009

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

Примеры шифрования .NET http://aspnet.4guysfromrolla.com/articles/112002-1.aspx http://www.eggheadcafe.com/articles/20020630.asp

...