Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
0 / 0 / 1
Регистрация: 08.08.2017
Сообщений: 92
.NET 4.x

Правильное лицензирование программы

26.01.2018, 10:05. Показов 8641. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все привет. Имеется полностью работоспособная программа с выдачей лицензии, но имеются проблемы.
Есть 3 формы: основной софт, авторизация и регистрацию.
При запуске открывается форма авторизации, где требуется ввести логин и пароль, которые хранятся в текстовике на ФТП сервере. При нажатии на кнопку Авторизоваться софт сверяет Логин, Пароль и номер железа. Все было отлично, но мой софт на днях крякнули, как сказал автор кряка он просто удалил форму лицензии. Подскажите как можно защититься от такого простого кряка. Хотелось бы еще узнать как защитить программу от декомпилиции (получения исходников), софт был обфусифицирован(правильно написал или нет, извините).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2018, 10:05
Ответы с готовыми решениями:

Лицензирование. Рутокены
Всем доброго времени суток! Интересует выдача временных лицензий на приложение, написанное на платформе .NET (язык C#). Планирую это...

Правильное построение программы
Добрый день. Есть некоторый вопрос по построению программы, работающей с базой данных. Есть База данных. В ней находятся 3 таблицы. ...

IntelliTrace остается в процессах после закрытия программы. Правильное завершение программы?
Много (очень много) раз запускал программу, закрывал через крестик. Вдруг винда сообщает, что виртуальная память вся забита (8к). Открываю...

22
 Аватар для Faiotti
29 / 30 / 15
Регистрация: 24.01.2018
Сообщений: 132
26.01.2018, 10:50
Обфусцировать код нужно. И обфускатор должен ни в коем случае не просто переименовывать функции и переменные в рандомные имена, а запутывать code-flow, насыщая его рефлексией, перенося часть исполняемого кода в ресурсы и т.д. Как крякер скажу, что и для .NET есть такие обфускаторы, которые могут усложнить любые изменения. Я сталкивался с таким.

Лучше всего взять то, чем пользуются крякеры (обычно это .NET Reflector) и испытать самому.

Еще можно создать некую активную защиту - например, наделать флагов, по которым следующий код будет проверять, была ли вызвана каждая функция (если сам обфускатор этого не делает), и если не была - значит, она вырезана - надо выдавать Exception или завершаться, желательно делать так, чтобы сложно было это перехватить - например, если падать - то через WinAPI, а не System.Diagnostics.
Можно проверять не подключен ли к процессу дебаггер.
Правда, .NETовские дебаггеры зачастую не так просто выявить, разве что проверить наличие такого запущенного процесса и отказаться работать, пока не завершат - или молча завершить его или себя.
Можно сделать отдельный модуль, который будет запускаться приложением где-то в скрытом месте, и следить...

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

Вообще по теме можно писать целую книгу.
2
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
26.01.2018, 11:11
Цитата Сообщение от Faiotti Посмотреть сообщение
Как крякер скажу, что и для .NET есть такие обфускаторы, которые могут усложнить любые изменения. Я сталкивался с таким.
Faiotti, а есть какие-либо стандартные инструменты для того, чтобы вытащить exe-шник из памяти?

Например, есть протектор, который распаковывает exe в память. Как его оттуда достают крякеры?
0
 Аватар для Faiotti
29 / 30 / 15
Регистрация: 24.01.2018
Сообщений: 132
26.01.2018, 11:13
netBool, Не знаю. Из памяти не вытаскивал. Ничего особо стандартного в 2 клика для этого нет, скорее всего)
Та же декомпиляция + дебаг при выполнении + ага, нашли byte[], сохраняем его дебаггером в файл или в HEX-редактор копируем все байты.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 11:21
Цитата Сообщение от Gisok Посмотреть сообщение
он просто удалил форму лицензии
в этом и ошибка. Размажьте проверку лицензии по коду. На входе форма так и останется, а потом в очередной неявный момент хоп - и проверка. Или проверка по времени, в зависимости от ... времени года)))
- Ввод лицензии - это лишь указание что программа платная. Продолжение кода вообще не должно быть привязано к одному месту.
- Делайте тайм бомбы - отключайте функционал по условию, или выкидывайте постоянную ошибку спустя время. Пользователь обратится что "не работает", переставляете дату - и обратно как бесплатный "патч". не ломайте данные, а именно вываливайтесь из программы. Или ещё хуже - просто NOP на критичных местах. И не слушайте восклицаний что "так нельзя". Нельзя - это когда ты сообщил пользователю способ защиты, а оно вам надо? ))
- Сделайте многофакторную проверку. Т.е. недостаточно иметь просто лицензию, надо ещё чтоб в коде была "именная" проверка. В этом случае маркером можно отследить "от кого утекла лицензия".
Всё вышеописанное делается на раз-два. Потом обфускатором и протектором => profit.

