Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как защитить программу с помощью ключа, Помогизащитить программу с помощью ключа 
V
    Опции темы
mes
Дата 5.4.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Zakhar_Shan @  5.4.2009,  12:19 Найти цитируемый пост)
будем XORить....
ещё бы знать как это...

вот набросок : 
Код

#include <iostream>
#include <iterator>
#include <sstream>

std::string xor_crypt (const std::string& src, const std::string& key)
{
    std::string result;
    result.reserve (src.length());

    for (std::string::const_iterator it = src.begin(); it!=src.end(); )
     for (std::string::const_iterator it1 = key.begin(); it!=src.end() && it1!=key.end(); ++it1, ++it)
     result.push_back (*it ^ *it1); 

    return result;
}

std::string str2code (const std::string& src)
{
    struct { char operator () (unsigned digit) { return (digit<10) ? digit+'0' : digit-10+'A'; } } hex_digit;

    std::string result;
    result.reserve (src.length()*2.5); // резерв, *2.5 т.к на каждые 2 символа исходной строки приходится примерно 5 символов результативной.

    int spacer=0;
    for (std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
    {
        result.push_back (hex_digit(*it/16));
        result.push_back (hex_digit(*it%16));

        if (++spacer==2)
        {
            result.push_back (' ');
            spacer=0;
        }
    }

    return result;
}

int main()
{
  std::string my_str = "<test for crypt>";
  std::string key = "my key";

  std::string crypt= xor_crypt (my_str, key);
  std::cout << "before  crypt: " << my_str << std::endl;
  std::cout << "as code :      " << str2code (crypt) << std::endl;
  std::cout << "after uncrypt: " << xor_crypt(crypt,key) << std::endl;
  std::cout <<std::endl;

  system("pause");
  return(0);
}

разбирайтесь и приспосабливайте 
smile

Это сообщение отредактировал(а) mes - 5.4.2009, 17:03


--------------------
PM MAIL WWW   Вверх
Zakhar_Shan
Дата 5.4.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(mes @  5.4.2009,  14:34 Найти цитируемый пост)

разбирайтесь и приспосабливайте 


Ух, супер!!!!! smile 

mes, спасибо большое, всё понятно, как будет 100 постов, +  к репутации от меня!!!! smile 

Это сообщение отредактировал(а) Zakhar_Shan - 5.4.2009, 16:02
PM MAIL   Вверх
A5uKa
Дата 5.4.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



можешь потом выложить что получилось ?
PM   Вверх
Zakhar_Shan
Дата 5.4.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(A5uKa @  5.4.2009,  16:20 Найти цитируемый пост)
можешь потом выложить что получилось ? 


через часика 2-3 выложу код адаптированный для C++ Builder 2009
PM MAIL   Вверх
Anikmar
Дата 5.4.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Zakhar_Shan @  5.4.2009,  16:01 Найти цитируемый пост)
mes, спасибо большое, всё понятно, как будет 100 постов, +  к репутации от меня!!!!

Чего ждать - можно и сейчас, для mes не жалко  smile 
PM MAIL ICQ   Вверх
Zakhar_Shan
Дата 5.4.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(Anikmar @  5.4.2009,  17:02 Найти цитируемый пост)
Чего ждать - можно и сейчас, для mes не жалко  smile  

У меня пишет:

Цитата

Обнаружена ошибка:


У Вас недостаточно постов, чтобы изменять репутацию пользователей. Необходимо 100 постов.
 

PM MAIL   Вверх
Anikmar
Дата 5.4.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Zakhar_Shan @  5.4.2009,  17:41 Найти цитируемый пост)
У меня пишет:

Это в смысле того, что я за вас + поставил  smile 
PM MAIL ICQ   Вверх
Zakhar_Shan
Дата 5.4.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2




Цитата(Anikmar @  5.4.2009,  17:51 Найти цитируемый пост)
Это в смысле того, что я за вас + поставил  smile  


Ау, понял smile 
PM MAIL   Вверх
artsb
Дата 5.4.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Я бы сделал так:
Прога. В папке с ней файлик, в котором хранится зашифрованный пароль (шифровать можно как угодно. даже тем же XOR'ом). Если этого файлика нет прога вообще не запускается (должна быть соответствующая проверка в OnCreate), иначе открываем файл, расшифровываем пароль и выдаём пользователю окно с предложением ввести пароль. Если пользователь испортил файлик с паролем (например, при помощи блокнота) пароль расшифруется не верно smile и следовательно, пользователь не попадёт в программу.
А у преподавателя есть маленькая программка, которая даёт возможность изменить пароль.

ЗЫ а вообще, вариантов много... Удачи. ;)


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Zakhar_Shan
Дата 5.4.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Прошу прощение за задержку... личные дела.
и так:
Это будет мой id, по которому будет генерится код:
Для удобства восприятия пользователем, разделяем строку знаком "-", через каждые 4 символа, пусть это будет наш id компа:
Код

 String getInputKey(){
    String res = String(getProcId().c_str());
    res.Insert("-",13);
    res.Insert("-",9);
    res.Insert("-",5);
    return res;
 }

