Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание защиты Shareware программ, Помогите новичкам сделать это :) 
:(
    Опции темы
CasperSC
Дата 24.1.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Смысл темы в том, что давайте поможем начинающим (мне в том числе), как создавать shareware защиту программ, конкретно генератор ключей и проверка в программе, не надо ухищрений как спрятать проверку подальше, это всё можно найти  интернете, да и думаю никто особо стараться не будет. Просто нужно на конкретных примерах показать как это делается. Я просмотрел кучу сайтов и ничего не понял, там вообще ничего толком не объясняется. Знаю только, что для это нужно пространство имён System.Security.Cryptography

например шаблон на основе которого нужен конкретный код:
Код

namespace WindowsFormsApplication1
{
    static class ProtectSoftware
    {
           static string nameUser, namePC
           //проверить совпадает ли код (например при следующей загрузке зарегистрированной программы или при первой загр.)
           //в параметрах думаю можно ещё и какую нибудь аппаратную часть привязывать
           piblic CheckUserCode(string namePC, string userName) //есди не те параметры, что нужны, то конечно же можно поменять
           {
                 
           }

           public void GenerateNewUserCode(string namePC, string userName) //также можно поменять, если что то не то
           {
                 
           }

           //получить имя ПК
           public string GetNamePC()
           {

           }

           //получить имя пользователя
           public string GetNameUser()
           {

           }
     }
}


//вызов проверки при загрузке приложения (чисто для примера, а там уже каждый аорганизует как надо)
Код

private void MainForm_Load(object sender, EventArgs e)
        {
              ProtectSoftware.CheckUserCode( -//-//-, -//-//- )
        }


Можно ещё выдавать код в одном виде, а впрограмме, чтобы он расшифровывался по какому нибудь заранее определённому алгоритму и уже расшифрованный проверялся, незнаю надо это или нет. 
 
Помогите, кто нибудь, думаю многим это не составит проблем.

нашёл такой код и что-то не пойму где его использовать, можно и его запихать в выше приведённый шаблон:
Код

...
using System.Security.Cryptography;
using System.IO;
...

            //вызывать так:
            FileInfo fi = new FileInfo(@"C:\CONFIG.SYS"); 
            _fileMD5 = cGlobal.GetHashMD5FromStream(fi.OpenRead());

         //Для расчета контрольной суммы файла можно воспользоваться алгоритмом шифрования MD5.
        public static string GetHashMD5FromStream(Stream aStream)
        {
             HashAlgorithm _algMD5 = (HashAlgorithm)new MD5CryptoServiceProvider();
            byte[] _fHashMD5Client = _algMD5.ComputeHash(aStream);
            string _resultHashString = string.Empty;

            for (int i = 0; i <= _fHashMD5Client.Length - 1; i++)
            {
                _resultHashString += _fHashMD5Client[i].ToString("x2");
            }

            return _resultHashString;
        }


Если из этой темы, что нибудь выйдет и если я разбирусь с защитой, выложу более менее приличный метод защиты.

Это сообщение отредактировал(а) CasperSC - 27.1.2010, 18:38
PM MAIL   Вверх
CasperSC
Дата 26.1.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Неужели никто не умеет? Все программируют, все защищают, никто не умеет? Ну хоть что нибудь напишите.
PM MAIL   Вверх
mr.Anderson
Дата 26.1.2010, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Для .NET вразумительных попыток защиты кода сейчас немного. Из нормальных - это обфускация. Есть еще попытки динамической расшифровки кода, но она в стадии разработки, бешеной цены и не кроссплатформенная. Других методов пока не придумано.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
ДобренькийПапаша
Дата 26.1.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 3
Всего: 7



Я поднимал такую тему. Ссылка
Собственными силами, Вы не напишите адекватной защиты.

Это сообщение отредактировал(а) ДобренькийПапаша - 26.1.2010, 19:33


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Sfate
Дата 27.1.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



когда то тоже интересовался защитой кода... нашел программу, которая сжимает размер программы, путем замены некоторых значений на более простые... в итоге, просмотреть код программы тем же net.reflector уже нельзя... но полная работоспособность программы не гарантируется))
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
gambit
Дата 27.1.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Лучше написать 2 программы, одна полная-вторая урезанная, ибо все защиты тем более в .net на ура ломаются.
Вы можете написать самую невероятную защиту, но в итоге она сведется к одному bool значению, и для работы с программой достаточно его поменять, т.е. изменить один бит и вся ваша защита падает.
PM MAIL ICQ Skype   Вверх
CasperSC
Дата 27.1.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(gambit @ 27.1.2010,  11:56)
Лучше написать 2 программы, одна полная-вторая урезанная, ибо все защиты тем более в .net на ура ломаются.
Вы можете написать самую невероятную защиту, но в итоге она сведется к одному bool значению, и для работы с программой достаточно его поменять, т.е. изменить один бит и вся ваша защита падает.

Можно сделать кучу условий и не только с bool и не в одном методе. Поверь я хоть и новичок ну не на столько глуп.