И не слушайте советов по поводу "защита замедлит код". Вы же не софтверный гигант, чтоб ваша программа была критично требовательна к компам или ещё каким ресурсам. Какие-то пару милисекунд погоды не сделают, тем более в грамотном месте а не при считывании базы данных на пару сотен тысяч записей)))

Добавлено через 2 минуты
Цитата Сообщение от netBool Посмотреть сообщение
чтобы вытащить exe-шник из памяти
не заморачивайтесь вы на таких местах. Поверьте, если у вас супер-мега-крутая-защита в одном месте программы, то некий "крякер" Faiotti, из спортивного интереса ломанёт программу. И тот же "крякер" Faiotti, много раз подумает, прежде чем отследить ВСЕ возможные места проверок, а потом запросит сумму за взлом, сопоставимую со стоимостью лицухи (или выше). Ну, если только он лично на вас не будет иметь зуб)))
1
0 / 0 / 1
Регистрация: 08.08.2017
Сообщений: 92
26.01.2018, 11:21  [ТС]
NET.Reflector его не может крякнуть (восклицательный красный знак в красном кругу).
Я пользуюсь обфускатором NET.Reactor и делаю все так как на скриншоте, может еще что за галочки отметить надо?
Какие обфускатором посоветуете пользоваться?
Миниатюры
Правильное лицензирование программы  
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 11:24
Самая распространённая ошибка лицензирования - это красивый, последовательный класс для обработки лицензии в отдельной DLL ке))) Прям так и хочется взять, сесть и сделать не просто какой-то там взлом, а прям кейген накатать. Что и было проделано много раз вне зависимости от уровня фирмы производителя (есессно в спортивных интересах и с целью совершенствования своей защиты)
0
0 / 0 / 1
Регистрация: 08.08.2017
Сообщений: 92
26.01.2018, 11:24  [ТС]
skilllab, да у меня были такие мысли, к примеру каждые минуты 2 сверять HWID. Если невенрный то программа закрывается, но лично я не увидел в этом смысла, т.к если программу крякнут, то есть получат доступ к коды, то эти проверки легко можно удалить как я понимаю. Я прав?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 12:01
Цитата Сообщение от Gisok Посмотреть сообщение
Я прав?
как писали ранее
Цитата Сообщение от Faiotti Посмотреть сообщение
Вообще по теме можно писать целую книгу.
Я вам так скажу: лучшая защита - это видимое "отсутствие" защиты.
Ваш подход к ней из первого сообщения - тому пример.

Добавлено через 6 минут
Gisok, есть на форуме один никнейм, "никотин". Ща вроде модератор. Почитайте всё что он писал и в каких темах, по части IL и защит. Там уйма интересного, а не просто
иф(май_сериал_из_тру) вен {всё_ок}


Добавлено через 22 минуты
Цитата Сообщение от skilllab Посмотреть сообщение
есть на форуме один никнейм
Он - https://www.cyberforum.ru/members/105416.html
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
26.01.2018, 13:20
Gisok, Защита интеллектуальной собственности , пожалуй , самое сложное...Все программы крякают , ну вот все. Я сижу на JetBrains Rider с локальными лицензионными серверами... Нормальных идей по защите Net кода нет , что касательно серверной части...Ты используешь FTP? А ssh ? Расскажите подробней как работает ваша серверная часть проверки лицензии.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 13:34
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Нормальных идей по защите Net кода нет
крайне упадническая точка зрения. Это как сказать что нет в природе материала, который нельзя сломать.
Есть же люди ломающие сосульки))) а есть которые с помощью суперприспособ сломают титановый стержень диаметром в пол-метра и те и другие будут рассказывать на форумах что "нет в природе материала, который нельзя сломать"?

