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

    В статье кратко рассмотрим как без создания собственного облачного сервера защитить программу использующую 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. Реализуемо в любом сервисе обладающим аналогами хранимых процедур Вконтакте
    Поделиться публикацией
    Комментарии 23
      0
      2) Сохранение аccess_token

      Вопрос: откуда он берется? есть ли на него ограничения? (почему не vk_id? )
        +1
        Он возвращается при авторизации и передается для выполнения большей и части функций и даже больше чем и для которых указан в документации. Так же возлагается и ещё при некоторых функциях. Что за ограничения?
          +5
          последнее что я захочу, это завязывать работу своего приложения на сторонний левый сервис который вам ничего не должен и по соглашению вы ему никто. Особенно когда он в mail.ru group. Хотя нет, чей бы он ни был.
            0
            … аналогично, последнее что захочет здравомыслящий пользователь — это пользоваться приложением, и далее по тексту.
            –1
            Если вы защищаете приложение, значит пытаетесь его монетизировать. И тут же стараетесь сэкономить за счет пользователей этого приложения, изгаляясь весьма извращенным способом. Как-то некрасиво.
              0

              Что именно вам не нравится?

              +2

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

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

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


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

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

                • НЛО прилетело и опубликовало эту надпись здесь
                    0

                    Это не защищает приложение от пропатчинга и увода лицензии, тем более в статье речь про защиту приложений взаимодействующих с Vk.com

                    • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    это не дает гарантий, достаточно пропатчить программу.

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

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

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

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

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

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

                            0

                            О каких третьих лицах речь?

                              0
                              О не ограниченных, так как конфиденциальные данные утекают с личного компа наружу в некую функцию.
                                0

                                Это логично, ведь вы хотите работать с данными VK, для этого используются standalone приложения, вы даёте доступ через стандартную форму разрешения доступа этому приложению, все честно видите. Никакие данные не утекают, вы делаете запрос, выгрузить таких-то пользователей vk к примеру, получаете данные в ответе.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое