[Руководство] [C#] Привязка к железу v2. - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.Ru LIVE! Реклама на Zhyk.Ru Доска почета top.zhyk.ru (beta) Премиум-аккаунт

Ответ
 
Опции темы Опции просмотра
Старый 14.07.2013, 21:01   #1
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
Post [C#] Привязка к железу v2.

Intro

Всем привет! Т.к. привязка v1 была сделана не совсем правильно (особенно хранение hwid) я решил сделать новую версию, на этот раз подменить ответ будет невозможно. Только надо изменять инструкции программы для "кряка". В этой привязке мы сможем задавать время, до которого будет действительна лицензия.

Что нам понадобится


1. Класс для получения HWID (HardWare ID) - скачать
2. Класс для работы с RSA на C# - скачать
3. PHP скрипты - скачать
4. Хостинг с поддержкой PHP - на данном примере я буду использовать хостинг от koding.com (не реклама)
5. MySQL - на данном примере я буду использовать [Ссылки могут видеть только зарегистрированные пользователи. ] (не реклама)
6. Microsoft Visual Studio 2008+ с редистрибутивом C# - гугл : )
7. Базовые знания (например как добавить класс в проект)

Начнём


1. Для начала необходимо создать MySQL базу. Для этого зарегистрируемся на [Ссылки могут видеть только зарегистрированные пользователи. ] и создадим MySQL базу (не MSSQL).
У вас должно получится что-то типо такого:скрин

2. Теперь создадим таблицу в MySQL базе данных, где будет храниться информация для лицензии. Для этого зайдём в phpMyAdmin, введём туда данные (пароль после регистрации бд приходит на почту) и нажмём "Создать таблицу", количество полей 2 - с именами "Hardware ID" и "End Time", тип - TEXT, и далее обязательно выставтить сравнение на "utf8_general_ci". и нажать "Сохранить".
скрин


3. Теперь надо сгенерировать паблик и приват ключи RSA. Для этого создадим проект с шаблоном "Приложение Windows Forms" и назовём его RSAKeysGenerator, далее на основную Form кинем 2 textBox-a, 2 label-a и 1 кнопку. Так же добавим в проект DigitalSign.cs.
скрин

4. На кнопку а именно в эвент Click запишем код:
Код:
            string publicKey = String.Empty;
            string privateKey = String.Empty;
            DigitalSign.AssignNewKey(ref privateKey, ref publicKey);
            textBox1.Text = privateKey;
            textBox2.Text = publicKey;
Главное не путать textBox-ы куда записываем ключи! (Хотя определить private и public ключи не сложно)

5. Теперь этот проект понадобится только для генерации ключей.

6. Теперь откроем globalsettings.php и изменим настройки:
Код:
$RSAprivateKey = "<RSAKeyValue><Modulus></Modulus><Exponent></Exponent></RSAKeyValue>";
Сюда в кавычки мы скопируем приват ключ, у меня получилось так
Код:
$RSAprivateKey = "<RSAKeyValue><Modulus>qPATiJQqZiJayNJkknPQ4IhFBXDHWYiBJeSE2QiuRwb5en+58OADRh6ssXzZIo9CyHDjlLB8ETjkrY4pPjO+SmH9h55tVns/VKyi73rZxDg4+EsenZUXa19z7SuzlhCyq/JXW2/SMSADBBKjch2L+JQuZi46eHxWZVyNFvzKy8XaCWYJFDgk9XYirUZ0XesL/UYMxTjiePCOjZJM6w6X+iUGWZhMcDfXsFnLpWJ1rXPUBGjPJrrnFs7GyKuuyw4UsXkD6jH6R4uiP2392Zf6bHwnQC5xGdT/1kP/kjIa42EakXrwkcQkpJj1SSy9MvYX0TJQ5SKOwi5jXEF0GZAVHw==</Modulus><Exponent>AQAB</Exponent><P>4aEI1nXR2GLpbdyV5VfQkq5ZlO3/daczu0ns52RE6pgVVO32L+cFsFYJy03d8KmAI5MozZ8BMv15ug7Hj6m+/RyMQIBOcLHwNLgs/MPzF/BOArbORsDu+6jHr022kN4Org5NLz/3pkVPA/zOuVqIuKGP3mSvxXS+mofiLZoQz3E=</P><Q>v62DvtWjTJ+PDvCxdILRBplVEjFuufCCYSIP6XcsC5jq5hbMizsOka6WmYaoK8jmyXi1idbWjLU5N/Fj5W0pnslE9lRoDlLD+xmhWuV0TwEeHbLl0+kWJ6CAcMFOFF4LiAbtN6SG0WNw8AJtwOTqjxzlvDVfeck07BGEgzaPBY8=</Q><DP>I8RYV07kDg5X/K9sH6gVCzuSPdagmXEA9V6ZrHCrsBidwRHb5eoUb8ij0tOsLBtikcEhRb8//GpMIp93KSH6gbtFzG/Kf3jloCXWE9eoMJJKe4mpF3Q8Li6qQPLrzvk0kIj52VSlmHkCNpqb1qwwYjxSRynk50NDd9G0nBABPDE=</DP><DQ>UyEmvTIcc5PT0I/09mnxy6Heclh8BCpZ8VR7gC6OLK1yWr3SkiPXyrjkWcs7zlmANiqi2RgSzs2d9jQ7tfnlDheOUCMFSgj9ND7GawyOp+D9NbYr1P8G+8KxUbWUbmLnL2SJpxM04UT2azEydnERhWXsAPdI5CGuUR+7z8huuOM=</DQ><InverseQ>Lx6Fnqvj7/uo6MxSMm26lHReHTHn8SGFx1mI7Z+4+NgB9hqO+OaCXZ3oQJiSVlHzv7Be+72mPyu6A60Y5DUBAif3NA90vLJ+3hFMeD9jA5KhHDSbOgFoqKzHmedXl+lYQhhhaFpsomInOTMItrSvn1tNwi6RU1pJSc2suQT9r5c=</InverseQ><D>O71Buw9h+uH1JoS3yc4os+2cMrNR20hZGxQ3IiRetIEz4WyfTR16KuaX/N+ATSdJ32WEJMVP6isrOnBGB1f214jVRYrxcR5+I6w0pejUbv3Or4ao2eKp+G81qE3G4K8g74rv90aQloySZHNO1wC5yXpk+f8o8AhP6OIUhmd4Mxw9T12sAvdp2Px3FsG4F2r2pF5YNIt8PAcV6uhYiZEdb+qR+HrZOj99Is+aGwuAhlAmsQcOEkARYuYwlYI6ZYjGsYWyEQGscdOMBFXrR6k1zdO6B0gVns5rWHOM82805qU8EPAlf19fL2Pqf8H1evTsLWQMNnoqqUDDZihD3FwQ4Q==</D></RSAKeyValue>";
Далее
Код:
$MySQL_hostname = "sql.site.com";
Мы заменяем на адрес сервера где расположена MySQL БД.
В моём случае:
Код:
$MySQL_hostname = "sql3.freesqldatabase.com";
Далее
Код:
$MySQL_username = "user";
Мы за меняем на имя пользователя для MySQL бд.
В моём случае:
Код:
$MySQL_username = "sql313795";
Далее
Код:
$MySQL_password = "password";
Мы заменяем на пароль для пользователя для MySQL бд.
Далее
Код:
$MySQL_databasename = "database name";
Мы заменяем на имя базы данной для MySQL.
В моём случае:
Код:
$MySQL_databasename = "sql313795";
Далее
Мы заменяем имя таблицы MySQL бд
Код:
$MySQL_table = "table name";
В моём случае:
Код:
$MySQL_table = "licensetable";
Всё, сохраняем настройки, загружаем все php файлы на сервер.

7. Теперь создадим новый проект тот же шаблон "Приложение Windows Forms". На него кинем 1 richTextBox, 1 кнопку. Добавим в проект DigitalSign.cs и HWIDGrabber.cs
Теперь объявим пару функций (можно прямо в коде формы)
Код:
        public string getDays(TimeSpan time)
        {
            return ((time < TimeSpan.Zero) ? String.Format("Лицензия истекла {0} дней {1} часов {2} минут назад", Math.Abs(time.Days).ToString(), Math.Abs(time.Hours).ToString(), Math.Abs(time.Minutes).ToString()) : String.Format("Лицензия активна. Осталось {0} дней {1} часов {2} минут", time.Days, time.Hours, time.Minutes));
        }

        public static string getSignedText(string[] response)
        {
            string returned = String.Empty;
            for (int i = 0; i < response.Length - 1; i++)
            {
                returned += response.GetValue(i) + "\r\n";
            }
            return returned;
        }
        public static string info(Random rn, Int32 token1,string preKey)
        {
            string tokenString = String.Format("token={0}&hwid={1}", DigitalSign.EncryptString(token1.ToString(), preKey), HWIDGrabber.GetUHI);
            return tokenString;
        }
        public static string GetRequest(string url, string post)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            byte[] buffer = Encoding.UTF8.GetBytes(post);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = buffer.Length;
            request.Method = "POST";
            Stream newStream = request.GetRequestStream();
            newStream.Write(buffer, 0, post.Length);
            newStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader strReader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1251));
            string WorkingPage = strReader.ReadToEnd();
            response.Close();
            return WorkingPage;
        }


        public static string randomStringWithNumbers(int maxlength, Random rn)
        {
            StringBuilder sb = new StringBuilder();
            char[] allowedChars = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            for (int i = 0; i < maxlength; i++)
            {
                int n = rn.Next(0, allowedChars.Length);
                if (char.IsLetter(allowedChars[n]))
                {
                    if (rn.Next(0, 2) == 0)
                    {
                        sb.Append(allowedChars[n].ToString().ToUpper());
                    }
                    else
                    {
                        sb.Append(allowedChars[n]);
                    }
                }
                else
                {
                    sb.Append(allowedChars[n]);
                }
            }
            return sb.ToString();
        }