Эта функция выдирает из проца его id, так как я так и не понял, что и где она берёт, но понял, что эти цифры будут всегда одинаковыми, беру не всех их, а лишь кусок, и получаю строку из 16 символов:
Код

#include <vcl.h>
#include <iterator>
#include <sstream>    
 std::string getProcId(){
 DWORD dwID1,dwID2;
    asm{
        pushad
        mov eax,3
        cpuid
        mov [dwID2],edx
        mov [dwID1],eax
        // mov [dwID2],ecx
        popad
    }
    return std::string(IntToHex(int(dwID1),8).c_str())+std::string(IntToHex(int(dwID2),8).c_str());
 }


Теперь функцией generateLicKey(String inputKey) ,где inputKey-уже имеющийся id компа,  генерим сам ключик:
Код

const std::string cKey = "ver 2.0" ; // ключи у разных версий проги будут разные
std::string xor_crypt (const std::string& src,const std::string& key){
    std::string result;
    result.reserve (src.length());
    for (std::string::const_iterator it = src.begin(); it!=src.end(); )
     for (std::string::const_iterator it1 = key.begin(); it!=src.end() && it1!=key.end(); ++it1, ++it)
     result.push_back (*it ^ *it1);
    return result;
}
    String generateLicKey(String inputKey){
        inputKey.Delete(15,1);
        inputKey.Delete(10,1);
        inputKey.Delete(5,1);
        std::string src =  inputKey.c_str();

        std::string str=xor_crypt (src,cKey);


        String ret= String(reinterpret_cast<const char *>(str.c_str()));
        return ret;
    }

но.. проблемма, при переводе из std::string в String, что то не получается, это я вынес на обозрение сдесь


Это сообщение отредактировал(а) Zakhar_Shan - 6.4.2009, 00:00
PM MAIL   Вверх
artsb
Дата 5.4.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Я бы не делал привязку к железу или винде...
Что, если "завтра" обновят железо или поставят другую винду, или ещё что-то smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Zakhar_Shan
Дата 5.4.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(artsb @  5.4.2009,  20:21 Найти цитируемый пост)
Что, если "завтра" обновят железо или поставят другую винду, или ещё что-то smile 


Прочти зачем мне это нужно, если проц поменяют, то в нашем универе это произойдёт лет через 20-40... smile 
Даже если это произойдёт, преподователь просто сгенерит новый ключ, а привязку к винде он не делает...

PM MAIL   Вверх
xvr
Дата 5.4.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Код на C# использует WMI для идентификации машины. В MSDN есть примеры на С++ использования WMI (лучше взять оттуда). Затем, все накопленные идентификаторы загоняются в MD5 хэш (используется Crypto API).
Криптовать что либо xor'ами совершенно бесполезная идея - это вскрывается за 5 минут.
Я бы рекомендовал такую последовательность:
  •  Собрать данные через WMI
  •  Вычислить MD5 (или SHA1) от них
  •  Закриптовать RSA
  •  Записать в реестр
Пункты 2 и 3 можно сделать через Crypto API или через отдельную библиотеку (rsaeuro например). 
Основное преимущество такого подхода то, что для шифрования и дешифрования используются разные ключи, т.е. без инсталятора (в нем зашит ключ шифрования) будет невозможно установить программу на другую машину, какой бы хакер этим не занимался (только ломать код самой программы)


PM MAIL   Вверх
Zakhar_Shan
Дата 5.4.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Цитата(xvr @  5.4.2009,  21:20 Найти цитируемый пост)
#  Собрать данные через WMI
#  Вычислить MD5 (или SHA1) от них
#  Закриптовать RSA
#  Записать в реестр

 smile 
xvr, ты если что то пишиь, то примерчик напиши, желательно на C++, ато тут уже предложили USB ключ, который уйму денег ещё стоит... smile 


PM MAIL   Вверх
xvr
Дата 5.4.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Zakhar_Shan @ 5.4.2009,  21:30)
Цитата(xvr @  5.4.2009,  21:20 Найти цитируемый пост)
#  Собрать данные через WMI
#  Вычислить MD5 (или SHA1) от них
#  Закриптовать RSA
#  Записать в реестр

 smile 
xvr, ты если что то пишиь, то примерчик напиши, желательно на C++, ато тут уже предложили USB ключ, который уйму денег ещё стоит... smile

Примерчик будет ОЧЕНЬ объемный. По всем этим пунктам есть примеры в MSDN (www.msdn.microsoft.com). Набираешь у них в поиске и вуаля  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.