Графическая схема
Принцип работы
Если программное обеспечение никак не связано с Вконтакте, то крупные разработчики используют 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.
Заключение
- Можно автоматизировать процесс редактирования списка пользователей при хранении списка allowed_users вне хранимой процедуры
- Простая реализация
- Не подходит для многопользовательского либо требовательного к производительности проекта
- Замедляет выполнение хранимой процедуры
- Зависимо от доступности и ограничений Вконтакте
- Может быть заблокировано Вконтакте
- Реализуемо в любом сервисе обладающим аналогами хранимых процедур Вконтакте
Комментарии (17)
Protos Автор
18.05.2018 19:41+1Он возвращается при авторизации и передается для выполнения большей и части функций и даже больше чем и для которых указан в документации. Так же возлагается и ещё при некоторых функциях. Что за ограничения?
Aquahawk
18.05.2018 19:42+5последнее что я захочу, это завязывать работу своего приложения на сторонний левый сервис который вам ничего не должен и по соглашению вы ему никто. Особенно когда он в mail.ru group. Хотя нет, чей бы он ни был.
jrthwk
18.05.2018 20:00… аналогично, последнее что захочет здравомыслящий пользователь — это пользоваться приложением, и далее по тексту.
gasizdat
18.05.2018 20:20-1Если вы защищаете приложение, значит пытаетесь его монетизировать. И тут же стараетесь сэкономить за счет пользователей этого приложения, изгаляясь весьма извращенным способом. Как-то некрасиво.
Andy_Big
18.05.2018 21:38+2Нет интернета — нет работающего приложения, за которое пользователь заплатил деньги? Или речь идет о каких-то специфичных приложениях, которые без интернет в принципе не работают?
Protos Автор
19.05.2018 02:59Естественно, речь о приложении которое с интернетом взаимодействует, точнее с соцсетью, например, администрирует группу, анализирует комментарии пользователей в группах и т.п.
Andy_Big
19.05.2018 04:31+1Тогда зачем в статье вот этот пассаж?
Если программное обеспечение никак не связано с Вконтакте, то крупные разработчики используют HASP, однако, это дорого, сложно для приобретения и необходимо разрабатывать еще приложения которые будут запускаться внутри HASP ключей.
Данная статья про защиту программ, разрабатываемых индивидуальными разработчиками или мелкими компаниями.
DjSens
19.05.2018 00:20+2Давно пора продавать только мониторы, клавы и мышки — и никаких системников, чтоб юзверь не смог запускать пирацкий софт или контент :)
planarik
19.05.2018 09:27Если приложение должно работать при наличии Интернета, его проще загнать в облако, снабдив WEB-интерфейсом. Благо, не начало 00-х, сейчас библиотек на любой вкус и цвет хоть отбавляй.
itconsulting
19.05.2018 10:56это не дает гарантий, достаточно пропатчить программу.
Но и в рассматриваемом случае тоже достаточно пропатчить программу — неважно что вернуло ВК — «License not acquired» или «License acquired», пофиксенная программа всё равно может этот ответ игнорировать, и в этом случае абсолютно не играет роли где выполнялась хранимая процедура — на вашем сервере или в ВК.Protos Автор
19.05.2018 11:15Уточнил код чтобы более явно было видно что вывод результата если лицензия есть, в противном случае ошибку выводим.
itconsulting
19.05.2018 12:46Ну всё равно не важно же. Допустим хакер пропатчил программу в месте где она проверяет результат, возвращённый с ВК (или из любого другого сервиса):
if(«error»==res || «ok»==res || true){
// license ok
} else {
// bad license — never called
}
Проблема в узком месте в программе, которое может быть «пофиксено» злоумышленником, как бы ни была хорошо продумана система авторизации на сервере.lostpassword
19.05.2018 13:53Так ведь смысл в том, что код выполняется не в программе, а на удалённой стороне. Патчить нечего, этого кода в программе просто нет)
Protos Автор
19.05.2018 14:33Внутри execute выполняются основные вычисления, вы можете патчить программу, но все обработки данных получаемых при парсинге, например, групп, и других данных VK выполняются внутри execute, execute возвращает только результат обработки, что оно делает злоумышленнику будет тяжело догадаться, также емупридется писать все методы execute самостоятельно. Пример: execute парсит стену 10 групп, фильтрует данные по неизвестному злоумышленнику способу, выбирает нужные параметры постов и выводит в определенной последовательности, что вам патчинг даст?
vassabi
Вопрос: откуда он берется? есть ли на него ограничения? (почему не vk_id? )