Я в том смысле, какие способы и приемы эффективно использовать для защиты исходников на PHP?
К примеру, я создал программу серверную, и хочу, чтобы была помесячная оплата за использование скриптов, как сделать так, чтобы ее не ломанули... а то нулл версия мне как-то не очень нравится :D
Сразу оговорюсь, хочу услышать не стадо троллей, а реальные ответы, которые помогут или натолкнут на создание качественной защиты! Как известно, чем больше защиты, тем лучше, так что чем больше идей, тем более объемным ответ окажется для тех, кого интересует подобные вопросы!
Люди платят за качество, так что лучше бы время потратили на улучшение продукта, а не на защиту исходников, которые все равно сломают при необходимости.
Люди платят за продукт, а не за качество. И php-проекты (таковые существуют) можно также однонаправленно "скомпилировать" подобно бинарникам c++, которые "все равно сломать" не получится, читать as is как js min-файлы. И Zend Guard тому решение.
@cmx, компиляция в байт-код легко инвертируется. Да, потеряются имена переменных. Но это не проблема. Можно будет найти места, в которых срабатывает "DRM" и убрать его. Это вам не си++ и не ассемблер, где после компиляции получается каша, не поддающаяся качественной автоматизированной декомпиляции.
@KOLANICH найти возможно, вопрос - каких сил и времени это будет стоить исследователю. Так то и байт-код можно зареверсить. Понятное дело, что трудозатраты различны, однако это все равно не plain source.
@Fesor вы рассматриваете ситуацию, когда может быть защищен проект написанные например на symfony? Вы же понимаете, что закодировано будет все, и скорее всего большую часть в таком случае кода будет составлять совсем не проект? И zend guard - это не только и не столько обфускация.
@cmx, если у разработчика хватило тупости заэнкодить все - значит мне эта хрень нафиг не нужна. Обычно все эти извращения лепят на куски, которые проверяют факт наличия лицензии.
А на чем написан проект, на symfony или на чем другом - никакой разницы особо нету.
@Fesor видимо вы не сталкивались с подобными ситуациями. Например, эксплоит-диллеры используют подобные технологии, для того, чтобы позволить покупателю эксплуатировать какую-то уязвимость, и при этом не раскрыть сути самой уязвимости. Если бы у них "не хватило тупости" как вы говорите, то первый же покупатель мог бы выложить этот эксплоит сразу же после покупки за пол цены, или владелец уязвимой системы купит против себя сплоит, задетектить уязвимость и закрыть ее.
@cmx
>то первый же покупатель мог бы выложить этот эксплоит сразу же после покупки за пол цены, или владелец уязвимой системы купит против себя сплоит, задетектить уязвимость и закрыть ее.
Он и может так сделать, просто ему невыгодно так делать. Чем меньше людей знают об уязвимости, тем больше времени её не закроют.
>Вы же понимаете, что закодировано будет все, и скорее всего большую часть в таком случае кода будет составлять совсем не проект?
Это как плюс, так и огромный минус. Обфусцированный код фреймворка поможет в деобфускации вашего кода, ведь исходники фреймворка доступны, а идентифицировать его легко.
>Понятное дело, что трудозатраты различны, однако это все равно не plain source.
Интересен юридический аспект. Будет ли считаться реверс-ижиниренный код произведением того, кто его разреверсил, после чего он его сможет опубликовать под свободной лицензией?
@cmx, вопрос специфици и масштабов. В 99% случаев обфускцируется и прогоняется через всякие Zend Guard только логика проверки лиценции, и то все популярные решения легко ломаются. В остальных случаях, если мне попадется полностью обфусцированный продукт то скорее всего:
- продукт не представляет особой ценности и ему есть альтернативы
- продукт можно написать с нуля быстрее чем провести деобфускацию
@cmx, Вы наверное уже догадалиись, что те, кто захотят отреверсить, будут пользоваться не только своими руками, но ещё и своей головой и всем, чем ииим подсажет пользоваться их голова ;)
На сим дискуссию закрываю, так как она уже переходит в троллинг. Удачи вам в зарабатывании ваших $300 на анально огороженном коде.
@cmx, ценности конкретно для меня. Дискуссия действительно пустая. Я говорю со своей точки зрения, с точки зрения разработчика и пользователя. Вы же какие-то мифические штуки рассказываете, довольно специфичные и редко используемые.
Качественной защиты не будет. Если ваш продукт будет интересен кому-либо, его взломают и он рано или поздно появится на варезах разных.
Жадность это плохо, если хотите что бы люди реально покупали - делайте продукт как SaaS с возможностью купить отдельно для установки на локали. Либо можно бросить силы на поиски нуленых версий и просить удалить раздачи.
Да я не жадный ^_^> просто интересно заработать на хорошем продукте хотя бы по 1 доллару :) Я буду прав если скажу что это не деньги, а проект фактически Open Source, и за свои труды 1 доллар это просто смешно в наше время, разве я не прав? За 1 доллар программист согласиться поработать минут 15-20 от силы, не больше :)
@Andriyevski суть open source как раз таки в открытости исходников.
Если хотите заработать на нем и если проект действительно полезный, и им будут пользоваться, можно приложить чуть больше усилий и организовать hosted-solution, то есть что бы люди регались и юзали по подписке (как раз таки один два бакса в месяц). И им меньше гемороя, не нужно возиться и деплоить, и вам профит, и люди которым не лень повозиться будут рады.
Сам код ты никак не защитишь. В лучшем случае тебе помогут копирайты и лицензирование кода. Если тебя интересует защита от использования без лицензии, то есть один способ который я применял в своем проекте. Этот способ защищает не на 100% но может доставить гемороя тем кто решит использовать ваш продукт бесплатно. Оговорюсь так же что способ этот не всем может подойти.
Теперь собственно сам способ. Часть кода PHP без которого не будет работать ваш проект переносим на CGI написанный например на СИ++.
В CGI встраиваем проверку лицензии привязанную во первых к маку и IP сервера на котором будет работать проданный ресурс. Вторую часть проверки переносим на ваш сервер с лицензиями. То есть продукт при работе должен периодически (или при определенных операциях) проверять установленную лицензию которая вшита в CGI. При проверке ваш программный продукт обращается к серверу и отправляет ему шифрованную информацию о лицензии. По этой информации на вашем сервере определяются данные о сервере и так же шифрованно отправляются назад программному продукту. Тот сверяет эти данные с данными о сервере и если данные верны генерирует временный токен, который сохраняет в укромном месте вашего программного продукта и отправляет на ваш сервер с лицензиями. Для защиты от подмены данный о сервере, после успешной проверки отправляйте запрос на ip сервера вызывая определенную функцию CGI которая должна сопоставить токены. если совпадают, то лицензию проверял действительно программный продукт с сервера на который он зарегистрирован. При этом система должна автоматически обновляться с вашего сервера до последней версии и во время обновлений вам необходимо изменять методы шифрования. Так как CGI закрыт и внутри него содержатся важный для работы функционал, то удалить его или взломать будет проблематично. Возможно система запутанная и не лишена недостатков, но в работе показала себя неплохо.
С другой стороны вам правильно написали, что если ваш продукт будет интересен другим людям, то скорее всего его рано или поздно взломают, и указанная выше система в купе с постоянными обновлениями будет лишь доставлять временный геморой.
Не так. Хотите защитть свой код - арендуйте сервера и разместите на них, и создайте апи. А клиентам раздавайте свободную библииотеку по доступу к апи. Клиент платит, в результате получает доступ к функции, к самой новой версии.
И копирастии нет, и клииент доволен - автоматические обновления, плата только за фактическое использование, и вы - 99% защита вашего кода.
Мои предложения:
1. Зашифровать файл. Расшифруют, но не сразу, многим лень или не умеют, так что можно выиграть много времени
2. Замаскировать участок кода, проверяющий лицензию под другой скрипт (например сделать вид, что этот код работает с кэшем)
3. Можно вшить код проверки в какую-нибудь популярную библиотеку. К примеру написать код в глубине класса PHPExcel
4. Можно маленькую, но важную часть скрипта перенести на свой сервер. Тогда юзер врядли сможет бесплатно полноценно использовать вашу программу
5. Есть вариант обфусцировать код
Если скомбинировать некоторые варианты, то получится довольно трудная для взлома защита
Я подобную задачу просто решил, зашифровал файл проверяющий ключи в base64 через сервис visavi.net/services/encryption.php. Расшифровать не трудно, но нужно не много подумать. Покупатели были новички в программировании, поэтому ~1.5 года скрипт был в целости и сохранности.
Ключ кстати просто генерировался из домена :D
Для платных программ обязательно надо делать хотя бы минимальный уровень защиты, иначе можно потерять вообще всю прибыль. Чем хитрее защита, тем дольше скрипт будет в сохранности
@Andriyevski, спасибо ) Кстати, если всё таки скрипт попал в общий доступ, пустите плохие слухи, сделайте так, что бы пользователи боялись скачивать его бесплатно. Зарегистрируйтесь под другими никами и пишите одну и туже историю взлома, нападения вирусов или кражи данных от разных людей, которые якобы решили схитрить и не покупать программу, свалите причину на тех, кто выложил в бесплатный доступ в корыстных целях. Главное, что бы не подумали, что это сам оригинал скрипта дырявый.
Все же я напишу серверную часть, а пользователю дам как бы пользовательскую часть, которая будет взаимодействовать с моим сервисом на моем сервере! Так будет куда лучше... Если потрачу много времени на защиту кода, проект станет просто грузом при подальшем развитии проекта, сложнее будет разбираться в нем! Так что всем огромное спосибо за ваш вклад в мой будущий проект :)
Ну это уже лучше. Тут сложно давать консультации, так как не понятен проект. Где то лучше SaaS, где то клиент - серверное решение, а где то просто сервер лицензий :)
Обфускация. Пишится синтаксический анализатор PHP, затем выпиливаются комментарии, имена переменных и функций и классов заменяются на a1,b2,c3, код сжимается в одну строку. Почти уверен что уже есть куча готовых решений для этого. В крайнем случае несложно написать свой обфускатор.
Как посоветовали однажды создателю Simpla CMS, не защищай код. Подумай лучше как продвигать CMS так, что бы получить максимальную выгоду от пиратских копий. Ну т.е. развивайся так, что бы тебе было на руку то, что твою прогу везде можно скачать и т. д.
Можно использовать ionCube, Zend для более сильной защиты. Обфускация может защитить ваш скрипт от обычных пользователей. Эти способы могут потянуть время. За это время необходимо дорабатывать свой продукт и как можно чаще выпускать обновления. Если обновления будут выходить часто, то пока покупатели взломают скрипт, он уже будет неактуален, так как выйдет новая версия.