Ключевая защита
Ключевая защита реализует защиту приложения от не лицензионного использования, и в частности от множественного использования с различными установками программы регистрационной ключевой информации, относящейся к одной лицензии. Суть механизма защиты сводится к следующему: при обфускации в приложение встраивается модуль проверки лицензии на право использования приложения и открытый RSA ключ разработчика. Лицензия представляет собой файл, содержащий подписанную закрытым RSA ключом разработчика информацию о данной лицензии, а именно:
- номер лицензии;
- имя пользователя и название компании;
- дата выдачи;
- тип привязки;
- привязку.
Под привязкой понимается некоторая информация, позволяющая уникально идентифицировать пользовательское рабочее место. Inquartos Obfuscator поддерживает следующие типы привязок:
- привязка к имени компьютера пользователя;
- привязка к имени пользователя;
- привязка к Windows ProductID;
- привязка к аппаратному идентификатору ключа eTokenID;
- привязка к аппаратному обеспечению;
- привязка к идентификатору процессора;
- привязка к идентификатору жесткого диска.
При запуске приложения, с использованием открытого ключа осуществляется проверка корректности подписи лицензии пользователя. Далее, в соответствии с типом привязки, для рабочего место, на котором осуществляется запуск программы, генерируется привязка, и сравнивается с привязкой содержащейся в лицензии. При совпадении привязок загрузка приложения продолжается, в противном случае выдается диалог с запросом лицензии.
Настройка параметров ключевой защиты
Внешний вид вкладки Ключевая защита (с пометками)
Опции:
Пример результата обфускации с опцией Ключевая защита: при запуске приложения с отсутствующей лицензией появляется окно запроса.
Исходный код: TestProject-key_protection.zip
Собственная проверка лицензии
Для реализации собственной проверки лицензий нужно в коде объявить две статические функции (заглушки: Inquartos_VerifyLicense_IsLicenseCorrect, Inquartos_VerifyLicense_IsLicenseCorrectQueryDlg) и вызывать их для проверки, после обфускации вызовы этих функций будут заменены на реальные вызовы проверок.
Исходный код: CustomTestLicense.zip
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//
// Проверить лицензию
//
if (Inquartos_VerifyLicense_IsLicenseCorrect())
MessageBox.Show("ok");
else
MessageBox.Show("no license");
}
private void button2_Click(object sender, EventArgs e)
{
//
// Проверить лицензию с запросом в случае ее отсутствия
//
if (Inquartos_VerifyLicense_IsLicenseCorrectQueryDlg())
MessageBox.Show("ok");
else
MessageBox.Show("no license");
}
///
/// Заглушка проверки лицензии
///
///
internal static bool Inquartos_VerifyLicense_IsLicenseCorrect()
{
return true;
}
///
/// Заглушка проверки лицензии с запросом диалока
///
///
internal static bool Inquartos_VerifyLicense_IsLicenseCorrectQueryDlg()
{
return true;
}
}
Заглушки для VB.NET
Public Shared Function Inquartos_VerifyLicense_IsLicenseCorrect() As Boolean
Return True
End Function
Public Shared Function Inquartos_VerifyLicense_IsLicenseCorrectQueryDlg() As Boolean
Return True
End Function