Теперь на эвент OnLoad на нашей форме запишем код:
Код:
 richTextBox1.Text = HWIDGrabber.GetUHI;
p.s. если у вас ругается на ссылки, то вы должны подключить следующие:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
А если ругается на Managment, то добавьте в ссылки System.Managment в .net ветке

Далее на эвент кнопки Click:
Код:
//////////////////////////////////////////////////////////////////////////////////////////
            string pubKeyNotXORed = "<RSAKeyValue><Modulus></Modulus><Exponent></Exponent></RSAKeyValue>"; //Сюда в кавычки копируем ПАБЛИК rsa ключ.
//////////////////////////////////////////////////////////////////////////////////////////

            Random curRandom = new Random();
            string preKey = randomStringWithNumbers(curRandom.Next(15, 21), curRandom);
            Int32 XORkey = curRandom.Next(1, int.MaxValue);

///////////////////////////////////////////////////////////////////////////////////////////
            string urlToScript = DigitalSign.XOR("http://site.com/base.php", XORkey); //Вместо site.com/base.php полный путь до скрипта на вашем хостинге
///////////////////////////////////////////////////////////////////////////////////////////

            string pubKey = DigitalSign.XOR(pubKeyNotXORed, XORkey);

            Int32 token = curRandom.Next(1000000, int.MaxValue);
            string infoXORed = DigitalSign.XOR(info(curRandom, token, preKey), XORkey);
            string responseXORed = DigitalSign.XOR(GetRequest(DigitalSign.XOR(urlToScript, XORkey), DigitalSign.XOR(infoXORed, XORkey)), XORkey);
            string[] responseSplitted = DigitalSign.XOR(responseXORed, XORkey).Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            try
            {
                if (responseSplitted[0].Split('=')[1] == "1")
                {

                    if (Int32.Parse(DigitalSign.DecryptString(responseSplitted[4], preKey)) == token)
                    {
                        if (HWIDGrabber.GetUHI == Encoding.UTF8.GetString(Convert.FromBase64String(responseSplitted[1].Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries)[0])))
                        {
                            if (DigitalSign.CompareRSAMethod(getSignedText(responseSplitted), responseSplitted[responseSplitted.Length - 1].Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries)[0], DigitalSign.XOR(pubKey, XORkey)))
                            {

                                DateTime CurrentTime = DateTime.Parse(responseSplitted[2].Split('=')[1]);
                                DateTime EndTime = DateTime.Parse(responseSplitted[3].Split('=')[1]);
                                TimeSpan ActivatedTime = EndTime.Subtract(CurrentTime);
                                if (ActivatedTime < TimeSpan.Zero)
                                {

                                    MessageBox.Show(getDays(ActivatedTime));
                                    //Тут мы что-то делаем, если лицензия истекла
                                }
                                else
                                {
                                    MessageBox.Show(getDays(ActivatedTime));
                                    //Тут мы что-то делаем, если лицензия активна.
                                }

                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Лицензии не обнаружено!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка!\nКатастрофа!\nАхтунг!");
                //AnyErrors
            }
8. Запускаем, видим что в richTextBox появился наш HWID.
Жмём на кнопку, получаем
[Ссылки могут видеть только зарегистрированные пользователи. ]

9. Идём в phpMyAdmin, открывает нашу таблицу выбираем "Вставить", в Hardware ID пишем то, что выдал richTextBox, в EndTime время окончания, строго в таком формате: 14.07.2013 20:00:00
[Ссылки могут видеть только зарегистрированные пользователи. ]

10. Опять нажимаем на кнопку, и получаем:
[Ссылки могут видеть только зарегистрированные пользователи. ]

11. Пробуем поставить время окончания лицензии раньше нашего текущего времени, получем:
[Ссылки могут видеть только зарегистрированные пользователи. ]


Заключение


Я сделал лишь основу, дальше вы можете модернизировать, как вам захочется, сделать автоматическое добавление в базу и т.д.
Самое главное - это обезопасить себя от декомпиляции кода, полностью обезопасить - невозможно, но от обычных юзеров можно.
Для этого делаем скрытые проверки, делаем условия из нескольких переменных типа int на основе математики и так далее... Ну и конечно использовать обсуфикаторы.

За основу для работы с RSA на php были взяты скрипты от Jim Wigginton

Гайд подготовил Nickitee специально для zhyk.ru
Автор не несёт ответственности за пользование информацией
При копировании на другие сайты/блоги/форумы и т.п. - указывать автора
Вложения
Тип файла: zip HWIDGrabber.zip (1.0 Кб, 968 просмотров)
Тип файла: zip php scripts.zip (57.8 Кб, 938 просмотров)
Тип файла: zip RSAonCiSharpv4.zip (1.3 Кб, 817 просмотров)
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.

Последний раз редактировалось Nickitee; 23.12.2013 в 02:31.
  Ответить с цитированием
19 пользователя(ей) сказали cпасибо:
Грант97 (04.10.2013), артём612 (15.07.2013), ВезЧубарыйЧуб (07.04.2015), CATAHEHOK (17.06.2015), DeathAngel (27.05.2014), Роман1231 (14.07.2013), крайслер (19.07.2013), Hellost (16.08.2013), iamzero (17.07.2013), kawaii.prince (24.11.2013), KiRo_Lajt (07.02.2014), MembRupt (30.01.2014), Nik-sin (27.05.2014), RemoteAccess (18.07.2013), reraider (11.12.2013), sekaskissa (14.04.2017), spangebob951 (10.10.2016), stigma88 (14.07.2013), WOLF9595 (06.01.2017)
Старый 14.07.2013, 21:13   #2
 Разведчик
Аватар для Роман1231
 
Роман1231 душа компанииРоман1231 душа компанииРоман1231 душа компанииРоман1231 душа компанииРоман1231 душа компанииРоман1231 душа компанииРоман1231 душа компанииРоман1231 душа компании
Регистрация: 27.11.2011
Сообщений: 32
Популярность: 935
Сказал(а) спасибо: 25
Поблагодарили 18 раз(а) в 14 сообщениях
Отправить сообщение для Роман1231 с помощью Skype™
 
По умолчанию Re: [C#] Привязка к железу v2.

Спасибо, очень хороший урок
  Ответить с цитированием
Старый 14.07.2013, 21:40   #3
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 18.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Мне очень нравятся книги Криса Касперски. В одной он дал совет, никогда! не используйте привязку через интернет. Все это ловиться снифером, пишется hook ws2_32 и...собственно все.
Как вариант, использование собственных упаковок, которые без какой либо проверки прогоняют код, юзер платит за ключ, и получает декодер. Если ключ не верный, юзер получает мусор. Ну или, самомодификация кода.
Все эти messagebox, label вообще любое сообщение о неверном/верном, выдают вас! Считайте, что вашу защиту уже поломали

Добавлено через 35 минут
Код:
#include <stdio.h>
#include <stdlib.h>

#define STEP1 14
#define STEP2 27

main(void)
{
	unsigned char *str = "This is sample text";
	unsigned char *temp = (unsigned char *)malloc(strlen(str));
	int i = 0;
	for(; i < strlen(str); i++)
	{
		temp[i] = (unsigned char *)(str[i] ^ STEP1);
		temp[i] = (unsigned char *)(str[i] ^ STEP2);
	}
	for(i = 0; i < strlen(temp); i++)
		printf("%c", temp[i]);


	printf("\n");
	unsigned char *decode_temp = (unsigned char *)malloc(strlen(temp));
	for(i = 0; i < strlen(temp); i++)
	{
		decode_temp[i] = (unsigned char *)(temp[i] ^ STEP1);
		decode_temp[i] = (unsigned char *)(temp[i] ^ STEP2);
	}
	for(i = 0; i < strlen(decode_temp); i++)
		printf("%c", decode_temp[i]);

	printf("\n");
	free(temp);
	free(decode_temp);
	return 0;
}
Простейший пример моей идеи, что мешает продавать юзеру STEP1/STEP2 ?
А в str можно засунуть, секцию .code и прогнать Можно вообще все, включая заголовки.

Последний раз редактировалось pqsl; 14.07.2013 в 22:16. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 14.07.2013, 22:17   #4
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от pqslПосмотреть сообщение
Мне очень нравятся книги Криса Касперски. В одной он дал совет, никогда! не используйте привязку через интернет. Все это ловиться снифером, пишется hook ws2_32 и...собственно все.
Как вариант, использование собственных упаковок, которые без какой либо проверки прогоняют код, юзер платит за ключ, и получает декодер. Если ключ не верный, юзер получает мусор. Ну или, самомодификация кода.
Все эти messagebox, label вообще любое сообщение о неверном/верном, выдают вас! Считайте, что вашу защиту уже поломали

Ты думаешь?
Я разве не писал что тут нельзя подменить ответ?
И если накрыть приличным пакером типо Themida, то врядле рядовой юзер что-то сделает...
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 14.07.2013, 22:22   #5
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 18.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Ты думаешь?
Я разве не писал что тут нельзя подменить ответ?
И если накрыть приличным пакером типо Themida, то врядле рядовой юзер что-то сделает...

Я не силен в C#, объясни почему нельзя подменять ?
Themida умеет шифровать исходящий трафик ?
  Ответить с цитированием
Старый 14.07.2013, 22:53   #6
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от pqslПосмотреть сообщение
Я не силен в C#, объясни почему нельзя подменять ?
Themida умеет шифровать исходящий трафик ?

Окей, объясню.
Мы шлём на скрипт закриптованный токен и не закриптованный hwid.
Ответ получаем в таком формате:
Код:
license=1
[[TklWSURHQUZlcm9lY1RHNVgwNWlUU0FTVWVUQ0tNT1VQRVRJUkNOTS43VDIwMDQxMjA1ODA0NTFaMERKTEcz]]"
CT=14.07.2013 20:45:32
ET=14.07.2013 13:00:00
TjtWP+bKKO8894lV7UpiMDduEMN0OB/N9c2sqiRsB7I=
[[MdWJUFZ0X667nenqUQEfdwM4O50quX5KfCnyCg9Sp7yaNvtMxtFMSfs23ZamJHzESgXg6cy/FFp5SqjdyFse0DKaZY4sD9WEsOX6VDIpwJpXtHkD5iK8EXJK0eCccSq14CHa5F2KG5w2HIPY9XVU0m5xKeq3blBC+QTdTK0QAsit6UQi5nMIaIsUQ1Cg0iVSMkYUtE8ucE74hZbwDvwXRQdLeC9DiqiAgT8zEEq6KDkzdsc52Gl7KC8c7qyX5r...
В коде мы в первую очередь проверяем license=1, далее мы проверяем HWID, чтобы нельзя было зная чужой HWID работать с программой, далее идут CT - текущее время, которое выводит сервер и ET - время окончания взятое с БД, дальше идёт закриптованный токен, он декриптуеся по случайно сгенерированому ключу и сверяется так же с токеном в программе, и в конце всё подписывается RSA-2048 и через паблик ключ проверяется подпись.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 14.07.2013, 22:58   #7
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 18.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Окей, объясню.
Мы шлём на скрипт закриптованный токен и не закриптованный hwid.
Ответ получаем в таком формате:
Код:
license=1
[[TklWSURHQUZlcm9lY1RHNVgwNWlUU0FTVWVUQ0tNT1VQRVRJUkNOTS43VDIwMDQxMjA1ODA0NTFaMERKTEcz]]"
CT=14.07.2013 20:45:32
ET=14.07.2013 13:00:00
TjtWP+bKKO8894lV7UpiMDduEMN0OB/N9c2sqiRsB7I=
[[MdWJUFZ0X667nenqUQEfdwM4O50quX5KfCnyCg9Sp7yaNvtMxtFMSfs23ZamJHzESgXg6cy/FFp5SqjdyFse0DKaZY4sD9WEsOX6VDIpwJpXtHkD5iK8EXJK0eCccSq14CHa5F2KG5w2HIPY9XVU0m5xKeq3blBC+QTdTK0QAsit6UQi5nMIaIsUQ1Cg0iVSMkYUtE8ucE74hZbwDvwXRQdLeC9DiqiAgT8zEEq6KDkzdsc52Gl7KC8c7qyX5r...
В коде мы в первую очередь проверяем license=1, далее мы проверяем HWID, чтобы нельзя было зная чужой HWID работать с программой, далее идут CT - текущее время, которое выводит сервер и ET - время окончания взятое с БД, дальше идёт закриптованный токен, он декриптуеся по случайно сгенерированому ключу и сверяется так же с токеном в программе, и в конце всё подписывается RSA-2048 и через паблик ключ проверяется подпись.

В дебагере будет видно, что делают с пакетом Никуда не денешься от этого
  Ответить с цитированием
Старый 14.07.2013, 23:00   #8
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от pqslПосмотреть сообщение
В дебагере будет видно, что делают с пакетом Никуда не денешься от этого

А зачем тогда пакеры? Тем более на сравнивай натив и .net.
----
Да и вообще, скомпиль, накрой каким-нибудь пакером, а потом попробуй снять и подменить ответ.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 14.07.2013, 23:02   #9
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 18.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от NickiteeПосмотреть сообщение
А зачем тогда пакеры? Тем более на сравнивайй натив и .net.
----
Да и вообще, скомпиль, накрой каким-нибудь пакером, а потом попробуй снять и подменить ответ.

Я не сравниваю. Я выдвигаю абстрактные теории/способы
У меня нет Windows. Да если и был бы, что тогда ? Запакую я паблик пакером и т.д Транслирую шифр из машинного на Си и т.д На паблик пакер можно найти распаковку, если конечно Вы не дадите мне ключ
Да и та же темида, распакует программу в память. Делаем дамп, восстанавливаем oep, import list и т.д

Последний раз редактировалось pqsl; 14.07.2013 в 23:15.
  Ответить с цитированием
Старый 14.07.2013, 23:03   #10
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от pqslПосмотреть сообщение
Я не сравниваю. Я выдвигаю абстрактные теории/способы

Ну вот, теории никому не нужны. Только работающие способы.
Да и тем более, по теории всё крякается, а на самом деле - не всё.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 15.07.2013, 02:28   #11
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Ну вот, теории никому не нужны. Только работающие способы.

Ахахах, попробуй это сказать гуглу или любой другой серьезной исследовательской конторе.
Если сделать всё правильно, привязка действительно будет действовать до модификации самой программы или полного, я повторяю, ПОЛНОГО копирования скриптов которые работают на сервере и подмены этого самого сервера.
  Ответить с цитированием
Старый 15.07.2013, 13:15   #12
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от SinyssПосмотреть сообщение
Ахахах, попробуй это сказать гуглу или любой другой серьезной исследовательской конторе.
Если сделать всё правильно, привязка действительно будет действовать до модификации самой программы или полного, я повторяю, ПОЛНОГО копирования скриптов которые работают на сервере и подмены этого самого сервера.

Угу, только до самого полнейшего копирования всех скриптов на сервере.
Включая приват RSA ключ. Но это довольно таки сложно, даже не рядовому юзеру.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 15.07.2013, 20:14   #13
обжигающий
 Главнокомандующий
Аватар для object
 
object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(object сломал счётчик популярности :(
Регистрация: 17.11.2009
Сообщений: 1,062
Популярность: 61094
Золото Zhyk.Ru: 170
Сказал(а) спасибо: 1,440
Поблагодарили 2,061 раз(а) в 821 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Что же вы такого пишите, что боитесь за кряк к вашей софтине?
  Ответить с цитированием
Старый 16.07.2013, 13:18   #14
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 602
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от pqslПосмотреть сообщение
У меня нет Windows. Да если и был бы, что тогда ? Запакую я паблик пакером и т.д Транслирую шифр из машинного на Си и т.д На паблик пакер можно найти распаковку, если конечно Вы не дадите мне ключ
Да и та же темида, распакует программу в память. Делаем дамп, восстанавливаем oep, import list и т.д

На паблик пакер можно найти распаковку? Да ладно... Вы хотябы раз что-нибудь на виндовсе распаковывли? Ну и сделаешь ты дамп, а там будет не читабельный код, что дальше?
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 16.07.2013, 16:25   #15
 Разведчик
Аватар для pqsl
 
pqsl на правильном пути
Регистрация: 18.11.2012
Сообщений: 9
Популярность: 27
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: [C#] Привязка к железу v2.

Цитата:
Сообщение от NickiteeПосмотреть сообщение
На паблик пакер можно найти распаковку? Да ладно... Вы хотябы раз что-нибудь на виндовсе распаковывли? Ну и сделаешь ты дамп, а там будет не читабельный код, что дальше?

Да бывало дело.
Прогоняя программу по пакеру/криптору на выходе мы получаем набор байт с высокой энтропией. Нам нужен загрузчик, который бы распаковывал программу и запускал. Так вот, что мешает дебажить загрузчик и поймать pe вашей программы ?
  Ответить с цитированием
Ответ

Метки
c# coding, привязка, nickitee

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] Привязка к железу RChesteR Web-программирование и технологии 3 06.01.2017 17:20
Привязка к железу mires51 С/С++ 1 22.08.2011 17:06

www.webmoney.ru
Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 02:44.

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net