Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
10 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 4

Защита программы от повторного использования

05.06.2015, 23:00. Показов 1463. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, пожалуйста не ругайтесь за дублирование темы, я видел несколько созданных тем про подключение формы vb.net к удаленной базе данных. Но я так и не понял решение проблемы. И что, если нельзя подключиться к удаленной бд из формы, как можно защитить свою программу?

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

Но вот беда.. локально красиво все работает, но на хостинге нет возможности из vb.net соединяться к базе. т.е. соединяться то можно но только статическому ip, т.е. нескольким юзерам уже не подключиться никак, да и в принципе невозможно это, т.к. на хостинге необходимо добавить ip для которого хотим получить доступ для удаленного подключения.. я естественно никаких ip не знаю...
Может есть какие то мысли на этот счет? я что-то никак не могу понять как другие защищают свои программы, неужели нет возможности сделать регистрацию и авторизацию в программе на vb.net в удаленную базу данных... это просто в уме не укладывается...

Или есть какие то другие принципы с работой с удаленной бд? Пожалуйста, если не трудно расскажите... я столько времени убил на этот механизм... неужели придется все переделывать(((
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2015, 23:00
Ответы с готовыми решениями:

Простейшая защита программы: где хранить число срабатываний программы?
День добрый! Написал одну небольшую программу, которая может быть интересна специализированной тусовке. Хочу распространять ее бесплатно,...

Защита программы от нелицензионного использования
Более подходящей темы не нашел. Предположим, у меня есть самописная программа, которую я хочу продавать. Какая программа, купят или нет,...

Защита программы от нелегального использования
Как защитить программу? В том плане что есть серийник , юзер вводит его , как лучше в дальнейшем давать проге понять что она активирована?...

10
 Аватар для Desh
147 / 147 / 41
Регистрация: 01.12.2009
Сообщений: 275
06.06.2015, 01:08
Цитата Сообщение от vadimnev Посмотреть сообщение
т.к. на хостинге необходимо добавить ip для которого хотим получить доступ для удаленного подключения
у разных хостеров по разному... например мой хостер не требует одного и того же IP, да и вообще при работе с базой не заметил привязок к IP.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
06.06.2015, 04:36
Цитата Сообщение от vadimnev Посмотреть сообщение
т.е. соединяться то можно но только статическому ip, т.е. нескольким юзерам уже не подключиться никак
Один IP не означает, что к нему может подключиться только один пользователь.

Цитата Сообщение от vadimnev Посмотреть сообщение
на хостинге необходимо добавить ip для которого хотим получить доступ для удаленного подключения.. я естественно никаких ip не знаю...
Что мешает спросить у тех. поддержки?

Цитата Сообщение от vadimnev Посмотреть сообщение
неужели нет возможности сделать регистрацию и авторизацию в программе на vb.net в удаленную базу данных
Можно. Указываешь в строке соединения IP адрес или DNS имя удаленного сервера и работаешь. Главное чтобы на стороне сервера были разрешены удаленные подключения и открыты порты на фаерволе. Всё это можно выяснить у тех. поддержки.
2
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
07.06.2015, 23:47
Лучший ответ Сообщение было отмечено vadimnev как решение

Решение

Цитата Сообщение от vadimnev Посмотреть сообщение
подключиться к удаленной бд из формы
Как вариант, в этой теме есть почти готовое решение вашей проблемы.
Смысл его в том, что приложение посылает ключ доступа не запросом к удаленной базе данных, а скрипту, который
принимает данные, осуществляет связь с БД, и возвращает результат в приложение.
Преимущества данного способа:
Не нужен белый IP, да и вообще никаких IP не нужно (вы ведь не можете знать IP пользователей вашего приложения)
Цитата Сообщение от OwenGlendower Посмотреть сообщение
на стороне сервера были разрешены удаленные подключения и открыты порты на фаерволе.
Этого тоже ничего не нужно т.к. базой управляет скрипт лежащий на сервере.

"Почти готовое" потому что надо немного подправить код скрипта для соответствия полям вашей БД и удалить лишнее
(у меня там используются 3 аргумента, а вам достаточно одного - ключа доступа).
1
10 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 4
08.06.2015, 09:22  [ТС]
Спасибо mrCrown!
Да, оказывается у меня изначально была ошибка с подходом к этой теме(( Я делаю первую программу для людей и не знал как правильно делать. А хостинг делает все правильно, в целях безопасности закрывают доступ к удаленному подключению.
Существует технология WEB API
Для тех кто столкнулся с такой-же проблемой, смысл заключается в следующем: создается пакет скриптов к которым обращаются клиентские приложения (Windows Forms, WPF, Silverlight), эти скрипты уже в свою очередь загружаются на сервер и работают с базой. В моем случае база данных MySql и ASP.NET не подходит, для сервера я использую PHP. ( очень хороший и работающий пример, связка PHP+MySql+VB.NET )

PHP скрипты работают точно так-же как с обычными формами на HTML, обычные методы GET POST, а в Windows Forms отправляются все данные из формы по ссылке с параметрами.

Думаю данный метод очень логичный и надежный.

P.S. А я когда локально работал с базой в самой Windows Forms, там даже подключения к базе толком нет, подключал через костыли (Устанавливал на машину MySql Connector потом уже появляется возможность работать с БД)

Но все равно всем спасибо за ответы и рекомендации! Всем удачной рабочей недели!
0
08.06.2015, 09:26

Не по теме:

нескромный вопрос... а при вылете программы у пользователя -получиться что ключ потерян ??? и как - делать программный сброс по таймингу на стороне хоста ???

0
10 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 4
08.06.2015, 11:20  [ТС]
Shadik, ну при вылете программы и даже если прямые запросы в базу будете делать, ключи будут теряться. Вообще критических ошибок лучше не допускать, обрабатывайте ошибки комбинацией try

Не думаю что по таймауту хороший подход сбрасывать ключи, допустим клиент открыл программу запустил и остановил сам, и через какое-то время у вас сбросится ключ. Думаю это не очень красиво по отношению к пользователю. Хотя я может и не прав, в Total Comander соединение по FTP сделано именно так, если программа не активна в течении какого-то времени соединение сбрасывает и необходимо коннектиться заново

P.S. Вообще думаю что в php есть функция timeout, вот первый попавшийся материал, в принципе можно использовать и stream_set_timeout() после какого-то времени запускать принудительное обнуление всех параметров какие вам необходимо обнулять.. Но тогда пользователь не сможет использовать Ваше приложение пока эта функия не сработает.

Если я ошибаюсь не судите строго я тоже начинающий разработчик, боевых приложений не писал, кто знает поправьте если я не прав. Любой критике и советам буду очень рад!
0
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
08.06.2015, 16:28
Цитата Сообщение от vadimnev Посмотреть сообщение
Думаю данный метод очень логичный и надежный.
Я посмеялся от души. Нет, не над Вами, а над тем, как порой люди легко заблуждаются и думают, что нашли хорошее решение.
Я ни в коем случае не пытаюсь никого задеть или как-либо оскорбить, напротив, хотелось бы уберечь от ошибок, поэтому прочитайте пожалуйста текст ниже...

vadimnev, я хотел бы просветить Вас относительно затеи с сервером и относительно того, что Вы посчитали этот вариант надежным. Не хочу Вас расстраивать, но к сожалению этот метод абсолютно ненадежный!
Сервера, передача ключей, всё это конечно хорошо, но не надежно. Более того, ломается за 5 минут. Я поясню как...
(прошу заметить, что я не являюсь профи крякером или реверсером, но опыт полученный в схожей сфере позволит мне без труда обойти эту защиту)

1. Запускаем программу и начинаем проходить процедуру получения ключа. Перед этим я запустил бы сниффер.
2. Перехватываем сниффером пост запрос, который отправляет Ваша программа на сервер и смотрим, что возвращает сервер (скрипт) в ответ.
3. Если код программы не обфусцирован, то вскрываем ее рефлектором.
4. Находим строку с адресом куда отправляется пост запрос на скрипт и ставим туда адрес на свой липовый сервер(обманку), на котором простенький скрипт, который всегда возвращает True (или что там у Вас отвечает сервер при удачной активации).
5. Считай дело в шляпе! Теперь, что не отправь, наш сервер-обманка всегда говорит программе, что все ок, всё True и кулЛ. Всё, программа взломана и может быть использована на любом количестве компьютеров, с любыми введенными ключами.

Второй вариант взлома.
Если на код программы накинут прот (обфускация, криптовка и прочий кряхтеж), то я бы даже не стал тратить свое время, пользоваться рефлектором и что-то там искать в коде и править. Я сделал бы проще. Нафиг мне сидеть дебажить километры запутанного и не читаемого кода? Есть вариант проще!
1. Так же перехватываем сниффером пост запрос, смотрим адрес скрипта.
2. Идем в файл хостс и прописываем адрес сервера Вашего скрипта, тем самым мы перенаправим пост запрос на локальный. На локалке кидаем тот же скрипт-обманку.
3. Запускаем программу, она за счет файла хостс отправляет пост запрос на мой локальный скрипт-обманку и дело в шляпе, программа опять взломана.

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

Подводя итог, могу сказать одно, что, если программа серьезная, то без обид, но вышеописанный метод защиты для школоты. Я не реверсер, но с момента запуска и до момента отвязки программы пройдет не более 10 минут, я ее взломаю.
Опытный реверсер снимет подобную защиту вовсе за несколько минут.

Но есть и хорошие новости. Защитить программу с помощью сервера всё же можно, но решение будет более сложным и я не буду его здесь описывать, дабы не давать пищу для ума тем же реверсерам и крякерам, хер им!
4
10 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 4
08.06.2015, 20:18  [ТС]
Спасибо за комментарий Дядя Корней!
Очень полезная инфа, я тоже думал на счет обфускации программы. Я пока не знаю как это делается, но думаю ничего сложного) Eще думал по мак адресу привязывать как-то программу к компу, но думаю по отношению к юзерам это не красиво будет, скорее всего у пользователя несколько устройств на котором пользователь будет использовать программу..
И не думаю что моя программа стоит чтобы ее взламывали, по поводу защиты я имел в виду что для сервера безопасно с одного файла получать запросы в базу чем с десятков или сотен IP адресов, или я ошибаюсь?
Я начинающий разработчик, это моя первая коммерческая программа, поэтому я рад любым комментариям и критике Так что все хорошо!
0
 Аватар для GSXL
172 / 180 / 27
Регистрация: 26.11.2011
Сообщений: 386
Записей в блоге: 1
09.06.2015, 09:45
Самый надежный вариант это post запросы с SSL вашему php скрипту который уже будет отвечать вашей программе в виде XML.
2
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
09.06.2015, 14:20
GSXL, SSL это как вариант усложнить крякеру работу минут на 5, но не вариант 100% защиты.
Объясню. Даже SSL не защитит, если у сервера нет добротного сертификата (обычно 98% пользователей его не делают, т.к. душит жаба его покупать). Если сертификата нет, то в противном случае я так же без особых усилий смогу вклиниться сниффером между сервером и программой, и снять траффик, несмотря даже на то, что " соединение защищенное".

Цитата Сообщение от vadimnev Посмотреть сообщение
Eще думал по мак адресу привязывать как-то программу к компу, но думаю по отношению к юзерам это не красиво будет, скорее всего у пользователя несколько устройств на котором пользователь будет использовать программу..
Если и надумаете, то привязка к маку не самый лучший вариант. Мак без особых усилий можно изменить, что даст еще одну дыру в защите Вашей программы.
Вязаться нужно к материнской плате + желательно захватить процессор.
В идеале привязываться к: Папка - Материнка - Проц. - МАК.
Но даже такая привязка оставит дырки для крякера.
Опять же не буду вдаваться в подробности, чтобы не облегчать им жизнь. Кто по настоящему хочет защитить свою программу думаю дойдет до всего сам, методом проб и ошибок.

Так же не стоит забывать про кейгены. Почаще используйте Using. Не храните строковые переменные в открытом виде. Всегда по возможности очищайте глобальные переменные. Делайте проверки важных переменных. Почаще разбивайте код на процедуры. Это частично затруднит взлом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2015, 14:20
Помогаю со студенческими работами здесь

Защита от повторного включения файла
Всем приятного дня ! Файл sada.hpp пытаюсь подключить несколько раз. сам файл sada.hpp реализован так #ifndef DEBUG ...

Защита от повторного логина из другого клиента.
Situatciya: User loginetsya v sistemy i esli kto-to khochet s grygogo clienta loginyt'sya s ego loginom to posilat' ego za vodkoj. Kak...

Защита программы от НСД. Защита путем шифрования части программы на флеш-диске или флешке
Написать программу на любом известном Вам языке программирования. Программа должна выполнять функцию защиты программы от НСД. Защита...

Как защитится от повторного запуска Service (защита от дурака)?
На вся кий случай хочу проставить защиту. Работает одновременно 4 сервиса и ситуаций когда к ним есть обращения, а когда нет куча. При...

Назвать и описать базовый модуль повторного использования
Назовите базовый модуль повторного использования в С#. Опишите его.


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru