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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита программы 
:(
    Опции темы
Wanderer2019
Дата 19.4.2005, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте. Ввиду того, что в разделе форума по теме сообщения никто не откликается пишу здесь. Как возможно защитить программу от незаконного копирования, написанную на C# под win????
PM ICQ MSN   Вверх
AntonSaburov
Дата 19.4.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А эта тема чем не устраивает ? Защита исходного кода .NET приложений
PM MAIL WWW ICQ   Вверх
Wanderer2019
Дата 19.4.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не подходит тем образом, что я вообщем не ищу пути скрытия кода для программеров и т.д.. Мне необходимо защитить программу от несанкционированного использования... т.е. избежать возможности попадания программы в интернет и в Freeware категорию... как лучше поступить?
PM ICQ MSN   Вверх
AntonSaburov
Дата 19.4.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Ну тут способов много - чаще всего шифрация или привязка к аппаратуре. Но если программа будет достойная для взлома, то сломают в любом случае.
PM MAIL WWW ICQ   Вверх
arilou
Дата 19.4.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



В любом случае, тебе придется комбинировать разные варианты (обфускация все равно понадобится):

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

1) Активация программы: при первом запуске предлагаешь активировать через Инет. В качестве активационного ключа присылаешь спец.образом сформированную сборку. Она генерится на сервере. Для аутентификации и авторизации используешь ассиметричные ключи, с помощью которых подписываешь всю переписку с сервером.

2) Периодическое взаимодействие программы с неким сервером в Инете для проверки ее "чистоты"

3) Как сказал AntonSaburov, привязка к оборудованию. Например, к серийному номеру HDD. Или использование аппаратных ключей, можно на основе flash-memory: пишешь на флэшку закрытый ключ (свой для каждого клиента), в программу - открытый, и проверяешь при запуске и во время выполнения проги.

========
Вот такой вот получился поток сознания smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 20.4.2005, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Если уж использовать возможности Инета, то по такому сценарию:

1) из Инета скачивается и запускается сборка-загрузчик (EXE)
2) эта сборка собирает информацию об оборудовании (серийные номера устройств, MAC-адрес сетевой карты и пр., что можно узнать из реестра)
3) далее, сборка-загрузчик отправляет серверу запрос, в котором указана в зашифрованном виде (в виде хеш-строки, например) информация, полученная в пункте 2
4) сервер берёт главный EXE'шник твоей программы и перекомпилирует его таким образом, чтобы на этапе старта твоя программа собирала информацию о компьютере на котором её запустили, и сравнивала бы с хеш-строкой, "зашитой" в теле программы; после этого, сервер применяет обфускатор для EXE и создаёт инсталляционный дистрибутив setup.exe
5) сборка-загрузчик скачивает setup.exe и запускает его на машине

Преимущество такого подхода состоит в том, что:

1) каждая копия EXE - уникальна и привязана к конкретному оборудованию (к машине, на которой скачивали программу)
2) не нужны в последующем регулярные соединения с Интернетом и проверки
3) не нужны алгоритмы генерации и проверки s/n
4) не нужны аппаратные ключи


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 20.4.2005, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Если простого сравнения двух строк недостаточно (а его недостаточно, т.к. один оператор ветвления всегда легко найти и отследить, а потом - обмануть или сломать), тогда напрашивается следующее:

1) разбиваем нашу EXE на 2 части: EXE-загрузчик и собственно, EXE-программа
2) сервер шифрует тело EXE-программы хеш-ключом, полученным от клиентской машины, и сохраняет полученный бинарник в ресурсы EXE-загрузчика (простая компиляция из одного .cs-файла с добавлением ресурса)
3) при старте программы запускается загрузчик, который загружает бинарник зашифрованной программы из ресурсов, и расшифровывает его хеш-ключом, который получается из информации о текущей машине
4) если текущая машина - чужая (или проапгрейдили smile), то расшифрованный бинарник будет "мусором", иначе - получится EXE, которую можно запустить