Вообще цель не код защитить, а написать метод для генерации серийников, на основе каких нибудь пользовательских данных. Просто я не знаю как сгенерировать серийник, чтобы выдать пользователю, а дальше сам разберусь.
PM MAIL   Вверх
gambit
Дата 27.1.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(CasperSC @  27.1.2010,  17:21 Найти цитируемый пост)
Можно сделать кучу условий и не только с bool и не в одном методе. Поверь я хоть и новичок ну не на столько глуп.

мне интересно на это посмотреть
PM MAIL ICQ Skype   Вверх
CasperSC
Дата 27.1.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(gambit @ 27.1.2010,  19:19)
Цитата(CasperSC @  27.1.2010,  17:21 Найти цитируемый пост)
Можно сделать кучу условий и не только с bool и не в одном методе. Поверь я хоть и новичок ну не на столько глуп.

мне интересно на это посмотреть

Работает 1 - 5 тамер(ов) Имею ввиду например пользователь вводит пароль и нажимает принять, при этом происходит ложная проверка, можно ещё при ложной проверке как нибудь повлиять на какие нибудь переменные (опять же как нибудь замудрённо, чтобы это небыло очевидно). 1 из 5-ти таймеров проверяет нажимали ли кнопку, если да, то запустить 40 таймеров, 3 - 8 из которых реально проверяют, 1 из 40 таймеров проверяет ту переменную которая была изменена при нажатии на кнопку (где производилась ложная проверка), но в разное время, например 1 через минут 20, остальные позже. и если там переменная не изменена, а программа как бы работает, то завершить программу и удалить себя с компьютера пользователя или низнаю, мож зашифроваться или заархивироваться, короче как нибудь неявно стать неработоспособной.   Да вообще можно такого бреда понаписать, что сам потом не разберёшься smile переменную с введённым паролем при вводе сразу рабивать пополам или задом наперёд, потом по таймеру создавать новую, перекидывать туда её. Хранить её в массиве таких переменных, эти переменные все разные и одна в чистом виде как вводили, но она не работает, так как в введённый код добавляется какие нибудь символы и при проверке учитывая их проверяются. Конечно я тут понаписал, но думаю такое можно вполне замутить,  в ходе написани исправлять недочёты, что-то убрать, что-то добавить. Плюс обфускатор. Можно проверять запущен ли Reflector и подобные. Короче попортить взлом ломающему, даже если сломает, то хотя бы помучается.

Это сообщение отредактировал(а) CasperSC - 27.1.2010, 23:00
PM MAIL   Вверх
Любитель
Дата 27.1.2010, 23:21 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
Короче попортить взлом ломающему, даже если сломает, то хотя бы помучается.

Из всего, что вы написали эффективен только хороший обфускатор (с криптованием строк, с качественной обфускацией control flow, с невалидными конструкциями с точки зрения декомпилеров и т. д.). А в остальном - вы будете мучаться больше, чем взломщик. Проверка на "запущенность" рефлектора вообще убила - рефлектор это дизассемблер/декомпилятор, а не дебаггер!


--------------------
PM MAIL ICQ Skype   Вверх
gambit
Дата 27.1.2010, 23:48 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
запустить 40 таймеров

Правильно, поставим комп на колени.

Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
Да вообще можно такого бреда понаписать, что сам потом не разберёшься 

Это все отсеивается в 2 секунды.


Я вам еще раз повторяю, какую бы защиту вы не написали, в итоге все сведется к
Код

if(условие)
{
код принят
}
else
{
код не принят, сжигаем комп
}

Так что все свелось к одному биту.


Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
Работает 1 - 5 тамер(ов) Имею ввиду например пользователь вводит пароль и нажимает принять, при этом происходит ложная проверка, можно ещё при ложной проверке как нибудь повлиять на какие нибудь переменные (опять же как нибудь замудрённо, чтобы это небыло очевидно). 1 из 5-ти таймеров проверяет нажимали ли кнопку, если да, то запустить 40 таймеров, 3 - 8 из которых реально проверяют, 1 из 40 таймеров проверяет ту переменную которая была изменена при нажатии на кнопку (где производилась ложная проверка), но в разное время, например 1 через минут 20, остальные позже.

А вообще улыбнуло, реализуйте, я вам на примере покажу что это хренотень.

Добавлено через 1 минуту и 36 секунд
Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
Работает 1 - 5 тамер(ов) Имею ввиду например пользователь вводит пароль и нажимает принять, при этом происходит ложная проверка, можно ещё при ложной проверке как нибудь повлиять на какие нибудь переменные (опять же как нибудь замудрённо, чтобы это небыло очевидно). 1 из 5-ти таймеров проверяет нажимали ли кнопку, если да, то запустить 40 таймеров, 3 - 8 из которых реально проверяют, 1 из 40 таймеров проверяет ту переменную которая была изменена при нажатии на кнопку (где производилась ложная проверка), но в разное время, например 1 через минут 20, остальные позже. и если там переменная не изменена, а программа как бы работает, то завершить программу и удалить себя с компьютера пользователя или низнаю, мож зашифроваться или заархивироваться, короче как нибудь неявно стать неработоспособной.   Да вообще можно такого бреда понаписать, что сам потом не разберёшься smile переменную с введённым паролем при вводе сразу рабивать пополам или задом наперёд, потом по таймеру создавать новую, перекидывать туда её. Хранить её в массиве таких переменных, эти переменные все разные и одна в чистом виде как вводили, но она не работает, так как в введённый код добавляется какие нибудь символы и при проверке учитывая их проверяются. Конечно я тут понаписал, но думаю такое можно вполне замутить,  в ходе написани исправлять недочёты, что-то убрать, что-то добавить. Плюс обфускатор. Можно проверять запущен ли Reflector и подобные. Короче попортить взлом ломающему, даже если сломает, то хотя бы помучается.