Добавлено через 1 минуту
Те, которые ломают сосульки даже не возьмутся за титан, но обязок скажут что "он тоже ломается" ))).
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
26.01.2018, 13:37
skilllab, единственное на что наводит ваша мысль , что сломать можно что угодно , но с разным количеством усилий. Это так. Ну используй Net Native это все же лучше , чем простой IL - код(как компонент VS докачать можно), что сказать.Так описание работы серверной части будет?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 13:44
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Ну используй Net Native
Не буду, пока не появится desktop версия не только лишь для uwp

Добавлено через 29 секунд
И даже это не отменяет кодописания защиты.
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
26.01.2018, 13:48
skilllab, сам подумай. Продукт - код , получаешь код - получаешь все. Увеличение кол-ва проверок не даст сильного прироста в защите , просто больше времени понадобится , и тем более если проверки однотипные.Либо обфускация , либо написать элемент ядра на C++ нативном и там сделать проверки , тогда удаление элемента ядра просто убьет программу.

Добавлено через 2 минуты
skilllab, Зачем тебе защита кода , если ты не хочешь говорить о серверной части , а что-то мне подсказывает , что крякнуть эту часть будет куда проще.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
26.01.2018, 14:03
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
сам подумай
Я уже думал, и уже делал. Пока норм.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
просто больше времени понадобится
Я много чего уже написал выше в теме, твоё право читать это или нет. Но обращаясь по нику будь добр хотя б глаза поднять на сообщения. Спасибо.

Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Зачем тебе защита кода , если ты не хочешь говорить о серверной части
Ну так и поговори об этом с топикстартером, у него она.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
26.01.2018, 14:06
Цитата Сообщение от skilllab Посмотреть сообщение
Ну так и поговори об этом с топикстартером, у него она.

Не по теме:

Тогда извиняюсь.Попутал

0
0 / 0 / 1
Регистрация: 08.08.2017
Сообщений: 92
27.01.2018, 10:47  [ТС]
RaevskiAnatoly, на ФТП сервере save-data имеется файл license.db, при нажатии на кнопку авторизоваться этот файл качается проверяет есть ли в нем login:pass который ввел юзер и hwid, если нету то файл удаляется и высвечивается ошибка, если есть, то файл удаляется и открывается окно основной программы. Вы это хотели увидеть? Извеняюсь что долго не отвечал, доступа к интернету не было.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
27.01.2018, 11:10
Gisok, если я правильно тебя понял , то в файле license.db есть логины\пароли других пользователей , а также ты не применяешь ssh. Это небезопасно. Просто прослушивая сеть , можно перехватить файл , как следствие пароли и логины других пользователей. Ничто не мешает модифицировать пакеты данных и , например, подсунуть программе фальшивый license.db . Лучше будет написать на php сервер. Клиент посылает(по https!) запрос с своим логином и паролем , а в ответ получает , допустим , 3 возможных состояния : активация лицензии , нет лицензии , лицензия уже активирована на другом устройстве (лучше ввести ограничение на кол-во копий программы , что можно активировать данной лицензией).
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.01.2018, 13:36
Цитата Сообщение от netBool Посмотреть сообщение
есть какие-либо стандартные инструменты для того, чтобы вытащить exe-шник из памяти?
Естественно есть.

Добавлено через 4 минуты
Gisok, максимальную защиту даст только распределенное приложение (у которого часть основного кода будет на сервере). Вот тогда сломать его будет практически невозможно. Все остальное, так или иначе ломается.
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
27.01.2018, 15:28
Цитата Сообщение от insite2012 Посмотреть сообщение
Естественно есть.
Какие, например?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.01.2018, 15:28
Помогаю со студенческими работами здесь

Лицензирование программы у конечного пользователя
Доброго дня форумчане, за последнюю неделю мне, абсолютному новичку в с#, и вовлеченным еще двум гуру программинга, удалось создать...

Лицензирование программы без интернета
Ребята, хелп плиз! перерыл пол инета, не могу понять ни как, как добавить поддержку лицензий в прогу !(без интернета) т.е. либо файл...

Лицензирование собственной программы
Есть программный продукт, хочу его продавать. Вопрос в том, как подтвердить свое авторство на программный продукт? Как лицензировать? ...

Правильное составление программы
Здравствуйте, форумчане! Представляю вашему вниманию свою первую программулину на gpss...я ее вроде решил, но не пойму правильно ли?=) ...

Правильное построение кода программы очистки кэша браузеров
Здравствуйте, посмотрите пожалуйста правильно ли построен код, и можно ли как то сделать его быстрее Sub quick_del() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru