Все из нас сталкивались с условно бесплатными программами не раз, в основном мы вводим регистрационный ключ, а что и как там далише работает остаётся только догадываться. Вот пришло время когда и мне понадобилось создать такую условно бесплатную программу. Мысль в следующем: - драйвер равотая напрямую с PCI шиной просматривает пространство устройств и по заданным, к примеру материнка винт и тд формирует несколько ключей. - программа по истечение бесплатного срока пользования коннектиться на сервер и смотрит есть ли такие ключи в базе. - есть - шифруем полную версию программы с использованием полученных ключей и передаём, пользователи запускает её при помощи небольшой заглушки через драйвер. - нет - после оплаты полной версии добавляются ключи в базу и попадаем на шаг выше. - если ключи совпадают частично 3 из 4 значит пользователь произвер апгрейд железа, добавляем новый ключ в базу и передаём новую версию программы. Так вот мне интересно мот кто знает основные принципы организации зашиты классических условно бесплатных программ, и на сколько работоспособна моя идея???
Судя из собственной практики построения защит - невзламываемых защит не бывает. Но чем круче защита, тем как правило, больше нужно времени чтобы ее взломать. Однако также растет количество геморроя, которое будут зарабатывать легальные пользователи. Потому нужно придерживаться золотой середины. Да и 90% попыток взломать Вашу программу будут ламерскими, типа: - удалить ключики в реестре, файлы, где программа хранит счетчик триала - пропатчить JZ/JNZ - перепродажа/выкладывание в свободный доступ серийников - установка купленного софта соседу, брату, другу и т.д. - сделать генератор серийников, если он уже встроен в программу - поменять hosts на свой сервер активации (это если ваша программа возвращает с сервера что то типа "ACTIVATED:OK" - купить, а потом потребовать деньги назад Остальные 10% атак будут, если ваш софт будет ОЧЕНЬ популярен =)
К серверу я считаю программе обращаться достаточно опасно - перехватить трафик можно не только программно (а от этого можно в драйвере защититься), но аппаратно (скажем подключить в качестве роутера свой собственный). Думаю имеет смысл использовать ассиметричное шифрование - в программе изначально уже есть открытый ключ, а секретный есть только у автора. Ну и автор что-то шифрует, а программа дешифрует.
никогда не ставил себе ПО, требующую для активации установку драйвера... мне кажется это подло))) вообще, мне кажется, что сейчас более-менее адекватная защита только та, что основана на "виртуальных машинах"... как VMProtect тот же... можно и самому попробовать реализовать нечто попроще чуток... то есть функционал проверки/генерации ключа нужно закрыть "виртуальной машиной", все равно надо будет - сломают, но хоть посложнее будет... нечто среднее между KAV и KIS))) даже как-то не по себе стало))))
skyproc Идея, в принципе, работоспособна... только необходимо еще продумать несколько аспектов, например: - механизм "попадания" ключей (идентификаторов компьютера) пользователя в вашу БД, уникальность этих ключей; - связанный с первым вопрос лицензирования (цифровая лицензия(файл) или как?); - обновление программы (рассылка зашифрованной (каждая со своим ключом) версии программы всем пользователям? зашифровка "на лету" при обращении пользователя) - имхо сервер ляжет(если юзеров много); - наличие инета (некоторые юзеры сидят без инета категорически в силу разных причин) - способ передачи полной версии прораммы без инета; - ...
На счет трафика KIV думаю стоит шифровать Rel устанавливать дрова не надо бут, есть один sys файл который приложение запустит, и он то напрямую с железом работает. вот пример листинга устройств: BUS-00 DEV-04 FUN-00 Nvidia Corp / nForce4 AC'97 Audio Controller BUS-00 DEV-06 FUN-00 Nvidia Corp / nForce4 Parallel ATA Controller BUS-00 DEV-07 FUN-00 Nvidia Corp / nForce4 Serial ATA Controller BUS-00 DEV-08 FUN-00 Nvidia Corp / nForce4 Serial ATA Controller BUS-00 DEV-09 FUN-00 Nvidia Corp / nForce4 PCI Bridge BUS-00 DEV-0A FUN-00 Nvidia Corp / nForce4 Ethernet Controller BUS-00 DEV-0B FUN-00 Nvidia Corp / nForce4 PCIe Bridge BUS-00 DEV-0C FUN-00 Nvidia Corp / nForce4 PCIe Bridge BUS-00 DEV-0D FUN-00 Nvidia Corp / nForce4 PCIe Bridge BUS-00 DEV-0E FUN-00 Nvidia Corp / nForce4 PCIe Bridge BUS-00 DEV-18 FUN-00 Advanced Micro Devices (AMD) / Athlon64/Opteron/Sempron (K8 Family) HyperTransport Technology Configuration BUS-00 DEV-18 FUN-01 Advanced Micro Devices (AMD) / Athlon64/Opteron/Sempron (K8 Family) Address Map BUS-00 DEV-18 FUN-02 Advanced Micro Devices (AMD) / Athlon64/Opteron/Sempron (K8 Family) DRAM Controller BUS-00 DEV-18 FUN-03 Advanced Micro Devices (AMD) / Athlon64/Opteron/Sempron (K8 Family) Miscellaneous Control BUS-01 DEV-08 FUN-00 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-01 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-02 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-03 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-04 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-05 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-06 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-01 DEV-08 FUN-07 Realtek Semiconductor / RT8139 (A/B/C/810x/813x/C+) Fast Ethernet Adapter BUS-05 DEV-00 FUN-00 ATI Technologies Inc / NONE BUS-05 DEV-00 FUN-01 ATI Technologies Inc / NONE А ниже моя прога, которая это выаодит и позволяет из под винды редактировать регистры устройств А на счет виртуальной защиты по моему слишком навёрнуто! gorodon - на счет уникальности ключей, ну если юзеру удастся таки добавить базу не свои ключи, ну сервер зашифрует программу а дров то на локальном хосте опять таки генерирует ключи через дров и дешифрует. - ну на счет обновления я думаю не ляжет, серв Linux Debian и прогу сервер пишу я же да и не думаю что будет такая нагрузка. - наличие инета, ну тут всё просто, софт ориентирован исключительно на сетевые технологии, без инета он никому не нужен!
почему же? я в деле защиты и взлома программ новичок. Интернет трафик на мой взгляд самое уязвимое место во всей системе защиты. Лучше, когда программа уже имеет в себе всё (фактически открытый ключ уже строго задаёт серийный номер, который надо ввести на конкретной машине, а вот попробуй узнай какой этот номер). К тому же данный вариант оставляет программу защищёной даже если исходники в свободном доступе (лишь бы не изменяли). Кстати, необходимость установки драйвера может некоторым пользователям и не понравиться. Хотя другого способа получить достоверную информацию об аппаратуре компьютера (чтобы нельзя было перехватить и подсунуть свои значения) вроде бы нет. Надеюсь вы правы. А то ведь гугловцы тоже рассуждают, что браузер без инета не нужен и следовательно можно сделать онлайн установщик для Google Chrome. А ведь они сильно ошибаются. Если приложение сетевое ещё не значет, что ему нужен интернет. Может хватить и локальной сети без доступа к внешнему миру (а браузер нужен даже если нет ни локальной сети, ни даже сервера на локальной машие). Кстати, возникла такая мысль про привязку к оборудованию. А что если запустить ОС на виртуальной машине? Ключ отсылать её, а потом любой сможет использовать программу на такой же виртуальной машине. Ведь если виртуальная машина не выдадет себя именами устройств и не содержит грубых ошибок, то обнаружить её присутствие из-под неё практически не возможно. Интересно, я первый, кто додумался до такой идеи обхода защит программ подобного рода?
Сделаете защиту непробиваемой- будут кардить, потеряете на штрафах за чарджбеки. Лучше займитесь самой программой, а то, зачастую, защита на высшем уровне, а сам продукт никому вообще не нужен.
Попробуй еще реализуй все вышеперечисленное без тормозов, все равно ничего от пропатчивания не спасет. Такими сверх мерами можно испортить программу - из-за этого люди просто не будут покупать её. Как реализуешь скинь потестить, тогда можно будет говорить об работоспособности идеи.
KIV,skyproc Зачем шифровать трафик? Вы планируете передавать зашифрованный файл(или часть файла - сегмент кода, например), ключ дешифрации известен только серверу и пользователю - при перехвате файла зоумышленником, ему это ничего не даст (ключа у него нет). В такой системе будут ломать драйвер, скорее всего. Сейчас многие защиты детектят виртуалки, это можно сделать и в юзермоде. К тому же, если в сетевой программе в качестве идентификатора-ключа использовать MAC-адрес(плюс к остальным параметрам) и постоянно на сервере мониторить MAC-адреса активных пользователей, то это тоже можно пресечь.
любая защита - это бред. Сломают. Подарят ключик другу. Выложат на общий доступ уже установленную программу, и так далее. Если ломают даже hasp-ключи и старфорс, сломают все остальное. Если будет в принципе неломаемой - заклеймят как отстой и найдут альтернативу )) но люди неизбежно придут к халяве
KIV Ну на счет виртуальной машины, тут тоже есть выход, хуки в ядре на API необходимые для неё, защита от отладки опять таки из ring0, я кстати научился делать неплохой сплайсинг api ядра. FatMoon любая защита - это бред. а ты не хочеш снять замок с входной двери??? Ни чё эт хорошо что защиты ломают, зато программерская мысль не спит!!!
Плюс к защите используй активацию через SMS, многим будет лень искать кряк или тем более ломать, если цена будет разумной.
Виртуальной машине как-то всё равно, что какое-то API похучили внутри ОС под ней. Ей даже всё равно какая ОС. Повлиять на работу виртуальной машины (достаточно стабильной и не предоставляющей возможностей на себя повлиять вроде "интеграции указателя") из неё нельзя. Определить её наличее - либо если она выдаёт себя именами устройств, либо ища какие-то ошибки эмуляции (какая-то инструкция ведёт себя не совсем так как на реальной машине. не реализована какая-то ошибка процессора). В моём случае ВМ нужна лишь для того, чтобы на любом реальном компьютере были одинаковые серийные номера всех устройств и конфигурация (потому что настройки ВМ и программа эмуляции одна и таже).
Универсальный способ взлома любой защиты, это полная перекомпиляция бинарного кода программы. Когда вы имеет на руках работоспособный ассемблерный код исходного бинарника, то вопрос снятия защиты становиться уже чисто техническим. То, что это возможно, я убедился в рекомпиляции дизассемблерного кода системной длл-ки comctl32.dll, размером более мегабайта. На исправление ошибок (порядка 1000) дизассемблирования мне хватило двух дней. И то, основная работа была чисто рутинной. Если написать несколько нужных скриптов, то процесс восстановления кода займет считанные минуты. Кстати, сам код дизассемблера (IdaPro v. 5.7 demo), можно получить с помощью самой «Иды». Правда, основная защита «Иды», заключается в отсутствии некоторого ключевого кода в демоверсии. Хотя для дизассемблирования многих программ можно прекрасно пользоваться демоверсией и копировать результат через буфер обмена. Т.е. я хочу сказать, что неплохой метод защиты это отсутствие ключевого кода в демоверсии. Хотя ничто не помешает легальному пользователю выложить рабочую версию программы в открытый доступ. Так было с «Идой» ранних версий. Когда, пользователи на форуме скидывались по рублю, покупали легальную версию, а затем выкладывали ее для всех участников данной акции . Главное, это просто соблюдать классический (универсальный) закон 20/80. Например, 80% всей работы делается в оставшиеся 20% времени (20%-ми сотрудников) или 20% людей владеют 80%-ми ресурсов и т.д. В нашем случае достаточно, чтобы 80% всех доходов от продажи «шароваров» нам приносили 20% легальных (ленивых или внушаемых) пользователей. Для этого достаточно тупой защиты, взламываемой с помощью Код (Text): bpx MessageBoxA Если же мы исходим из принципа: «жадность не порок» , то можем захотеть, чтобы нашу программу оплачивали 80% ее пользователей. Тогда да, можем использовать защиту на уровне Ильфака Гильфанова (разработчика «Иды») или даже выше. Но важно понимать, что в любом случае, 100% пользователей никогда не будут оплачивать наши «шаровары». Это как закон о недостижимости абсолютного нуля или там скорости света. Зато усилия на достижение лишнего процента легальных пользователей возрастают в экспоненциальной степени. Я, например, сейчас разрабатываю собственную программу, с которой в перспективе собираюсь иметь некоторый доход, по принципу публичного программирования. Т.е. не только никакой защиты, но и более того, полная публикация промежуточных результатов с исходным кодом на своем сайте и сайтах вроде sql.ru или codeproject.com. Тем самым я делаю себе рекламу, а зарабатывать можно на индивидуальных заказах и консультациях. Очень часто я сталкивался с ситуацией помочь установить, настроить и обучить работе с программой, которая полностью документирована и легка в использовании. Но народу, видите ли, трудно воспринимать письменный текст. Телевизор полностью отучил их читать, поэтому они понимают только устную речь . Да, таких ленивых только процентов 20. Но они и сейчас мне приносят 80% доходов .
Вроде я уже тут отвечал. Для обхода всякой защиты идеально подходят песочницы. Один экземпляр вашего приложения разойдётся по планете через теже торренты и никого не будет волновать как работает защита не понятно от чего.
ну если все-таки к защитам и доходам, то видится чуть ли не единственный вариант: модульный/обновляемый/поддерживаемый. Не знаю, как это называется на научном языке Суть: 1. Программа с минимумом функций и простейшей защитой типа регистрации ключом. Смиритесь с тем, что этот функционал скорее всего разойдется бесплатно, будет сломан или ключ передан в чужие руки много-много раз. Отсюда прибыли не ждем. 2. Обновления к программе получают только зарегистрированные пользователи. Ключ генерится при регистрации по железу, ответный ключ создается на вашем сервере. Люди без сети не смогут обновить программу. Попытка обновить программу с ключом, для которой уже есть регистрация (и сгенеренный у пользователя по железу ключ не совпадает), проваливается - пущай тот, кто первым зарегистрировался, письма шлет, с указанного при регистрации мыла. Скорее всего, сломают. Но не все, и не факт что быстро. 3. Подключаемые модули с новыми функциями распространяются по тому же принципу. Регистрацию нового модуля опять же через проверку 4. Техподдержка только регистрированным пользователям. Если программа будет востребована, так-таки купят. Если она будет сложной, и без 100 грамм не разберешься, и техподдержка потребуется - еще лучше. Оптимум сразу внедрить несколько ошибок в первый релиз, исправляемых потом обновлениями Учитесь у мелкомягких