Привязка к железу. C#. Привет, сегодня решил написать довольно таки "hard" гайд по привязке к железу, кому то он покажется сложным, кому-то нет - не важно! Принцип прост - при запуске генерируется уникальный ключ, который после высвечивается в текст боксе, юзер отправляет вам ключ, вы добавляете в базу его Ник(логин) и сам ключ. Тобишь кроме него никто не сможет зайти по этому логину. Что нам потребуется: 1. Компилятор C#, я советую Microsoft Visual Studio 2008/2010 2. Хостинг с поддержкой php, для начала советую h u t 2 . r u (удалить пробелы) 3. Базовые знание по СиШарпу 4. Точные действия по гайду 5. И как всегда руки (желательно прямые) и конечно серое вещство. 6. Добавить следующие библеотеки: using System.IO; using System.Net; using System.Management; Код using System.IO; using System.Net; using System.Management; 7. Добавить Management, Кликаем на References(Ссылки) правой кнопкой, Add Reference(Добавить Ссылку), Там выбрать .NET и найти System.Management и нажать ОК. 2. Теперь нам надо сгенерировать SYS-KEY, для этого получим HDD Serial Number где установлена Windows и закпритуем самым обычным способом, который я взял у TBX1n. Для этого добавим после: public Autorization() //Имя вашей формы { InitializeComponent(); } Код public Autorization() //Имя вашей формы { InitializeComponent(); } Следующее: private string Crypt(string text) { string rtnStr = string.Empty; foreach (char c in text) // Цикл, которым мы и криптуем "текст" { rtnStr += (char)((int)c ^ 1); //Число можно взять любое. } return rtnStr; //Возвращаем уже закриптованную строку. } Код private string Crypt(string text) { string rtnStr = string.Empty; foreach (char c in text) // Цикл, которым мы и криптуем "текст" { rtnStr += (char)((int)c ^ 1); //Число можно взять любое. } return rtnStr; //Возвращаем уже закриптованную строку. } 3. Теперь на эвент: Form_Load, добавим код: try { string drive = Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 1); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\""); disk.Get(); string diskLetter = (disk["VolumeSerialNumber"].ToString()); string lol1 = (Crypt(diskLetter.ToString())); textBox1.Text = lol1; } catch (Exception) { textBox1.Text = "Error to generate SYS code!"; } Код try { string drive = Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 1); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\""); disk.Get(); string diskLetter = (disk["VolumeSerialNumber"].ToString()); string lol1 = (Crypt(diskLetter.ToString())); textBox1.Text = lol1; } catch (Exception) { textBox1.Text = "Error to generate SYS code!"; } Генерируем ключ и выводим в текстБокс1. 4. Теперь, создадим файл db.php, и воткнём в него код: <? ?> Код <? ?> ТЕПЕРЬ! Каждый раз когда вам надо добавить нового юзера вы должны открыть db.php через FTP и ввести инфо юзера таким образом: <? UserName|SYS-KEY UserName2|SYS-KEY ?> Код <? UserName|SYS-KEY UserName2|SYS-KEY ?> И так далее... 5. Теперь зальём файл login.php на наш хост с таким содержанием: <?php $login = $_POST['log']; $password = $_POST['pas']; if($login == 'Вписываем логин' && $password == 'пароль' && !empty($login) && !empty($password)) { $lines = file('db.php'); foreach($lines as $single_line) echo $single_line . "<br />\n"; } else { $URL="http://www.google.com"; header ("Location: $URL"); } ?> Код <?php $login = $_POST['log']; $password = $_POST['pas']; if($login == 'Вписываем логин' && $password == 'пароль' && !empty($login) && !empty($password)) { $lines = file('db.php'); foreach($lines as $single_line) echo $single_line . "<br />\n"; } else { $URL="http://www.google.com"; header ("Location: $URL"); } ?> В поля логин и пароль вписываем значения, при которых юзер при запросе, ответ получт db.php, если юзер прийдёт на login.php без post параметра log,pass то его перенаправит на гугл :D. 6. Теперь добавим на буттон код: String password = "log=ЛогинКоторыйЛежитВLogin.php&pas=АналогичноПасВLogin.php"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://сайт.hut2.ru/login.php"); request.UserAgent = "Opera/9.80"; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; byte[] EncodedPostParams = Encoding.ASCII.GetBytes(password); request.ContentLength = EncodedPostParams.Length; request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length); request.GetRequestStream().Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string html = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("windows-1251")).ReadToEnd(); string[] stringSeparators = new string[] { "\n" }; string[] result = html.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); string PolucheniiNomer = ""; foreach (string stroka in result) { if (stroka.IndexOf(textBox2.Text) != -1) { string[] NashaStroka = stroka.ToString().Split((Convert.ToChar("|"))); string reLoL0 = (Crypt(NashaStroka[1].ToString())); PolucheniiNomer = reLoL0.ToString(); } } string HoldingAdress = ""; try { string drive = Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 1); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\""); disk.Get(); string diskLetter = (disk["VolumeSerialNumber"].ToString()); HoldingAdress = diskLetter; } catch (Exception) { MessageBox.Show("Critical error, application automatically exit", "", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } if (PolucheniiNomer == HoldingAdress) { MessageBox.Show("Loging Succefull!"); } else { MessageBox.Show("Loging Fail!"); } Код String password = "log=ЛогинКоторыйЛежитВLogin.php&pas=АналогичноПасВLogin.php"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://сайт.hut2.ru/login.php"); request.UserAgent = "Opera/9.80"; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; byte[] EncodedPostParams = Encoding.ASCII.GetBytes(password); request.ContentLength = EncodedPostParams.Length; request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length); request.GetRequestStream().Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string html = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("windows-1251")).ReadToEnd(); string[] stringSeparators = new string[] { "\n" }; string[] result = html.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries); string PolucheniiNomer = ""; foreach (string stroka in result) { if (stroka.IndexOf(textBox2.Text) != -1) { string[] NashaStroka = stroka.ToString().Split((Convert.ToChar("|"))); string reLoL0 = (Crypt(NashaStroka[1].ToString())); PolucheniiNomer = reLoL0.ToString(); } } string HoldingAdress = ""; try { string drive = Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 1); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\""); disk.Get(); string diskLetter = (disk["VolumeSerialNumber"].ToString()); HoldingAdress = diskLetter; } catch (Exception) { MessageBox.Show("Critical error, application automatically exit", "", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } if (PolucheniiNomer == HoldingAdress) { MessageBox.Show("Loging Succefull!"); } else { MessageBox.Show("Loging Fail!"); } 7. Запускаем, получаем SYS-KEY, на фтп в db.php добавляем строку в теги <? ?> Код <? ?> UserName|SYSKEY Код UserName|SYSKEY [/CODE] [/color] 8. Всё, если вы всё правильно сделали, у вас должны было появиться такое окошко: 9. Гуглим: DotNetReactor 4.0.0.0 + Crack, качаем, защищаем код проги. 10. PROFIT! Поехали... 1. Создадим формочку с 2 group box, 1 label, 2 textBox-a, 1 button.
Не знаю как вам,но для новичков топик во:good: Всё хорошо объяснил,сам кое что воспринял! В общем молодец!