Программная защита и авторизация приложений магазина.

Автор Тема: Программная защита и авторизация приложений магазина.  (Прочитано 75039 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Тема создана для обмена опытом и помощи в реализации защиты приложений магазина. Обсуждение методов защиты для разных целей: разовой продажи, помесячной арендной платы, обновления и т.д. 

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Вот код на лиспе в открытом доступе в интернете. Можно легко достать номер диска. Вопрос в том насколько это надежный неизменяемый номер, железно ли будет работать данная функция на всевозможных компьютерах. Например, есть программы, которые  меняют номер диска. Если можно менять номер диска, если речь идет об одном и том же значении, то это все ненадежно.
 
Также есть функция лиспа в Брикскаде
Код - Auto/Visual Lisp [Выбрать]
  1.  (get_diskserialid)
  2.  
   returns a 9-digit unique id string, based on the 1. hard disk serial number;
   if the hard disk serial number can not be obtained in very rare caes, the
   9-digit unique id string is based on the serial number of the 1. partition;
   this id string provides a licensing/hardlocking feature for Lisp applications

Можно ли это реализовать на Autolisp'е и вообще на сколько это надежней результата в представленном ниже коде.

Код - Auto/Visual Lisp [Выбрать]
  1. (defun #Asmi_Get_Drive_Serial(Path / fsObj hSn abPth cDrv)
  2.   (vl-load-com)
  3.   (if
  4.     (and
  5.       (setq fsObj(vlax-create-object "Scripting.FileSystemObject"))
  6.       (not
  7.         (vl-catch-all-error-p
  8.           (setq abPth(vl-catch-all-apply 'vlax-invoke-method
  9.                        (list fsObj 'GetAbsolutePathName Path))
  10.                        ); end setq
  11.                    ); end vl-catch-all-error-p
  12.                 ); end not
  13.           ); end and
  14.     (progn
  15.       (setq cDrv(vlax-invoke-method fsObj 'GetDrive
  16.         (vlax-invoke-method fsObj 'GetDriveName abPth
  17.         ); end vlax-invoke-method
  18.       );end vlax-invoke-method
  19.      ); end setq
  20.      (if
  21.        (vl-catch-all-error-p
  22.           (setq hSn(vl-catch-all-apply 'vlax-get-property
  23.             (list cDrv 'SerialNumber))))
  24.             (progn
  25.               (vlax-release-object cDrv)
  26.               (setq hSn nil)
  27.             ); end progn
  28.        ); end if
  29.     (vlax-release-object fsObj)
  30.     ); end progn
  31.    ); end if
  32.   hSn
  33.   ); end of #Asmi_Get_Drive_Serial
  34.  

Очень жду ваше мнение. Получаю большую пользу от ваших мыслей. Как устраивать саму защиту не пишу, но думаю эта тема полезна будет для многих. Потом многие разработчики Автодеска на базе этих знаний будут клепать свои защиты, так как в большинстве случаев стоимость приложений Магазина мизерная, гораздо ниже стоимости защиты если ее просто покупать.
« Последнее редактирование: 23-03-2015, 06:57:39 от Виталий »

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
HDD может быть заменен в любой момент. Это раз. Второе: попадаются админы, запрещающие обращение к Scripting.FileSystemObject от непонятных приложений и дополнений.
Я уже говорил в http://adn-cis.org/forum/index.php?topic=2583.0 и повторю еще раз: привязка к какому-либо одному параметру не даст ничего.
Если приложение планируется распространять через Autodesk Exchange Apps, то почти вся головная боль о лицензионности дополнения ложится на плечи Autodesk (мне так кажется).
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно легко достать номер диска. Вопрос в том насколько это надежный неизменяемый номер, железно ли будет работать данная функция на всевозможных компьютерах.
Совершенно ненадежный. Кроме того, что написал Алексей, изменить серийный номер логического диска HDD не представляет никакого труда.
Не путать с номером, который присваивается производителем диску (HDD Firmware Serial Number) и который изменить очень сложно, часто невозможно. Но и прочитать его не так просто, а средствами VisualLisp просто невозможно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай если попытаешься пойти по этому пути - вот исходники на C++ (т.е. теоретически можно всунуть в arx-файл) для получения MAC-адреса и серийного номера HDD (физического диска, а не логического раздела): http://www.codeproject.com/Articles/319181/Haephrati-Searching-for-a-reliable-Hardware-ID
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Если приложение планируется распространять через Autodesk Exchange Apps, то почти вся головная боль о лицензионности дополнения ложится на плечи Autodesk (мне так кажется).
Вот именно, а у Автодеска это очень темная тема. Как все устроено наверно можно будет понять после публикации. Поэтому я и открыл эти темы (защиты и аттестации приложения), чтобы хотя бы те разработчики, которые опубликовались, поделились своим опытом.
Я даже спрашивал у лиц, проверяющих приложения, а как должна быть устроена защита, авторизация и т.п., например, для случая когда помесячная аренда. Мне ответили что нужно отметить галочкой этот пункт и все. Это скорее шутка, а не ответ. Никакой информации. Это мне напомнило как у Путина спросили, а все таки, что произошло с подводной лодкой "Комсомолец". Он ответил - "Она утонула".   Кстати Автодеск говорит, что защита и авторизация это дело разработчиков.

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
На всякий случай если попытаешься пойти по этому пути - вот исходники на C++ (т.е. теоретически можно всунуть в arx-файл) для получения MAC-адреса и серийного номера HDD (физического диска, а не логического раздела): http://www.codeproject.com/Articles/319181/Haephrati-Searching-for-a-reliable-Hardware-ID
Я пока исследую эту тему. Такой информации должно быть много, чтобы выбрать самое оптимальное. Вот какие еще другие подходы простых защит бывают не используя ID диска и т.п.?  Авторизация это же не защита. Может те кто опубликовывается вообще делают только авторизацию без защиты.
Думаю не следует мыслить о какой-нибудь серьезной защите. Достаточно такой, чтобы простой пользователь (не программист) не мог ее распространить.

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Если приложение планируется распространять через Autodesk Exchange Apps, то почти вся головная боль о лицензионности дополнения ложится на плечи Autodesk (мне так кажется).
Поэтому Автодеск должен иметь этот метод или технологию и давать разработчикам для внедрения в их приложения именно перед публикацией, до распространения! Иначе разработчику придется отсылать Автодеску абсолютно открытое не защищенно приложение  и потом надеяться, что оно не распространиться после первой скачки.
Модераторы если у вас есть связь с Автодеском, разъясните пожалуйста этот вопрос, так как в представительстве Автодеска в России на эту тему ответа нет.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Поэтому Автодеск должен иметь этот метод или технологию и давать разработчикам для внедрения в их приложения именно перед публикацией, до распространения!
Никто никому ничего не должен. Этого нет ни в Google Play, ни в App Store, ни в Магазине Windows. А с учетом того, что в Магазине Приложений Autodesk имеется куча совершенно разнородных платформ, использующих различные API, языки программирования и операционные системы - создать такую обобщенную технологию, удовлетворившую бы всех, задача неподъемная (IMHO).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Никто никому ничего не должен. Этого нет ни в Google Play, ни в App Store, ни в Магазине Windows. А с учетом того, что в Магазине Приложений Autodesk имеется куча совершенно разнородных платформ, использующих различные API, языки программирования и операционные системы
Неправильно выразился. Не должен, а вот была бы подобная функция в lisp'e (get_diskserialid), было бы неплохо. Конкуренты дошли до этого, дают людям полезный функционал. Уверен и Автодеск до этого дойдет в новых версиях. Не надо быть консерватором.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не должен, а вот была бы подобная функция в lisp'e (get_diskserialid), было бы неплохо. Конкуренты дошли до этого, дают людям полезный функционал. Уверен и Автодеск до этого дойдет в новых версиях. Не надо быть консерватором.
Читай: http://www.theswamp.org/index.php?topic=38432.0
Там есть несколько вариантов получения серийного номера физического диска. Так же как и в Bricscad это всё достаточно ненадежно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Уверен и Автодеск до этого дойдет в новых версиях.
Уверен что они этим заниматься не будут.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Читай: http://www.theswamp.org/index.php?topic=38432.0
Там есть несколько вариантов получения серийного номера физического диска. Так же как и в Bricscad это всё достаточно ненадежно.
Там их варианты не работают, зависят от систем Windows, может еще от чего, ссылка бесполезная. А (get_diskserialid) как я понял возвращает железно индефикатор с физического диска. Была бы такая функция у Автодеск было бы очень полезно. Сразу бы можно было сделать защиту, задействовав ее, там даже в описании написано - "this id string provides a licensing/hardlocking feature for Lisp applications". А пока стопор, копаться в с++, переводить в arx, заведомо зная, что ненадежно и сложно. Нет решения пока нет такой функции, лично для моей идеи защиты. Кто-то занимался именно этой проблемой? 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А (get_diskserialid) как я понял возвращает железно индефикатор с физического диска.
Она делает тоже самое, что и функции по моей ссылке. В отличие от них эта функция - черный ящик (т.е. как она работает ты не знаешь).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВиталийАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Она делает тоже самое, что и функции по моей ссылке. В отличие от них эта функция - черный ящик (т.е. как она работает ты не знаешь).
Вот что она делает, возвращает nil.
Код - Auto/Visual Lisp [Выбрать]
  1. $ (defun HDSerial ( / wmi srv drv ser )
  2.   (vl-catch-all-apply
  3.     (function
  4.       (lambda ( )
  5.         (if
  6.           (setq wmi (vlax-create-object "WbemScripting.SWbemLocator")
  7.                 srv (vlax-invoke wmi 'connectserver nil nil nil nil nil nil nil nil)
  8.                 drv (vlax-invoke srv 'execquery "Select SerialNumber from Win32_DiskDrive")
  9.           )
  10.           (vlax-for item drv
  11.             (vlax-for prop (vlax-get item 'Properties_)
  12.               (if (eq "SERIALNUMBER" (strcase (vlax-get prop 'name)))
  13.                 (setq ser (vl-string-trim " " (vlax-get prop 'value)))
  14.               )
  15.             )
  16.           )
  17.         )
  18.       )
  19.     )
  20.   )
  21.   (if drv (vlax-release-object drv))
  22.   (if srv (vlax-release-object srv))
  23.   (if wmi (vlax-release-object wmi))
  24.   ser
  25. )
  26. HDSERIAL
  27. _$ (HDSerial)
  28. nil
Может я чего-то не понимаю, но там и на английском написано, что может не работать. Объясни как увидеть не nil, если утверждаешь, что она работает. Вот лог. номер диска возращается, но он не подходит по определению.
А в описании к (get_diskserialid) сказано что даже если sernumber не возращается, то они вернут другую инфо с Partition. Вопрос о надежности и решении. Если это заявлено значит оно работает. Черный ящик это или нет, как она работает и т.п. мне без разницы, нужен любой идентификатор компьютера, она этому условию подходит.