Дочитал до конца, я бы вас принял на работу. Мне так хочется вас уволить.
PM MAIL ICQ Skype   Вверх
CasperSC
Дата 28.1.2010, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

Правильно, поставим комп на колени.


40 таймеров не обязательно работающих с интервалом 100 миллисекунд. можно и раз в час проверять, комп от этого уж точно не встанент на колени, даже не почувствует и вообще это просто грубый пример. 

Код

Это все отсеивается в 2 секунды.

Не спорю, может быть, только интересно чем?

Код

А вообще улыбнуло, реализуйте, я вам на примере покажу что это хренотень.

Надо попробовать, правда генерация пароля будет полной лажей, так как не знаю как его генерировать. Мне даже интересно, может это всё и вправду хрень?

Код

Дочитал до конца, я бы вас принял на работу. Мне так хочется вас уволить.

Во первых какая работа, я только начал учить C#, да и вообще программирование в целом. Всё что я понаписал я начитался на сайтах по защите кода, правда там писали про Delphi и ещё советовали не использовать VCL (вроде) и API функции. Короче видимо мне запудрили мозги. Ну и практически всё я сочинил на ходу не обдумывая деталей. 

P.S Ну а вообще, полюбому такой способ, пусть даже не такой замудрённый всё равно доставит проблем, чем просто if(true) {} else {} вот такое думаю как раз в 5 сек и ловиться и выключается.

Вообще надо было тему назвать: Генерация ключей.
Вопрос как сгенерировать, а не то поможет ли защита такая-то. Люди если кто умеет на C# покажите пример пожалуйста. На любом форуме одно и тоже. Не ответ на вопрос, а просто обсуждение, что это всё фигня и не поможет.

Это сообщение отредактировал(а) CasperSC - 28.1.2010, 11:49
PM MAIL   Вверх
CasperSC
Дата 28.1.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Любитель @ 27.1.2010,  23:21)
Цитата(CasperSC @  27.1.2010,  22:55 Найти цитируемый пост)
Короче попортить взлом ломающему, даже если сломает, то хотя бы помучается.

Проверка на "запущенность" рефлектора вообще убила - рефлектор это дизассемблер/декомпилятор, а не дебаггер!

Да  smile  что-то меня это тоже убило, когда перечитал внимательно. У меня же есть этот самый Reflector. Сам смотрел им код после обфускации.


Ещё раз спрошу: Как сгенерировать код на основе 3 - ёх каких либо строк, например имя ПК - Пользоватея - ещё что нибудь?
PM MAIL   Вверх
gambit
Дата 28.1.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(CasperSC @  28.1.2010,  12:01 Найти цитируемый пост)
Ещё раз спрошу: Как сгенерировать код на основе 3 - ёх каких либо строк, например имя ПК - Пользоватея - ещё что нибудь? 

самый элементарный md5(имяПК + серийный номер любой платы)

Я только не понимаю, какую защиту вам даст получение ключа у пользователя. Мне всегда казалось что это мы должны пользователю ключ давать, а не он нам.

Добавлено через 2 минуты и 54 секунды
Или схема такая?
Программа генерит код, отсылает его вам, потом вы присылаете его пользователю, он вводит и удивляется - как это вы создали код который только на этом компе работает?
PM MAIL ICQ Skype   Вверх
CasperSC
Дата 28.1.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



[QUOTE=gambit,28.1.2010,  14:47]
Цитата(CasperSC @  28.1.2010,  12:01 Найти цитируемый пост)

Добавлено @ 14:50
Или схема такая?
Программа генерит код, отсылает его вам, потом вы присылаете его пользователю, он вводит и удивляется - как это вы создали код который только на этом компе работает?

Слушай, а у тебя есть чувство юмора  smile 
Вот писал, для друга, он не знает как установить аську, типа учил его. Так вот обработали её 2 обфускатора, будь другом скажи такая защита ломается? По сути паролей и т.д. там нет, просто код реально прочитать? Ведь если его можно прочитать, то и защиту как я понимаю сломать? http://narod.ru/disk/17349523000/Protected...sounds.rar.html

Вообще-то, надо, чтобы только на его компе работал этот ключ, а как иначе? Он просто его выложит где нибудь и всё.

Это сообщение отредактировал(а) CasperSC - 28.1.2010, 16:26
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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