Защита программы через Vk.com +6



В статье кратко рассмотрим как без создания собственного облачного сервера защитить программу использующую VK API от незаконного использования и несанкционированного распространения.

Графическая схема





Принцип работы


Если программное обеспечение никак не связано с Вконтакте, то крупные разработчики используют HASP, однако, это дорого, сложно для приобретения и необходимо разрабатывать еще приложения которые будут запускаться внутри HASP ключей.

Данная статья про защиту программ, разрабатываемых индивидуальными разработчиками или мелкими компаниями. Логично разместить свой сервер в Интернете и при помощи него осуществлять лицензирование программы, но даже это не дает гарантий, достаточно пропатчить программу. Рассмотрим как это делают многие просто размещая критичные или сложные запросы в виде хранимых процедур, код которых надежно хранится на серверах Вконтакте и недоступен программе которую вы распространяете:
Хранимые процедуры позволяют исполнять код на стороне сервера API аналогично методу execute, но без передачи кода процедуры по сети.

Для дополнительной защиты хранимая процедура должна помимо выполнения еще проверять запустил ли ее пользователь который приобрел лицензию, для этого достаточно выполнить вначале хранимой процедуры, например, такой код:

var allowed_users = ",id1,id2,id3,id99999999,";//список пользователей которые приобрели лицензию
//Ищем среди allowed_users vk_id пользователя запустившего процедуру
var c = allowed_users.indexOf("id"+API.users.get({})@.id+",");//поиск по массиву не работает в хранимых процедурах :(
var res;
if(c>0)
{//Если запустил один из разрешенных пользователей
//Здесь тело вашей процедуры
res = ...
return res;
}
else return "License not acquired";
return "error"

В качестве аналога можно получать allowed_users с wiki страницы или осуществлять проверку другим способом.

По истечению срока действия лицензии у пользователя, он просто удаляется из allowed_users.

Заключение


  1. Можно автоматизировать процесс редактирования списка пользователей при хранении списка allowed_users вне хранимой процедуры
  2. Простая реализация
  3. Не подходит для многопользовательского либо требовательного к производительности проекта
  4. Замедляет выполнение хранимой процедуры
  5. Зависимо от доступности и ограничений Вконтакте
  6. Может быть заблокировано Вконтакте
  7. Реализуемо в любом сервисе обладающим аналогами хранимых процедур Вконтакте

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (17):

  1. vassabi
    /#10791967

    2) Сохранение аccess_token

    Вопрос: откуда он берется? есть ли на него ограничения? (почему не vk_id? )

  2. Protos
    /#10791985 / +1

    Он возвращается при авторизации и передается для выполнения большей и части функций и даже больше чем и для которых указан в документации. Так же возлагается и ещё при некоторых функциях. Что за ограничения?

  3. Aquahawk
    /#10791989 / +5

    последнее что я захочу, это завязывать работу своего приложения на сторонний левый сервис который вам ничего не должен и по соглашению вы ему никто. Особенно когда он в mail.ru group. Хотя нет, чей бы он ни был.

    • jrthwk
      /#10792003

      … аналогично, последнее что захочет здравомыслящий пользователь — это пользоваться приложением, и далее по тексту.

  4. gasizdat
    /#10792035 / -1

    Если вы защищаете приложение, значит пытаетесь его монетизировать. И тут же стараетесь сэкономить за счет пользователей этого приложения, изгаляясь весьма извращенным способом. Как-то некрасиво.

  5. Andy_Big
    /#10792123 / +2

    Нет интернета — нет работающего приложения, за которое пользователь заплатил деньги? Или речь идет о каких-то специфичных приложениях, которые без интернет в принципе не работают?

    • Protos
      /#10792329

      Естественно, речь о приложении которое с интернетом взаимодействует, точнее с соцсетью, например, администрирует группу, анализирует комментарии пользователей в группах и т.п.

      • Andy_Big
        /#10792373 / +1

        Тогда зачем в статье вот этот пассаж?


        Если программное обеспечение никак не связано с Вконтакте, то крупные разработчики используют HASP, однако, это дорого, сложно для приобретения и необходимо разрабатывать еще приложения которые будут запускаться внутри HASP ключей.
        Данная статья про защиту программ, разрабатываемых индивидуальными разработчиками или мелкими компаниями.

  6. DjSens
    /#10792261 / +2

    Давно пора продавать только мониторы, клавы и мышки — и никаких системников, чтоб юзверь не смог запускать пирацкий софт или контент :)

  7. planarik
    /#10792457

    Если приложение должно работать при наличии Интернета, его проще загнать в облако, снабдив WEB-интерфейсом. Благо, не начало 00-х, сейчас библиотек на любой вкус и цвет хоть отбавляй.

  8. itconsulting
    /#10792501

    это не дает гарантий, достаточно пропатчить программу.

    Но и в рассматриваемом случае тоже достаточно пропатчить программу — неважно что вернуло ВК — «License not acquired» или «License acquired», пофиксенная программа всё равно может этот ответ игнорировать, и в этом случае абсолютно не играет роли где выполнялась хранимая процедура — на вашем сервере или в ВК.

    • Protos
      /#10792509

      Уточнил код чтобы более явно было видно что вывод результата если лицензия есть, в противном случае ошибку выводим.

      • itconsulting
        /#10792583

        Ну всё равно не важно же. Допустим хакер пропатчил программу в месте где она проверяет результат, возвращённый с ВК (или из любого другого сервиса):
        if(«error»==res || «ok»==res || true){
        // license ok
        } else {
        // bad license — never called
        }
        Проблема в узком месте в программе, которое может быть «пофиксено» злоумышленником, как бы ни была хорошо продумана система авторизации на сервере.

        • lostpassword
          /#10792627

          Так ведь смысл в том, что код выполняется не в программе, а на удалённой стороне. Патчить нечего, этого кода в программе просто нет)

        • Protos
          /#10792669

          Внутри execute выполняются основные вычисления, вы можете патчить программу, но все обработки данных получаемых при парсинге, например, групп, и других данных VK выполняются внутри execute, execute возвращает только результат обработки, что оно делает злоумышленнику будет тяжело догадаться, также емупридется писать все методы execute самостоятельно. Пример: execute парсит стену 10 групп, фильтрует данные по неизвестному злоумышленнику способу, выбирает нужные параметры постов и выводит в определенной последовательности, что вам патчинг даст?

  9. phenik
    /#10792505 / +1

    А схема красиво нарисована!

    • freeExec
      /#10794573

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