Защита условно бесплатного ПО

Тема в разделе "WASM.WIN32", создана пользователем skyproc, 24 авг 2010.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Все из нас сталкивались с условно бесплатными программами не раз, в основном мы вводим регистрационный ключ, а что и как там далише работает остаётся только догадываться.

    Вот пришло время когда и мне понадобилось создать такую условно бесплатную программу.
    Мысль в следующем:
    - драйвер равотая напрямую с PCI шиной просматривает пространство устройств и по заданным, к примеру материнка винт и тд формирует несколько ключей.
    - программа по истечение бесплатного срока пользования коннектиться на сервер и смотрит есть ли такие ключи в базе.
    - есть - шифруем полную версию программы с использованием полученных ключей и передаём, пользователи запускает её при помощи небольшой заглушки через драйвер.
    - нет - после оплаты полной версии добавляются ключи в базу и попадаем на шаг выше.
    - если ключи совпадают частично 3 из 4 значит пользователь произвер апгрейд железа, добавляем новый ключ в базу и передаём новую версию программы.


    Так вот мне интересно мот кто знает основные принципы организации зашиты классических условно бесплатных программ, и на сколько работоспособна моя идея???
     
  2. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    скажите пожалуйста, что еще не взломано ?
     
  3. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Судя из собственной практики построения защит - невзламываемых защит не бывает. Но чем круче защита, тем как правило, больше нужно времени чтобы ее взломать. Однако также растет количество геморроя, которое будут зарабатывать легальные пользователи. Потому нужно придерживаться золотой середины.

    Да и 90% попыток взломать Вашу программу будут ламерскими, типа:
    - удалить ключики в реестре, файлы, где программа хранит счетчик триала
    - пропатчить JZ/JNZ
    - перепродажа/выкладывание в свободный доступ серийников
    - установка купленного софта соседу, брату, другу и т.д.
    - сделать генератор серийников, если он уже встроен в программу
    - поменять hosts на свой сервер активации (это если ваша программа возвращает с сервера что то типа "ACTIVATED:OK"
    - купить, а потом потребовать деньги назад

    Остальные 10% атак будут, если ваш софт будет ОЧЕНЬ популярен =)
     
  4. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    К серверу я считаю программе обращаться достаточно опасно - перехватить трафик можно не только программно (а от этого можно в драйвере защититься), но аппаратно (скажем подключить в качестве роутера свой собственный). Думаю имеет смысл использовать ассиметричное шифрование - в программе изначально уже есть открытый ключ, а секретный есть только у автора. Ну и автор что-то шифрует, а программа дешифрует.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    никогда не ставил себе ПО, требующую для активации установку драйвера... мне кажется это подло)))

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

    нечто среднее между KAV и KIS))) даже как-то не по себе стало))))
     
  6. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    skyproc
    Идея, в принципе, работоспособна... только необходимо еще продумать несколько аспектов, например:
    - механизм "попадания" ключей (идентификаторов компьютера) пользователя в вашу БД, уникальность этих ключей;
    - связанный с первым вопрос лицензирования (цифровая лицензия(файл) или как?);
    - обновление программы (рассылка зашифрованной (каждая со своим ключом) версии программы всем пользователям? зашифровка "на лету" при обращении пользователя) - имхо сервер ляжет(если юзеров много);
    - наличие инета (некоторые юзеры сидят без инета категорически в силу разных причин) - способ передачи полной версии прораммы без инета;
    - ...
     
  7. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    На счет трафика 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 и прогу сервер пишу я же да и не думаю что будет такая нагрузка.
    - наличие инета, ну тут всё просто, софт ориентирован исключительно на сетевые технологии, без инета он никому не нужен!
     
  8. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    почему же? я в деле защиты и взлома программ новичок.

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

    Надеюсь вы правы. А то ведь гугловцы тоже рассуждают, что браузер без инета не нужен и следовательно можно сделать онлайн установщик для Google Chrome. А ведь они сильно ошибаются. Если приложение сетевое ещё не значет, что ему нужен интернет. Может хватить и локальной сети без доступа к внешнему миру (а браузер нужен даже если нет ни локальной сети, ни даже сервера на локальной машие).

    Кстати, возникла такая мысль про привязку к оборудованию. А что если запустить ОС на виртуальной машине? Ключ отсылать её, а потом любой сможет использовать программу на такой же виртуальной машине. Ведь если виртуальная машина не выдадет себя именами устройств и не содержит грубых ошибок, то обнаружить её присутствие из-под неё практически не возможно. Интересно, я первый, кто додумался до такой идеи обхода защит программ подобного рода?
     
  9. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Сделаете защиту непробиваемой- будут кардить, потеряете на штрафах за чарджбеки. Лучше займитесь самой программой, а то, зачастую, защита на высшем уровне, а сам продукт никому вообще не нужен.
     
  10. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Попробуй еще реализуй все вышеперечисленное без тормозов, все равно ничего от пропатчивания не спасет. Такими сверх мерами можно испортить программу - из-за этого люди просто не будут покупать её. Как реализуешь скинь потестить, тогда можно будет говорить об работоспособности идеи.
     
  11. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    KIV,skyproc
    Зачем шифровать трафик? Вы планируете передавать зашифрованный файл(или часть файла - сегмент кода, например), ключ дешифрации известен только серверу и пользователю - при перехвате файла зоумышленником, ему это ничего не даст (ключа у него нет).
    В такой системе будут ломать драйвер, скорее всего.

    Сейчас многие защиты детектят виртуалки, это можно сделать и в юзермоде.
    К тому же, если в сетевой программе в качестве идентификатора-ключа использовать MAC-адрес(плюс к остальным параметрам) и постоянно на сервере мониторить MAC-адреса активных пользователей, то это тоже можно пресечь.
     
  12. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    любая защита - это бред. Сломают. Подарят ключик другу. Выложат на общий доступ уже установленную программу, и так далее. Если ломают даже hasp-ключи и старфорс, сломают все остальное. Если будет в принципе неломаемой - заклеймят как отстой и найдут альтернативу :))) но люди неизбежно придут к халяве
     
  13. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    KIV Ну на счет виртуальной машины, тут тоже есть выход, хуки в ядре на API необходимые для неё, защита от отладки опять таки из ring0, я кстати научился делать неплохой сплайсинг api ядра.

    FatMoon любая защита - это бред.
    а ты не хочеш снять замок с входной двери???

    Ни чё эт хорошо что защиты ломают, зато программерская мысль не спит!!!
     
  14. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Плюс к защите используй активацию через SMS, многим будет лень искать кряк или тем более ломать, если цена будет разумной.
     
  15. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Виртуальной машине как-то всё равно, что какое-то API похучили внутри ОС под ней. Ей даже всё равно какая ОС. Повлиять на работу виртуальной машины (достаточно стабильной и не предоставляющей возможностей на себя повлиять вроде "интеграции указателя") из неё нельзя. Определить её наличее - либо если она выдаёт себя именами устройств, либо ища какие-то ошибки эмуляции (какая-то инструкция ведёт себя не совсем так как на реальной машине. не реализована какая-то ошибка процессора).
    В моём случае ВМ нужна лишь для того, чтобы на любом реальном компьютере были одинаковые серийные номера всех устройств и конфигурация (потому что настройки ВМ и программа эмуляции одна и таже).
     
  16. Erfaren

    Erfaren New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2010
    Сообщения:
    27
    Универсальный способ взлома любой защиты, это полная перекомпиляция бинарного кода программы. Когда вы имеет на руках работоспособный ассемблерный код исходного бинарника, то вопрос снятия защиты становиться уже чисто техническим. То, что это возможно, я убедился в рекомпиляции дизассемблерного кода системной длл-ки comctl32.dll, размером более мегабайта. На исправление ошибок (порядка 1000) дизассемблирования мне хватило двух дней. И то, основная работа была чисто рутинной. Если написать несколько нужных скриптов, то процесс восстановления кода займет считанные минуты. Кстати, сам код дизассемблера (IdaPro v. 5.7 demo), можно получить с помощью самой «Иды». Правда, основная защита «Иды», заключается в отсутствии некоторого ключевого кода в демоверсии. Хотя для дизассемблирования многих программ можно прекрасно пользоваться демоверсией и копировать результат через буфер обмена.

    Т.е. я хочу сказать, что неплохой метод защиты это отсутствие ключевого кода в демоверсии. Хотя ничто не помешает легальному пользователю выложить рабочую версию программы в открытый доступ. Так было с «Идой» ранних версий. Когда, пользователи на форуме скидывались по рублю, покупали легальную версию, а затем выкладывали ее для всех участников данной акции :) .

    Главное, это просто соблюдать классический (универсальный) закон 20/80. Например, 80% всей работы делается в оставшиеся 20% времени (20%-ми сотрудников) или 20% людей владеют 80%-ми ресурсов и т.д. В нашем случае достаточно, чтобы 80% всех доходов от продажи «шароваров» нам приносили 20% легальных (ленивых или внушаемых) пользователей. Для этого достаточно тупой защиты, взламываемой с помощью

    Код (Text):
    1. bpx MessageBoxA
    Если же мы исходим из принципа: «жадность не порок» :) , то можем захотеть, чтобы нашу программу оплачивали 80% ее пользователей. Тогда да, можем использовать защиту на уровне Ильфака Гильфанова (разработчика «Иды») или даже выше. Но важно понимать, что в любом случае, 100% пользователей никогда не будут оплачивать наши «шаровары». Это как закон о недостижимости абсолютного нуля или там скорости света. Зато усилия на достижение лишнего процента легальных пользователей возрастают в экспоненциальной степени.

    Я, например, сейчас разрабатываю собственную программу, с которой в перспективе собираюсь иметь некоторый доход, по принципу публичного программирования. Т.е. не только никакой защиты, но и более того, полная публикация промежуточных результатов с исходным кодом на своем сайте и сайтах вроде sql.ru или codeproject.com. Тем самым я делаю себе рекламу, а зарабатывать можно на индивидуальных заказах и консультациях. Очень часто я сталкивался с ситуацией помочь установить, настроить и обучить работе с программой, которая полностью документирована и легка в использовании. Но народу, видите ли, трудно воспринимать письменный текст. Телевизор полностью отучил их читать, поэтому они понимают только устную речь :) . Да, таких ленивых только процентов 20. Но они и сейчас мне приносят 80% доходов :) .
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вроде я уже тут отвечал. Для обхода всякой защиты идеально подходят песочницы. Один экземпляр вашего приложения разойдётся по планете через теже торренты и никого не будет волновать как работает защита не понятно от чего.
     
  18. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Надо же написать такую чушь... При этом ничего не зная... У дерматолога спроси, если сам не в курсе
     
  19. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    ну если все-таки к защитам и доходам, то видится чуть ли не единственный вариант: модульный/обновляемый/поддерживаемый. Не знаю, как это называется на научном языке :) Суть:

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

    2. Обновления к программе получают только зарегистрированные пользователи. Ключ генерится при регистрации по железу, ответный ключ создается на вашем сервере. Люди без сети не смогут обновить программу. Попытка обновить программу с ключом, для которой уже есть регистрация (и сгенеренный у пользователя по железу ключ не совпадает), проваливается - пущай тот, кто первым зарегистрировался, письма шлет, с указанного при регистрации мыла. Скорее всего, сломают. Но не все, и не факт что быстро.

    3. Подключаемые модули с новыми функциями распространяются по тому же принципу. Регистрацию нового модуля опять же через проверку

    4. Техподдержка только регистрированным пользователям.

    Если программа будет востребована, так-таки купят. Если она будет сложной, и без 100 грамм не разберешься, и техподдержка потребуется - еще лучше. Оптимум сразу внедрить несколько ошибок в первый релиз, исправляемых потом обновлениями ;) Учитесь у мелкомягких