- 18, Mar 2013
- #1
Привязка к железу. 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;
7. Добавить Management, Кликаем на References(Ссылки) правой кнопкой, Add Reference(Добавить Ссылку), Там выбрать .NET и найти System.Management и нажать ОК.
Поехали...
1. Создадим формочку с 2 group box, 1 label, 2 textBox-a, 1 button.
2. Теперь нам надо сгенерировать SYS-KEY, для этого получим HDD Serial Number где установлена Windows и закпритуем самым обычным способом, который я взял у TBX1n.
Для этого добавим после:
public Autorization() //Имя вашей формы
{
InitializeComponent();
}
Следующее:
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!";
}
Генерируем ключ и выводим в текстБокс1.
4. Теперь, создадим файл db.php, и воткнём в него код:
<?
?>
ТЕПЕРЬ! Каждый раз когда вам надо добавить нового юзера вы должны открыть db.php через FTP и ввести инфо юзера таким образом:
<?
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");
}
?>
В поля логин и пароль вписываем значения, при которых юзер при запросе, ответ получт db.php, если юзер прийдёт на login.php без post параметра log,pass то его перенаправит на гугл . 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!");
}
7. Запускаем, получаем SYS-KEY, на фтп в db.php добавляем строку в теги <?
?>
UserName|SYSKEY
8. Всё, если вы всё правильно сделали, у вас должны было появиться такое окошко:
9. Гуглим: DotNetReactor 4.0.0.0 + Crack, качаем, защищаем код проги.
10. PROFIT!