В статье кратко рассмотрим как без создания собственного облачного сервера защитить программу использующую 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
    18.05.2018 19:35

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

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


  1. Protos Автор
    18.05.2018 19:41
    +1

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


  1. Aquahawk
    18.05.2018 19:42
    +5

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


    1. jrthwk
      18.05.2018 20:00

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


  1. gasizdat
    18.05.2018 20:20
    -1

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


  1. Andy_Big
    18.05.2018 21:38
    +2

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


    1. Protos Автор
      19.05.2018 02:59

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


      1. Andy_Big
        19.05.2018 04:31
        +1

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


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


  1. DjSens
    19.05.2018 00:20
    +2

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


  1. planarik
    19.05.2018 09:27

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


  1. itconsulting
    19.05.2018 10:56

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

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


    1. Protos Автор
      19.05.2018 11:15

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


      1. itconsulting
        19.05.2018 12:46

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


        1. lostpassword
          19.05.2018 13:53

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


        1. Protos Автор
          19.05.2018 14:33

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


  1. phenik
    19.05.2018 11:13
    +1

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


    1. freeExec
      21.05.2018 08:28

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