исходные данные: есть практически готовое ПО которое нужно передать заказчику. Есть подозрение что заказчик может обломить с оплатой. Нужно что бы ПО проработало дня три и начало выдавать окошко "не забудьте оплатить" с закрытием. Вопрос - как технически осуществить эту задачу?
ПО будет работать на компе с ХП (базы данных), в среде с ограниченными правами, пользоваться будет продвинутый юзер владеющий реестровым и файловыми мониторами. следовательно отпадают варианты :
1) тупо ограничить по системной дате - меняем дату и прога снова работает
2) вар.1 + прописать ключик в реестр и проверять его наличие -если дата наступила - ключик прописан, переводи время не переводи - отказ. легко отслеживается рег монитором.
3) вар 1 +2 + писать файлик куда нибудь и проверять его наличие. отслеживается файловым монитором.
Имеет ли задача решение, как вообще грамотно это делается?
[Ответ]
Yandex 13:16 02.04.2009
][irurg, все предложенные варианты не сильно надежны. Такую защиту могла бы сломать моя знакомая, которая курсы по взлому заочно закончила. При этом она далеко не компьютерный гурь.
Если есть опасения, то лучше предоплату просить или договор заключать.
[Ответ]
AleksandrD 13:21 02.04.2009
Сообщение от ][irurg:
ПО будет работать на компе с ХП (базы данных)
БД какая? Защита в ней есть?
Если да, то можно в бд где-нибудь прописать дату передачи проги и считать ее время работы, ориентируясь "+3" к этой дате.
Или, как обычно делают, тестовая БД ограничена по числу записей
[Ответ]
][irurg 14:11 02.04.2009
Сообщение от Yandex:
][irurg, все предложенные варианты не сильно надежны
да, понимаю, поэтому написал
Сообщение от ][irurg:
следовательно отпадают варианты
Сообщение от AleksandrD:
БД какая? Защита в ней есть?
БД аксессовская, mdb. не изучал признаться ее на предмет защит, пароль там есть точно )
Сообщение от AleksandrD:
Или, как обычно делают, тестовая БД ограничена по числу записей
верификацию через свой сервер мути, точно тебе говорю[Ответ]
Part!zan 19:39 02.04.2009
Сообщение от AleksandrD:
можно в бд где-нибудь прописать дату передачи проги и считать ее время работы, ориентируясь "+3" к этой дате
Сообщение от AleksandrD:
тестовая БД ограничена по числу записей
Ломается влет.
Сообщение от xxx-men:
верификацию через свой сервер мути
Ничем не лучше предложенных выше.
Если полноценное приложение программно ограничено в работоспособности - это ограничение всегда можно снять.
Реально рабочие варанты - это поставлять неполноценное приложение, то есть приложение, в котором отсутствует какая-нть важная функция, не влияющая однако на процесс работы. Например, сохранение результатов. Восстановить отсутствующую фичу можно либо тупо отдав другой ехешник после оплаты (самый простой способ), либо сделать доп. модуль (dll, например), который будет выполнять нужную функцию, либо, самый сложный способ, зашифровать в теле проги нужный код и расшифровывать его специальным ключом, естессно, шифрование xor'ом тут не попрет )
[Ответ]
][irurg 23:19 02.04.2009
Сообщение от xxx-men:
верификацию через свой сервер мути, точно тебе говорю
признаться не понял о чем речь, не поясните?
Сообщение от Part!zan:
еально рабочие варанты - это поставлять неполноценное приложение, то есть приложение, в котором отсутствует какая-нть важная функция,
разумная мысль. но желательно что бы пару тройку дней прога поработала полноценно - хотя бы для вылавливания багов "реальных условий"
Сообщение от Part!zan:
Например, сохранение результатов.
думал об этом. но ведь смысл БД в сохранении/выдаче информации, работоспособность без этого не показать - следовательно прогу просто не примут.
Сообщение от Part!zan:
зашифровать в теле проги нужный код и расшифровывать его специальным ключом,
как привязать к этому ограничение по времени?
пока имхо лучшая идея - ограничить число записей с которыми может работать прога. с трудом представляю как опытный юзер ее взломает -дебажить soft ice? но блокировок-переходов можно поставить несколько в неожиданных местах, замучается. хакера не остановит но защищаемся не от него. + можно совместить с примитивными из первого поста.
[Ответ]
Yandex 09:25 03.04.2009
][irurg, как вариант - после трех дней юзанья включается рандом и прога чаще начинает косячить
Верификация через свой сервер: думаю имелось в виду, то что при старте прога лезет через инет на твой сервер, спрашивает разрешения у него на запуск. Если запуск не разрешен или сервер не доступен, то прога закрывается, иначе работает в обычном режиме.
[Ответ]
Andrew_80 09:46 03.04.2009
][irurg, твой 3 вариант не такой уж и безнадежный...только его надо слегка модифицировать. файл с зашифрованной датой создания можно создавать не при первом запуске, а в процессе инсталляции. а при отсутствии этого файлика пусть программа вообще отказывается работать
[Ответ]
AleksandrD 12:25 03.04.2009
Сообщение от Part!zan:
Ломается влет.
Читаем дано:
Сообщение от ][irurg:
ПО будет работать на компе с ХП (базы данных), в среде с ограниченными правами, пользоваться будет продвинутый юзер владеющий реестровым и файловыми мониторами
Если "этим" можно взломать предложенное - я желаю на этот цирк посмотреть. :-)
Не надо плодить сущности, я так понял приложение небольшое, недорогое, нетиражируемое и написание предложенной Вами защиты на него обойдется дороже по времени, чем просто подарить его клиенту. Клиент защиту-то не оценит и платить за ее разработку не будет :-)
[Ответ]
][irurg 13:21 03.04.2009
Сообщение от Andrew_80:
файл с зашифрованной датой создания можно создавать не при первом запуске, а в процессе инсталляции. а при отсутствии этого файлика пусть программа вообще отказывается работать
в принципе этот вариант похож на
Сообщение от ][irurg:
прописать ключик в реестр
Сообщение от AleksandrD:
можно в бд где-нибудь прописать дату передачи проги и считать ее время работы
самое интересное тут - шифрация. к примеру решу разместить дату в БД,она тут аксессовская. ее защизать паролем бессмысленно - софта для взлома прг офиса тьма. открывает юзер базу и править ключ. если он поймет идею шифрации - ну например +1 к каждой цифре даты - значит сможет бесконечно проделвать ее. надо хранить дату так что бы алгоритм был сложен, может быть есть какие то стандартыне решения?хеш мд5 наверно или наподобие, с закрытым ключом зашитым в проге
Сообщение от AleksandrD:
Клиент защиту-то не оценит и платить за ее разработку не будет :-)
вряд ли - но ход мыслей мне нравится :-)
Сообщение от AleksandrD:
так понял приложение небольшое, недорогое, нетиражируемое и написание предложенной Вами защиты на него обойдется дороже по времени, чем просто подарить его клиенту
все верно, но интересено решение в виде модуля которое смогу лепить потом без проблем к любой проге, ибо давно беспокоит этот вопрос.
[Ответ]
xxx-men 13:42 03.04.2009
ну если зашивать куда нибуть пусть даже шифрованную дату, это разве может помочь от тупо перевода часов?
[Ответ]
AleksandrD 14:20 03.04.2009
Сообщение от ][irurg:
самое интересное тут - шифрация. к примеру решу разместить дату в БД,она тут аксессовская. ее защизать паролем бессмысленно - софта для взлома прг офиса тьма. открывает юзер базу и править ключ
Если найдет. :-)
Есть системные таблицы, типа MSysObjects, которые в обычном режиме не видны и структуру которых юзер не знает и что делать с ними тоже. В них можно как добавить свое поле с датой, так и внести "левую" запись со своими данными. Искать - обыскаться :-)
Можно создать свою таблицу ,назвав ее USys[чего-нить]. С таким названием таблица также будет не видна юзеру и чтобы найти ее, надо бы знать что ищешь
Сообщение от xxx-men:
ну если зашивать куда нибуть пусть даже шифрованную дату, это разве может помочь от тупо перевода часов
Проверку сделать что текущее время не может быть меньше "вшитой даты", а если больше, то работает как +n дней к ней
[Ответ]
shuri 19:05 03.04.2009
А программа на чем написана? Или то же access? надеюсь не в формате mdb ? И какое направление, если не секрет, т.е. бухгалтерия, учет, или что-то спецфическое?
[Ответ]
alexz 22:20 03.04.2009
если нужно чтобы прямо нереально взломать, часть функций выносишь на свой сервер. ну, скажем, делаешь dll-ку с этими функциями. И ещё одну dll-ку, которая импортирует те же функции, но просто связывается с сервером, передаёт параметры и отдаёт обратно результат. Когда оплатит, заменяешь "сетевую версию" на нормальную.
[Ответ]
Part!zan 22:46 03.04.2009
Сообщение от AleksandrD:
Если "этим" можно взломать предложенное - я желаю на этот цирк посмотреть
Если ПО будет в полном распоряжении заказчика, то запустить он его может на чем угодно и изучать как угодно. К тому же, где гарантия, что заказчик не найдет человека, готового сломать прогу просто ради любви к искусству?
Сообщение от AleksandrD:
написание предложенной Вами защиты на него обойдется дороже по времени
Самый сложный вариант, с шифрованием, можно сделать за пару-тройку дней.
Сообщение от AleksandrD:
Клиент защиту-то не оценит и платить за ее разработку не будет
Вообще-то защита нужна для защиты интересов автора, а не ублажения клиента, это такое же вложение средств, как и приобретение ПО разработки. Так что, аргумент, по меньшей мере, странный...
Сообщение от ][irurg:
желательно что бы пару тройку дней прога поработала полноценно
Как вариант - через пару тройку дней прога удаляет свой компонент/ключ, но это не вполне надежный вариант. Хотя, можно разработать шифрование с ограниченным ключом, который просто перестанет работать после определенного события.
Как простой вариант защиты от продвинутого юзера - сделать в реестре хотя бы десяток ключей, в которых хранить дату. Причем места для хранения выбирать самые неожиданные, но правдоподобные. Тут никакой монитор не поможет. Также, для скрытия можно использовать технологию создания невидимых ключей в реестре, ntfs потоки, protected storage. Но против грамотного хакера все это бесполезно.
Сообщение от alexz:
просто связывается с сервером, передаёт параметры и отдаёт обратно результат
Это хостинг надо поиметь, настроить его и разработать протокол общения. Про то, что на компе без инета это вообще не будет работать даже и не говорю...
[Ответ]
AleksandrD 19:08 04.04.2009
Сообщение от Part!zan:
К тому же, где гарантия, что заказчик не найдет человека, готового сломать прогу просто ради любви к искусству?
C таким же успехом можно предположить, что у него есть штатный хакер, взламывающий Bluefish "ради любви к искусству". Еще раз - не надо плодить сущности.
Сообщение от Part!zan:
Вообще-то защита нужна для защиты интересов автора, а не ублажения клиента, это такое же вложение средств, как и приобретение ПО разработки. Так что, аргумент, по меньшей мере, странный...
Еще раз - кто заплатит за разработку защиты, если ПО стоит, к примеру 10.000 руб, а защита - 30.000 руб? Повторю - ПО под клиента, не тиражируемое.
Сообщение от Part!zan:
Самый сложный вариант, с шифрованием, можно сделать за пару-тройку дней.
Я, как старый 1с ник, рассматриваю свое время у заказчика как 1000 руб/час. Пара-тройка дней, говорите? :-)
Сообщение от Part!zan:
Как простой вариант защиты от продвинутого юзера - сделать в реестре хотя бы десяток ключей, в которых хранить дату.
Как раз "раз плюнуть" для юзера с regmon в руках :-)
[Ответ]
Part!zan 01:55 05.04.2009
Сообщение от AleksandrD:
не надо плодить сущности
Надо рассчитывать на худший вариант, а не надеяться, что юзер дурак и сойдет и так.
Сообщение от AleksandrD:
а защита - 30.000 руб
Где вы такие цены-то берете? Автор и сам может разработать такую защиту, если грамотно к делу подойдет и обойдется ему это гораздо дешевле. Тем более, речь шла об возможном повторном использовании.
Сообщение от AleksandrD:
рассматриваю свое время у заказчика как 1000 руб/час
Мы же не про ваши расценки говорим, верно? Говорим про топикстратера, а как он свое время ценит и считает ли его нужным потратить на разработку защиты - это его дело.
Сообщение от AleksandrD:
"раз плюнуть" для юзера с regmon в руках
Рискну не согласиться, я легко напишу подобное приложение, которое "с регмоном в руках" будет ломаться ооочень долго, если вообще сломается.
[Ответ]
AleksandrD 11:22 05.04.2009
Сообщение от Part!zan:
Надо рассчитывать на худший вариант, а не надеяться, что юзер дурак и сойдет и так.
Для худшего варианта есть договор, а не попытки доказать чей хакер хакеристее.
Сообщение от Part!zan:
Где вы такие цены-то берете? Автор и сам может разработать такую защиту, если грамотно к делу подойдет и обойдется ему это гораздо дешевле.
Автор сам? А деньги за эту "самость" кто ему платить будет? Да и сомневаюсь я в неломучести защиты, написанной за "пару-тройку дней" без знания вопроса.
Сообщение от Part!zan:
Говорим про топикстратера, а как он свое время ценит и считает ли его нужным потратить на разработку защиты - это его дело.
Тут согласен.
Сообщение от Part!zan:
я легко напишу подобное приложение, которое "с регмоном в руках" будет ломаться ооочень долго
Приложение, делающее, по Вашим словам сделать в реестре хотя бы десяток ключей, в которых хранить дату. Причем места для хранения выбирать самые неожиданные, но правдоподобные. Тут никакой монитор не поможет
и эти места с regmon не засечь? Что же, раз это так легко - ждем-с :-) Пусть оно даже больше ничего не делает :-)
[Ответ]
Part!zan 19:22 05.04.2009
Сообщение от AleksandrD:
для худшего варианта есть договор
Договор это тоже не панацея.
Сообщение от AleksandrD:
за эту "самость" кто ему платить будет
Объясняю второй раз: разработка защиты это защита себя любимого и делается она для себя. Предлаете платить самому себе деньги? Это точно такое же вложение денег в средства производства, как покупка компа, например.
Сообщение от AleksandrD:
эти места с regmon не засечь
Засечь-то их регмон засечет... Но как их отличить от массы других параметров, создаваемых, удаляемых и изменяемых во время работы программы? Причем ничто не мешает увеличить число этого мусора в несколько раз. И искать в нем с помощью регмона можно ооочень долго, а если предпринять определенные меры по восстановлению найденных пользователем и убиенных ключей, то задача вообще становится практически невозможной. Проще сломать код программы, чем искать все эти ключи.
[Ответ]
AleksandrD 23:55 05.04.2009
Сообщение от Part!zan:
Договор это тоже не панацея.
Да ничего не панацея. Если кому-то будет надо - сломают, особенно доморощенную защиту. Крупные софтописательские конторы тратят кучу бабла на защиту - и результат либо ноль, либо работать конечному пользователю весьма и весьма неудобно - Страфорсы, сервера защиты, хасп ключи и прочая лабудень.
Сообщение от Part!zan:
Объясняю второй раз: разработка защиты это защита себя любимого и делается она для себя.
Объясняю в третий раз :-) - прога одноразовая, написанная под конкретного клиента. Разработка защиты на окупится. Если же топикстартер планирует в дальнейшем заниматься написанием софта на продажу - возможно и имеет смысл, но никак не на связке VB+Access
Сообщение от Part!zan:
Засечь-то их регмон засечет... Но как их отличить от массы других параметров, создаваемых, удаляемых и изменяемых во время работы программы? Причем ничто не мешает увеличить число этого мусора в несколько раз. И искать в нем с помощью регмона можно ооочень долго, а если предпринять определенные меры по восстановлению найденных пользователем и убиенных ключей, то задача вообще становится практически невозможной. Проще сломать код программы, чем искать все эти ключи.
Что же за привычка-то такая - ради все равно мнимой защиты гадить в комп конечному пользователю. :-) В общем, как и ожидалось, никакой "технологии создания невидимых ключей" мы не увидим, максимум - напихать в реестр кучу параметров, надеясь, что пользователь не разберется. То что при этом снижается производительность, фрагментируется реестр - никому не интересно. И чем это собственно отличается от от предложения пхать это в БД? :-)
[Ответ]
][irurg 09:19 06.04.2009
Сообщение от shuri:
А программа на чем написана? Или то же access? надеюсь не в формате mdb ? И какое направление, если не секрет, т.е. бухгалтерия, учет, или что-то спецфическое?
специфическое, расчетно-проектное. прога как уже было сказано VB+Access. но что то подобное нужно и для связки си+дбф.
Сообщение от alexz:
если нужно чтобы прямо нереально взломать, часть функций выносишь на свой сервер. ну, скажем, делаешь dll-ку с этими функциями. И ещё одну dll-ку, которая импортирует те же функции, но просто связывается с сервером, передаёт параметры и отдаёт обратно результат. Когда оплатит, заменяешь "сетевую версию" на нормальную.
идея интересеная и красивая, но к сожалению на целевом компе нет и не будет инета.
попробую подвести итог обсуждения алгоритмом шифрования
1. заводим в целевой базе системную таблицу USysP
2. активация - в модуле указываем два ключа шифрования и число разрешенных запусков (ЧРЗ).
3. первый ключ используем для создания избыточности - увеличиваем размер строки ЧРЗ например до 50 случ символами, раполагая ЧЗР на позиции указанной в ключе. второй используем для XOR - что бы окончательно запутать )
4. отдаем прогу.
5. при запуске извлекаем шифрованную дату и проводим обратную процедуру -вычленяем ЧРЗ, ксорим если цифр > 5 & <0 уходим. иначе -1 .
от даты отказался потому что имхо xxx-men прав
Сообщение от xxx-men:
ну если зашивать куда нибуть пусть даже шифрованную дату, это разве может помочь от тупо перевода часов?
идеи
Сообщение от AleksandrD:
Проверку сделать что текущее время не может быть меньше "вшитой даты", а если больше, то работает как +n дней к ней
не понял. например сегодня 6,04 прячем, n=3 . при извлечении если 5,4 - вырубится,
если 10,04 - вырубится. а если всю неделю 7,04 :-) ? нужно записывать вчерашнюю дату, проверять - проще число запусков ограничить
ЗЫ кстати а нет ли тут в запросах sql шифрования? в MSSQL есть HashBytes(), в MySQL md5(), а нет ли чего подобного тут?
[Ответ]
AleksandrD 10:14 06.04.2009
Сообщение от ][irurg:
не понял. например сегодня 6,04 прячем, n=3 . при извлечении если 5,4 - вырубится,
если 10,04 - вырубится. а если всю неделю 7,04 :-) ? нужно записывать вчерашнюю дату, проверять - проще число запусков ограничить
Использовать DateTime, который перезаписывать во время работы программы, каждую минуту, к примеру.
А с числом запусков можно нарваться, если компьютер и, соответственно программу не выключать вообще. Тогда надо как-то еще ограничить время непрерывной работы программы.
[Ответ]
Сообщение от AleksandrD:
при этом снижается производительность, фрагментируется реестр - никому не интересно
Конечно, не интересно. 21-й век уж давно... Компы перешагнули гигагерцы и гигабайты. Масса программ используют такой прием - и ниче, никто не умер. Не говорю, что это хорошо, но оно работает. Есть гораздо более "грязные" методы защиты...
Сообщение от AleksandrD:
прога одноразовая, написанная под конкретного клиента. Разработка защиты на окупится
Сообщение от ][irurg:
интересено решение в виде модуля которое смогу лепить потом без проблем к любой проге, ибо давно беспокоит этот вопрос.
Надеюсь, теперь-то понятно?
Сообщение от AleksandrD:
"технологии создания невидимых ключей" мы не увидим
Марк? Русинович? Какими судьбами на этом форуме? А говорили ты мелкомягким продался за тридцать сребренников. :-)
Это я к чему:
1. Утилита написана не Вами, хотя и декларировалось, что "я легко напишу подобное приложение"... или это Ваша? :-)
2. Если бы Вы потрудились почитать "матчасть" к данной утили, что поняли бы, что Русиновическим же regmon действия reghide отслеживаются на раз
Сообщение от Part!zan:
Тем, что в БД найти странное будет проще, чем в реестре.
А то что запросы к БД отследить значительно сложнее и, соответственно, понять что, как и зачем там делается Вам в голову не пришло? :-)
П.Ц. Добрый совет - прежде чем вступать в спор, пожалуйста, не забывайте, что в разделе форума "Программирование" все-таки собираются люди, знакомые с тематикой ;-)
[Ответ]
Я, конечно, не шибко большой спец в криптографии, но просто интересно, чем плох подход с использованием родного CryptoAPI винды и сертификатов? Заказчик формирует запрос на выпуск сертификата, передает вам, вы выпускаете сертификат с нужным сроком действия. Ломать это добро долго и скучно. Я бы не взялся.
[Ответ]
AleksandrD 10:32 07.04.2009
MadFish, Идея хорошая (хотя сам не пробовал), просто топикстартеру в данном конкретном случае нужно несколько иное. Но для дальнейшей коммерческой продажи можно действительно не изобретать велосипеды в защите, а воспользоваться готовым встроенным решением, по крайней мере под win.
[Ответ]
Part!zan 22:15 08.04.2009
Сообщение от AleksandrD:
Не приведете ли десяток-другой из общеупотребительных
Про ASProtect слышали чего-нть? Почитайте гугл, поможет...
Сообщение от AleksandrD:
Утилита написана не Вами
Естессно, я нигде не говорил, что она моя.
Сообщение от AleksandrD:
декларировалось, что "я легко напишу подобное приложение"
Естессно, легко напишу. Но решил продемонстрировать простой, уже написанный пример.
Сообщение от AleksandrD:
regmon действия reghide отслеживаются на раз
Естественно! Вы либо прикидываетесь, либо просто чего-то не понимаете. Либо не пожелали понять. Этот ключ нельзя убить и посмотреть его нельзя. К тому же, программа, да еще и на VB, да еще и работающая с БД, генерит такой лог всяческих обращений к реестру, что копаться в нем можно до второго пришествия, выискивая нужный ключ. В этом и заключается смысл. Спрятать ключ в мусоре. Почитайте уже что-нть по защите информации, не позорьтесь... Или сломайте хоть одну программу...
Сообщение от AleksandrD:
запросы к БД отследить значительно сложнее
Да что вы говорите... А мужики-то и не знают...
Сообщение от AleksandrD:
прежде чем вступать в спор, пожалуйста, не забывайте, что в разделе форума "Программирование" все-таки собираются люди, знакомые с тематикой
Same to you... У меня опыта хватает не только на прятание заксоренной даты в БД...
Сообщение от MadFish:
чем плох подход с использованием родного CryptoAPI винды и сертификатов
Ничем не плох, но хочется людям попроще... Они даже protected storage использовать не хотят...
[Ответ]