Здравствуйте, подскажите пожалуйста. Мне нужно защитить свою программу от копирования и дальнейшего распространения. Не нужна сложная привязка во много действий, а допустим привязка к HDD или чему-то ещё и HardWare. Слышал о программе ASProtect, но не смог найти мануал по использованию. Кто сможет подсказать как реализовать защиту буду благодарен или как использовать эту программу. Могу в качестве "Спасиба" кинуть 100р на счёт мобильного Очень нужно ещё чтобы простому юзеру было сложно понять код дизасембером.
Делай привязку по железу путём получения серийника харда+например ID процессора и перемешивай их по любому придуманному тобой алгоритму.После этого обсфуцируй софт платным обсфукатором, например .NET Reactor.
Если подскажите пример получения серийного номера hdd, буду крайне признателен. Сколько обгуглил рабочего примера не нашёл на C#, наверно я что-то не так делаю.
PHP: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Management; using System.IO; namespace HardwareID { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string getUniqueID(string drive) { if (drive == string.Empty) { //Find first drive foreach (DriveInfo compDrive in DriveInfo.GetDrives()) { if (compDrive.IsReady) { drive = compDrive.RootDirectory.ToString(); break; } } } if (drive.EndsWith(":\\")) { //C:\ -> C drive = drive.Substring(0, drive.Length - 2); } string volumeSerial = getVolumeSerial(drive); string cpuID = getCPUID(); //Mix them up and remove some useless 0's return cpuID.Substring(13) + cpuID.Substring(1, 4) + volumeSerial + cpuID.Substring(4, 4); } private string getVolumeSerial(string drive) { ManagementObject disk = new ManagementObject(@"win32_logicaldisk.deviceid=""" + drive + @":"""); disk.Get(); string volumeSerial = disk["VolumeSerialNumber"].ToString(); disk.Dispose(); return volumeSerial; } private string getCPUID() { string cpuInfo = ""; ManagementClass managClass = new ManagementClass("win32_processor"); ManagementObjectCollection managCollec = managClass.GetInstances(); foreach (ManagementObject managObj in managCollec) { if (cpuInfo == "") { //Get only the first CPU's ID cpuInfo = managObj.Properties["processorID"].Value.ToString(); break; } } return cpuInfo; } private void button1_Click(object sender, EventArgs e) { txtID.Text = getUniqueID("C"); } } } Вот, перепишешь под себя.Код не мой, работал с этим кодом только немного переписывал его под себя ибо здесь много говна имхо...Ну если что перепишешь ^_^