Тут уже будет очень сложно что-то сломать, т.к. операция расшифровки и запуска EXE программы загрузчиком производится прямо в памяти, а влезть в чужое адресное пространство на .NET очень сложно (вообще невозможно ?). Преимущество по сравнению с предыдущим моим вариантом состоит в том, что серверу не приходится запускать обфускатор, а только скомпилировать EXE загрузчика с зашифрованным ресурсом (в дотНЕТ это делается элементарно) и создать setup.exe (каким образом - зависит от типа инсталлятора).


--------------------
user posted image
PM MAIL WWW   Вверх
jfx
Дата 20.4.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
3) при старте программы запускается загрузчик, который загружает бинарник зашифрованной программы из ресурсов, и расшифровывает его хеш-ключом, который получается из информации о текущей машине

Одного запуска на "честной" машине будет достаточно, что бы потом растиражировать программу.
Предложить что-то более-мение реального не могу. Привязка к железу, RSA-подписи - все это достаточно легко "ломается" в .NET. Вот если все эти механизмы использовать в зашифрованной сборке, но только расшифровка должна проходить "на лету"... не вся сборка целиком, а частями, по ходу выполнения и желательно не одним и темже ключом... Правда как это реализовать на .NET я не представляю.
А вообще RSA весчь хорошая если использовать ее с умом, а не проверять только подписи и хранить Public Key в сборке в открытом виде...
PM MAIL   Вверх
mr.DUDA
Дата 20.4.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(jfx @ 20.4.2005, 10:11)
Одного запуска на "честной" машине будет достаточно, что бы потом растиражировать программу.


Объясни, как ты получишь расшифрованный бинарник программы?


--------------------
user posted image
PM MAIL WWW   Вверх
jfx
Дата 20.4.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да просто: посмотрю каким ключом он расшифровывается и расшифрую вручную.
PM MAIL   Вверх
mr.DUDA
Дата 20.4.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(jfx @ 20.4.2005, 12:01)
посмотрю каким ключом он расшифровывается и расшифрую вручную


Так ведь ключ в не "зашит" в загрузчике, он вычисляется в рантайме.


--------------------
user posted image
PM MAIL WWW   Вверх
jfx
Дата 20.4.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хм, но ведь речь идет о "честной" машине. Кто мне помешает посмотреть этот ключь под отладчиком?
Добавлено @ 13:47
Я изучал защиту многих программ. Поэтому и говорю, что самое реальное это шифрование участков кода не семетричными алгоритмами с большой длинной ключа. Причем не стандартными .NET-овскими методами а своими (а еще лучьше написанными в native).
PM MAIL   Вверх
Wanderer2019
Дата 20.4.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



мммм.... возможно задам бредовый вопрос... как можно перекомпилировать EXE-шник без .NET??? или что имелось ввиду??? т.е. в тело программы надо внести проверку этой самой хэш строки на зтапе загрузки программы... так вот как же туда внести эту информацию???? если программа уже откомпилировна... буду очень признателен за развернутый ответ.... никогда не имел дело с чем либо подобным... Спасибо!
PM ICQ MSN   Вверх
jfx
Дата 20.4.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



брррр, ничего не понял. Если можно немного попроще. Вопрос касается какого сообщения?

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


Опытный
**


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

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



Цитата(mr @ 20.4.2005, 07:44)
сервер берёт главный EXE'шник твоей программы и перекомпилирует его таким образом, чтобы на этапе старта твоя программа собирала информацию о компьютере на котором её запустили, и сравнивала бы с хеш-строкой, "зашитой" в теле программы; после этого, сервер применяет обфускатор для EXE и создаёт инсталляционный дистрибутив setup.exe


как можно перекомпилировать что то на сервере??? как вообще перекомпилировать уже откомпилированное?
PM ICQ MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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