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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 111
  • Карма: -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
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
А (get_diskserialid) как я понял возвращает железно индефикатор с физического диска.
Она делает тоже самое, что и функции по моей ссылке. В отличие от них эта функция - черный ящик (т.е. как она работает ты не знаешь).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 111
  • Карма: -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. Вопрос о надежности и решении. Если это заявлено значит оно работает. Черный ящик это или нет, как она работает и т.п. мне без разницы, нужен любой идентификатор компьютера, она этому условию подходит.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Если это заявлено значит оно работает.
:D :D :D
А теперь серьезно.
1) На этом форуме не обсуждаются и не упоминаются клоны/конкуренты.
2) Еще раз повторюсь. Autodesk предоставляет площадку для размещения приложений, но не обязана предоставлять инструменты для защиты приложений.
3) Я не буду участвовать в этой дискуссии, так как считаю что "Спасение утопающих, дело рук самих утопающих". Т.е. если тебе нужна защита, то ты должен или сам её сделать или купить готовую.
4) Если тема зайдет куда-то не туда по моему впечатлению (а она именно туда она и движется), то я её закрою.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 111
  • Карма: -1
1) На этом форуме не обсуждаются и не упоминаются клоны/конкуренты.
Ну удали все что про "клоны/конкуренты". Я на их базе не работаю и не собираюсь. Задача поставлена - как получить любой уникальный идентификатор компьютера на vlisp или проверенный код на arx. Любое что-то хитрое в этом роде. Думаю это будет полезно не только для меня, но и других участников Магазина.
Извини если я что-то не то написал в разрез с правилами форума, а тема двигается к полезному функционалу для Магазина Автодеска.

Оффлайн Ярослав Решетников

  • Менеджер по маркетингу ADN, Россия и СНГ
  • ADN DevHelp
  • *
  • Сообщений: 15
  • Карма: 6
    • Autodesk Developer Network
  • Skype: yarreshet1
Коллеги, хотел бы обратить ваше внимание, что в инструкциях (http://autodesk.ru/developapps), в разделе "Часто задаваемые вопросы" под заголовком «Лицензирование, стоимость и обновления» есть ответ на вопрос, возникший в ходе обсуждения:
Предоставляет ли Autodesk защиту от копирования или системы лицензирования для моего продукта?
Нет. Защита от незаконного копирования и управление лицензиями является обязанностью разработчика. Это относится как к демо-версиям, так и к платным продуктам. Независимо от используемой системы, продукты из Exchange Apps должны быть доступны клиенту для использования сразу после установки. Если продукт требует от клиента запросить лицензию, которая не предоставляется сразу (например, если запросы лицензий обрабатываются вручную, а не отправляются автоматически по электронной почте или через какую-либо онлайн-систему), то продукт должен обеспечивать полнофункциональную работу на период, достаточный для его активации.

Эта информация на английском языке вот тут - http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=20149725

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

  • ADN OPEN
  • ***
  • Сообщений: 111
  • Карма: -1
Предоставляет ли Autodesk защиту от копирования или системы лицензирования для моего продукта?
Нет.
Дня 3 назад отвечал на опрос от Автодеска. Там был вопрос о том, что знаете ли вы о существовании продукта от Автодеск или библиотеки (не помню) по защите и лицензированию приложений от разработчиков.  Что это или это только новые идеи? На ответы к опросам обычно не отвечают.

Оффлайн Ярослав Решетников

  • Менеджер по маркетингу ADN, Россия и СНГ
  • ADN DevHelp
  • *
  • Сообщений: 15
  • Карма: 6
    • Autodesk Developer Network
  • Skype: yarreshet1
Виталий, опередили меня. Хотел дополнить ответ, не успел :-)
На англоязычном сайте http://www.autodesk.com/developapps есть инструкции по данной теме.
Разделы:
Copy protection in your Apps http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243607
Entitlement API for desktop Apps http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243865

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Copy protection in your Apps http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243607
Entitlement API for desktop Apps http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=24243865
Вроде и англицкий немного знаю, и в программирование чуть-чуть разбираюсь, но не доходит до конца.
Может кто-нибудь по-русски мне объяснить?
Т.е. Autodesk даёт нам инструмент, чтоб мы сами из своего приложения при его запуске делали запрос в https://apps.exchange.autodesk.com и проверяли "А покупал ли конкретно этот пользователь, конкретно нашу программу"?
На первый взгляд всё просто, но кроме Lisp-а ничего не знаю. Средствами Lisp такое возможно?

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
На англоязычном сайте http://www.autodesk.com/developapps есть инструкции по данной теме.
Вот бы на русском такое....

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Средствами Lisp такое возможно?
Думаю, что средствами чистого Lisp это сделать нельзя. Во всяком случае мне неизвестен способ на Lisp обратится по адресу в Internet и получить результат. Возможно это можно сделать через какие-то стандартные COM-сервера, но исключить ситуацию что их нет или администратор закрыл к ним доступ нельзя. Да и вообще сам по себе способ требующий для проверки доступности идентификации обращаться к интернету мне не нравится. Мне не нравится обязательность того, что пользователь должен войти в свою учетную запись Autodesk, а если он это не сделал (просто забыл, интернет не работает, и т.д. и т.п.), то программа работать не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
Может кто-нибудь по-русски мне объяснить?
По русски не могу, но нашел цикл статей с примерами использования данного API
Часть 1
Часть 2
Часть 3
Вот только про лисп там ничего нет...

Оффлайн Ярослав Решетников

  • Менеджер по маркетингу ADN, Россия и СНГ
  • ADN DevHelp
  • *
  • Сообщений: 15
  • Карма: 6
    • Autodesk Developer Network
  • Skype: yarreshet1
Перевод этих статей доступен по ссылке - http://adn-cis.org/articles/autodesk-exchange-apps/


Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Да и вообще сам по себе способ требующий для проверки доступности идентификации обращаться к интернету мне не нравится. Мне не нравится обязательность того, что пользователь должен войти в свою учетную запись Autodesk, а если он это не сделал (просто забыл, интернет не работает, и т.д. и т.п.), то программа работать не будет.
     В общем написал я тут недавно "Картограмму" для Civil 3D, и как-то так получилось, что сил и времени потратил на это больше чем ожидалось, и тут стала жаба меня поддушивать. Решил не напрямую денег брать а ввёл регистрацию, не зарегистрированная версия полностью работает, только просит некоторые небольшие вычисления вручную проводить.

     Для получения серийного номера тупо брал "Имя пользователя" + "Имя компьютера" переводил всё это дело по определённому алгоритму в 16-ти значное число и к нему 4- значный код активации. По запросу высылал код активации на почту и в письме намекал, что если всё клёво, можете денег слать.
В итоге за 2 месяца 500 загрузок 15 из них зарегистрировались, и лишь 3-ое денег прислали, 2-е успели переустановить систему и получили новые коды активации.
     
     Вообщем жабе не легче, и деньги каждый раз в письме выпрашивать тоже не приятно. Вот и решил, что на профильном сайте форуме геодезистов так и буду дальше безвозмездно программы раздавать, уже набрался небольшой пакет геодезических приложений вроде не плохих по отзывам, а сюда запилю их за небольшую плату, не ради заработка, а так для приятного бонуса.
     
    Но как оказалось на практике не так всё просто, начиная от работы с платёжными системами заканчивая защитой.

    Пр защиту, как я понял либо программа сразу бесплатная, либо она платная но плата проходит через магазин Autodesk и если пользователь заплатил в магазине то после установки она сразу должна у него уже работать безо всяких там доп регистраций?

    Опять же есть смысл защищать 5-то долларовую программу? Я не думаю что кто-то сильно начнёт распространять дистрибутив вне магазина.

перевод на нашем сайте:
Спасибо, всё понятно и даже скорее всего просто, но только только начал изучать NET  с С# и пока после Lisp-а глаза разбегаются  :o
« Последнее редактирование: 06-10-2015, 08:58:15 от Geobuilder »

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
Конкретные ссылки на перевод на нашем сайте:
Цитировать
Для AutoCAD или вертикальных продуктов, есть простой способ получить имя текущего пользователя и его userid, вы можете использовать следующие недокументированные системные переменные: ONLINEUSERNAME и ONLINEUSERID.
Правда, есть еще OAuth, но в свете следующей цитаты, это не важно.
Цитировать
// Так как вы, вероятно, не знаете этот AppId, пока вы его не опубликуете приложение,
// давайте сохраним AppId в конфигурационном файле, чтобы иметь возможность отредактировать впоследствии
// без изменения исходного кода
И ничто не мешает отредактировать это AppId, на купленное за 3 копейки приложение.

ИМХО, защита какая то дырявая получилась или я что то не доглядел?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
ИМХО, защита какая то дырявая получилась или я что то не доглядел?
Даже если бы информация о AppId была бы "зашита" в приложение (даже в зашифрованном виде), особого труда для перехвата его и подмены не возникло бы. Эта одна из причин, по которой я считаю этот метод защиты "не слишком удачным" (это я так очень мягко пишу...)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
особого труда для перехвата его и подмены не возникло бы
Открытый GET запрос с указанием всего и вся, хотя в 3 части показано ssl соединение, вроде бы подразумевается шифрованный обмен данными. Но я не специалист, а потому не знаю.

А какие варианты Вы видите? Или не стоит игра свеч?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
А какие варианты Вы видите? Или не стоит игра свеч?
Это тот (редкий) случай, когда я предпочитаю не высказывать своё мнение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
Зайду с другой стороны, в статьях просят смотреть репозитарий на github и там есть вот такой файлик и проект к нему
https://github.com/ADN-DevTech/ExchangeAppsCopyrightProtectionExample/blob/master/BestPracticeExample/samplecode.docx
В котором рассказывают как сделать оффлайн защиту для приложения, это работает?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
В котором рассказывают как сделать оффлайн защиту для приложения, это работает?
Не проверял, но почему нет? В действительности там говорится о том как сделать Online/Offline защиту. Online-защита - это та защита, о которой мы уже говорили. Offline защита заключается в проверке MAC-адреса и дат начала лицензии, последнего запуска и завершения лицензии (если лицензия временная).
Эта информация хранится на компьютере в зашифрованном виде. Всё тоже самое ты мог сделать и сам (т.е. использовать другие данные о PC, другой алгоритм шифровки и т.д.)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Нашёл на caduser такую функцию
Код - Auto/Visual Lisp [Выбрать]
  1. (defun vk_GetMacAddress
  2.       (/ LocatorObj ServiceObj SecurityObj ObjectSetObj OutList)
  3.       (setq LocatorObj
  4.         (vlax-create-object "WbemScripting.SWbemLocator")
  5.       )
  6.       (setq ServiceObj
  7.         (vlax-invoke
  8.           LocatorObj      'ConnectServer      nil
  9.           nil    nil      nil        nil       nil
  10.           nil    nil
  11.          )
  12.       )
  13.       (setq ObjectSetObj
  14.         (vlax-invoke
  15.           ServiceObj
  16.           'ExecQuery
  17.           "Select * from Win32_NetworkAdapter"
  18.         )
  19.       )
  20.       (vlax-for   Obj ObjectSetObj
  21.    (if (wcmatch (vl-princ-to-string (vlax-get Obj 'AdapterType))
  22.            "Ethernet 802.*"
  23.        )
  24.      (setq OutList (cons (vlax-get Obj 'MACAddress) OutList))
  25.    )
  26.       )
  27.       (foreach Obj
  28.           (list LocatorObj ServiceObj SecurityObj ObjectSetObj)
  29.    (and Obj (vlax-release-object Obj))
  30.       )
  31.       (car OutList)
  32.     )
Получаю мак адрес, раньше слышал такое слово , но не знал эго смысла, почитал википедию, получается это уникальный идентификатор сетевой карты, я правильно понял?
Изначально функция получала мак адрес состоящий из 3 частей, типа такого ("00:1C:F0:10:76:A0" "00:1C:F0:10:76:A1" "20:CF:30:AF:DA:F9")
Решил зачем мне все 3, и взял только первую часть "00:1C:F0:10:76:A0"
Но и она состоит из 6 значений, опять много, взял последние 3, 10 76 A0
Перевёл их из 16 в 10 систему (16 118 160)
Чтоб довести их до 4-х значных каждое умножил на 39 (0624 4602 6240)
Т.к. эта функция стала универсальной для всех моих приложений, добавил в конце номер приложения, и в итоге получил серийный номер: "0624" "4602"  "6240" "1540"

Ну и в принципе пока примерно 100 регистраций и всё работает хорошо.
А некоторые пишут спустя время, "ой а у меня регистрация слетела, серийник поменялся и код активации не подходит", да без проблем держи новый код. Это он что, сетевую карту поменял, или просто на другой комп установил?
Попадались серийники с нолями, типа  "0624" "0000"  "6240" "1540", ну а почему нет? А один раз был такой "0000" "0000"  "0000" "1540", т.е. всё что я взял из мак адреса оказалось равно 0. Опять же, у него сетевая карта отсутствует, или так могло совпасть, что из тех 3-х значений взятых из 18 мак адреса, оказались нулевыми?

Можно ли сказать, что из самых простых защит, привязка к мак адресу самая стабильная?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Не знаю, какие MAC возвращает именно этот код, но, подозреваю, что все подряд, включая виртуальные сетевые адаптеры. Посмотреть информацию по сетевым адаптерам можно в консоли (cmd.exe) с помощью команды ipconfig /all.
Соответственно, эти данные могут в любой момент поменяться - смена сетевой карты, удаление-установка Wi-Fi/Bluetooth карт, установка виртуальных машин и пр. Так что, привязка к MAC, на мой взгляд, одна из самых нестабильных.

Ну и "на закуску": https://ivstar.net/kak-smenit-mak-adres-na-setevoy-karte.html

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Так что, привязка к MAC, на мой взгляд, одна из самых нестабильных.
Хорошо, верю. Тогда к чему привязаться? Т.е. я конечно давно и много раз читал, что это всё сложно, и нормальную защиту проще купить, чем самому писать, но для дешёвых\бесплатных программ оно того не стоит.
Что самое стабильное в компьютере, к чему можно по простому добраться из AutoLISP?
Или как из "всех подряд" MAC-ов выбрать самый стабильный?


Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
ИМХО, если говорить про железо, то самое стабильное это HDD, их реже всего обновляют и часто переносят со старых компов на новые... другое дело, что программа то пишется под акад и соответственно должна привязываться к автокаду (лицензия денег стоит и потому мигрирует с пользователем по компам долго), но о доступе к данным по лицензии внутри автокада я ничего не нашел. =(

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
В свое время, в Microsoft думали над вопросом: к чему привязывать Windows? Что в ПК является наиболее неизменной частью? В итоге, выбор пал на материнскую плату, насколько я помню. То есть, в ПК может поменяться все что угодно, но если меняем мат.плату - покупаем новый Windows. Поэтому, довольно разумно придерживаться той же политики, на мой взгляд. Другое дело, что из Auto-VisualLISP добраться до ее параметров у меня, в свое время, не получилось. Но, раз Windows уже привязана к ПК, то можно попробовать привязаться к уникальным параметрам Windows. На деле, конечно, они могут оказаться совсем не уникальными на разных компьютерах, надо проверять.
Еще можно пробовать привязываться к параметрам системного жесткого диска. Замена жесткого диска, как правило, влечет за собой переустановку Windows, AutoCAD и пр. Поэтому, наше приложение уж точно придется заново устанавливать, а значит и регистрировать. http://www.cadtutor.net/forum/showthread.php?35406-How-to-get-serial-number-of-hard-drive-by-lisp
Вообще, параметров, к которым можно привязаться, довольно много (http://stackoverflow.com/questions/99880/generating-a-unique-machine-id). Но вот добраться до них из LISP - очень непростая задача, близкая к невозможной.
 

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
не соглашусь.
Купили новый комп, новую винду и поставили старенький лицензионный автокад 2012 х64, а у пользователя куплена утилита именно под этот автокад, пользователю еще раз ее покупать?

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
пользователю еще раз ее покупать?
Нет, написать автору, объяснить ситуацию, и получить новый ключ. Я кстати так делал с каким-то приложением для Windows, без проблем мне прислали новый ключ.
Еще можно пробовать привязываться к параметрам системного жесткого диска.
Это уже всё было в начале этой же темы.

Если последовать совету Алексея
привязка к какому-либо одному параметру не даст ничего.
Вариант разбить серийный номер на 4 части, 1 часть - MAC, 2 часть - серийный номер логического диска 3 часть -что-то ещё 4 часть номер приложения. И проверять чтоб хотябы один из первых 3 частей соответсвовал

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Ну вопрос сложный, и простого ответа на него нет. Кто как решит вести маркетинговую политику, так и будет правильно.
Почему привязывать приложение под AutoCAD нужно именно к AutoCAD? Есть же еще сетевые лицензии, которые очень распространены в крупных организациях, как с этим быть?
Вот, например, приложения магазина можно привязать к учетной записи Autodesk. То есть, идет привязка не к железу, не к софту, а к конкретному пользователю. Тоже неплохой вариант.
Или те же самые электронные ключи защиты. Вынул из рабочего ПК, пришел домой, вставил - работаешь. Нужна коллеге программа - дал ему ключ. Для пользователя - один из самых удобных вариантов, и для взлома довольно непростой.
Вариант разбить серийный номер на 4 части, 1 часть - MAC, 2 часть - серийный номер логического диска 3 часть -что-то ещё 4 часть номер приложения. И проверять чтоб хотябы один из первых 3 частей соответсвовал
Пробуйте :) Ваше приложение - Вам и решать как его защищать :) Вряд ли кто-то будет подробно рассказывать каким образом сделана защита его приложений. Потому как чем меньше известно о принципах работы защиты, тем она надежнее.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
По поводу MAC-адреса хочу напомнить, что он легко меняется средствами Windows:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Или те же самые электронные ключи защиты. Вынул из рабочего ПК, пришел домой, вставил - работаешь. Нужна коллеге программа - дал ему ключ. Для пользователя - один из самых удобных вариантов, и для взлома довольно непростой.
Да. Но есть несколько НО (с этим я хорошо знаком):
1) Электронный ключ стоит денег. В среднем  $20...$25. Для недорогих программ (скажем до $200) это не выгодно.
2) Электронный ключ нужно передать покупателю. А если он из другого города (другой страны)? Это требует дополнительной пересылки (т.е. тоже денег и времени). В те времена, когда продавались "коробочные" версии программ (например AutoCAD до версии 2000 включительно), это не влияло на скорость поставки. Сейчас же ждать никто не хочет...
3) Производители электронных ключей могут перестать их производить или поставлять (например, Rainbow Sentinel SuperPRO). И тогда нужно задумываться о переходе на другой ключ / другую систему защиты.
4) При наличии большого количества ключей одного или разных производителей могут возникнуть проблемы совместимости между ними, необходимость докупать USB-хабы в случае если не хватает USB-портов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
По поводу MAC-адреса хочу напомнить, что он легко меняется средствами Windows:
Да это понятно, вопрос зачем его менять? Для каких целей?
Но есть несколько НО (с этим я хорошо знаком)
Вряд ли кто-то будет подробно рассказывать каким образом сделана защита его приложений. Потому как чем меньше известно о принципах работы защиты, тем она надежнее.
Да, блин, давайте спустимся на землю, ни кто не говорит о серьёзной защите, действительно глупо было бы обсуждать её на форму. Речь идёт о оптимальном варианте простейшей защиты.

Не дальше чем все уже ранее предложенные примеры получения серийного номера HDD или того же MAC, средствами AutoLISP. И я уже понял что всё это сомнительно и не надёжно, но я даже половину кода из того же  vk_GetMacAddress не понимаю. Например Дмитрей предположил, что этот код собирает всё подряд, но ведь из этого всё подряд есть что-то более стабильное, так вот в каком направление этот код дописать, что бы он взял не всё подряд, а это самое стабильно?

Вопрос даже не стоит сделать максимально надёжную защиту от взлома, один хацкер уже декомпилировал мой VLX и нашёл там функцию get_reg_cod и сам себе создал код активации, не жалко. Охота чтоб простой пользователь не испытывал неудобства, с неработающим приложением из-за переустановки чего-нибудь на компьютере.

И процесс регистрации приложения опять же не ради денег, до сих пор я свои бесплатно раздаю, проблема в их потом бесконтрольном распространении. Программист я так себе, и часто от первого релиза, до более менее стабильной версии выходит 10-20 обновлений в течении нескольких лет. А потом встречаю в сети распространителей моих программ ещё первых версий с косяками.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Да это понятно, вопрос зачем его менять? Для каких целей?
Совершенно реальный пример. Идентификация абонента интернет-провайдером чаще всего идёт по MAC-адресу. К интернету был подключен PC с одним MAC-адресом, а затем вместо него появилась необходимость подключить другой. Чтобы не связываться со службой поддержки провайдера на другом PC меняют MAC-адрес и он спокойно получает интернет. По историческим причинам у меня именно так.
Например Дмитрей предположил, что этот код собирает всё подряд, но ведь из этого всё подряд есть что-то более стабильное, так вот в каком направление этот код дописать, что он взял не всё подряд это самое стабильно?
Никак. Он берёт MAC-адреса всех сетевых адаптеров (реальных и/или виртуальных).
P.S.: Моё глубокое убеждение - на одном только VisualLisp (без arx/.net) невозможно сделать сколько-нибудь нормальную систему защиты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Цитировать
Речь идёт о оптимальном варианте простейшей защиты.
Берите номер тома системного раздела HDD. В качестве простейшей защиты вполне нормально.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
как бы так проще выразиться. какой бы простой не была защита, стоимость взлома должна превышать стоимость покупки )))
по поводу того, к чему еще дополнительно привязаться. если функция "vk_GetMacAddress" рабочая, то могу посоветовать глянуть в сторону "Win32_Processor" (Win32_NetworkAdapter поменять на Win32_Processor) и запустить. Будет интересовать значение поля "ProcessorId". Если в поисковике написать WMI Win32_Processor то в первой десятке будет ссылка майкрософтовская на все ключевые слова (хотя, если честно, выбирать там особо не из чего ))) )
дальше, не стоит хранить файл лицензии в открытом виде (ну мало ли, взруг он таки хранится без шифрования), лучше превратить его в набор кракозябликов ))), самый простой вариант без использования навороченных библиотек, но с сохранением логики шифрования будет выглядеть так:
Код - C++ [Выбрать]
  1. // строка в кракозяблики по ключевому слову
  2. void _encode(ACHAR * key, ACHAR * str, int strlen)
  3. {
  4.         int j = 0;
  5.         for (long i = 0; i < strlen; i++)
  6.         {
  7.                 str[i] -= key[j++];
  8.                 if (j >= _tcslen(key)) j = 0;
  9.         }
  10. }
  11.  
  12. // кракозяблики в строку по ключевому слову
  13. void _decode(ACHAR * key, ACHAR * str, int strlen)
  14. {
  15.         long j = 0;
  16.         for (long i = 0; i < strlen; i++)
  17.         {
  18.                 str[i] += key[j++];
  19.                 if (j >= _tcslen(key)) j = 0;
  20.         }
  21. }
  22.  
  23. // и так. key - ключ шифрования, str - строка данных (грубо говоря, лицензия), strlen - длина строки str
  24.  
  25. ну и примерчик создания файла лицензии на жестком диске
  26. FILE * f;
  27. _wfopen_s(&f,licFilePath.GetString(),_T("wb"));
  28. if (f == NULL)return false;
  29. ACHAR str[1024]; _tcscpy(str, licData.GetString());
  30. _encode(_T("Это мой ключик шифрования. чем он длинней, тем сложней ломать"),str,_tcslen(str));
  31. fwrite(str,sizeof(ACHAR),_tcslen(str),f);
  32. fclose(f);
  33.  
PS: думаю перевести при необходимости код на lisp труда не составит

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
если функция "vk_GetMacAddress" рабочая, то могу посоветовать глянуть в сторону "Win32_Processor" (Win32_NetworkAdapter поменять на Win32_Processor) и запустить. Будет интересовать значение поля "ProcessorId"
Спасибо
По аналогии с "vk_GetMacAddress" получилось вот так
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Get_ProcessorId (/               LocatorObj      SecurityObj
  2.                         SecurityObj     ObjectSetObj    Processor_Id
  3.                        )
  4.   (setq LocatorObj
  5.          (vlax-create-object "WbemScripting.SWbemLocator")
  6.   )
  7.   (setq ServiceObj
  8.          (vlax-invoke
  9.            LocatorObj 'ConnectServer nil nil nil nil nil nil nil nil)
  10.   )
  11.   (setq ObjectSetObj
  12.          (vlax-invoke
  13.            ServiceObj
  14.            'ExecQuery
  15.            "Select * from Win32_Processor"
  16.          )
  17.   )
  18.   (vlax-for Obj ObjectSetObj
  19.     (setq Processor_Id
  20.            (vlax-get Obj 'ProcessorId)
  21.     )
  22.   )
  23.   (foreach Obj
  24.                (list LocatorObj ServiceObj SecurityObj ObjectSetObj)
  25.     (and Obj (vlax-release-object Obj))
  26.   )
  27.   Processor_Id
  28. )
Работает, но всё равно половина не понятно.
1) переменная SecurityObj есть, но в коде (исходном) ни где не определяется, но зато в конце успешно release-ится, или это просто ошибка, притянулось от куда-то из прошлого?
2) Для чего в конце делают release объектов?
3) ID процессора, который мы вроде как получили, ни кто направо и налево не меняет, как тот же MAC-адрес?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
3) ID процессора, который мы вроде как получили, ни кто направо и налево не меняет, как тот же MAC-адрес?
Нет. Но, насколько я помню, он не является уникальным. То есть, на одинаковых процессорах он один и тот же.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
На основе предыдущего кода. Получаем серийный номер материнской платы:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Get_BaseBoardSerialNumber (/ LocatorObj ServiceObj ObjectSetObj SerialNumber)
  2.   (setq LocatorObj
  3.          (vlax-create-object "WbemScripting.SWbemLocator")
  4.   )
  5.   (setq ServiceObj
  6.          (vlax-invoke
  7.            LocatorObj 'ConnectServer nil nil nil nil nil nil nil nil)
  8.   )
  9.   (setq ObjectSetObj
  10.          (vlax-invoke
  11.            ServiceObj
  12.            'ExecQuery
  13.            "Select * from Win32_BaseBoard"
  14.          )
  15.   )
  16.   (vlax-for Obj ObjectSetObj
  17.     (setq SerialNumber
  18.            (vlax-get Obj 'SerialNumber)
  19.     )
  20.   )
  21.   (foreach Obj
  22.                (list LocatorObj ServiceObj ObjectSetObj)
  23.     (and Obj (vlax-release-object Obj))
  24.   )
  25.   SerialNumber
  26. )
То же самое, только из BIOS:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Get_BIOSSerialNumber (/ LocatorObj ServiceObj ObjectSetObj SerialNumber)
  2.   (setq LocatorObj
  3.          (vlax-create-object "WbemScripting.SWbemLocator")
  4.   )
  5.   (setq ServiceObj
  6.          (vlax-invoke
  7.            LocatorObj 'ConnectServer nil nil nil nil nil nil nil nil)
  8.   )
  9.   (setq ObjectSetObj
  10.          (vlax-invoke
  11.            ServiceObj
  12.            'ExecQuery
  13.            "SELECT * FROM Win32_BIOS"
  14.          )
  15.   )
  16.   (vlax-for Obj ObjectSetObj
  17.     (setq SerialNumber
  18.            (vlax-get Obj 'SerialNumber)
  19.     )
  20.   )
  21.   (foreach Obj
  22.                (list LocatorObj ServiceObj ObjectSetObj)
  23.     (and Obj (vlax-release-object Obj))
  24.   )
  25.   SerialNumber
  26. )

Ну и на закуску - уникальный идентификатор компьютера (UUID):
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Get_UUID (/ LocatorObj ServiceObj ObjectSetObj UUID)
  2.   (setq LocatorObj
  3.          (vlax-create-object "WbemScripting.SWbemLocator")
  4.   )
  5.   (setq ServiceObj
  6.          (vlax-invoke
  7.            LocatorObj 'ConnectServer nil nil nil nil nil nil nil nil)
  8.   )
  9.   (setq ObjectSetObj
  10.          (vlax-invoke
  11.            ServiceObj
  12.            'ExecQuery
  13.            "SELECT UUID FROM Win32_ComputerSystemProduct"
  14.          )
  15.   )
  16.   (vlax-for Obj ObjectSetObj
  17.     (setq UUID
  18.            (vlax-get Obj 'UUID)
  19.     )
  20.   )
  21.   (foreach Obj
  22.                (list LocatorObj ServiceObj ObjectSetObj)
  23.     (and Obj (vlax-release-object Obj))
  24.   )
  25.   UUID
  26. )

И на основе вот этого: http://www.nextofwindows.com/the-best-way-to-uniquely-identify-a-windows-machine
Код - Auto/Visual Lisp [Выбрать]
  1. (defun get-machine-guid ()
  2.   (vl-registry-read
  3.     "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography"
  4.     "MachineGuid"
  5.   )
  6. )

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Не уверен, что WbemScripting будет всегда работать. Скорее всего админ запретит его для обычных пользователей.
Возможны и другие проблемы. Обсуждение их здесь: Проблемы использования WMI
« Последнее редактирование: 17-12-2015, 12:07:18 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
На основе предыдущего кода. Получаем серийный номер материнской платы:
То же самое, только из BIOS:
Ну и на закуску - уникальный идентификатор компьютера (UUID):
в картинке результат работы этих функций на компьютере, собранном вручную (возможно, если б это был ноут или запаяный деловский или HP-шный корпус, было бы более информативно ))) )
ID процессора, который мы вроде как получили, ни кто направо и налево не меняет
увы, это не серийный номер, а набор циферок-буковок, которые набираются из характеристик процессора. скажу одно, поменять его руками практически никак, он не меняется после повторного включения компьютера ))). пользоваться можно, но не ТОЛЬКО ЭТИМ полем, а совместно с другими. UUID работает (правда возможен вариант, когда первых три набора идут с нулями, если верить документации).

короче говоря, вот так выглядит файл лицензии у меня:
Цитировать
Application:название приложения| <- думаю тут всё понятно
360UserID:XXXXXXXXX| <-идентификатор Autodesk360
MAC:XX:XX:XX:XX| <- мак адрес. не надежно, но не страшно ))) Win32_NetworkAdapter.MACAddress
UUID:XXXXXXXXXXXXXXXXXXXXXXXX| <- Win32_ComputerSystemProduct.UUID
ProcessorId:XXXXXXXXXXX| <- Win32_Processor.ProcessorId
Status:request| <-(ну или ключевое слово, позволяющее перейти в оффлайн режим работы)
KEY:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| <- рандомно генерируется ключ
и так, если пользователь прошел онлайн проверку (хотя б один раз), генерируется такой файл. сам файл естественно шифруется. функции шифрования написал выше.
получение оффлайн лицензии возможно ТОЛЬКО в случае наличия этого файла. т.е. если установил купленную прогу на 10 компов, то файл запроса лицензии появится только на тех компиках, где входил под своим аккаунтом в Autodesk360 и ЗАПУСКАЛ программу.
дальше, если хочет офлайн, нужно на мыло отправить ключик, состоящий из значений полей: Application|360UserID|KEY
В ответ он получает ключ для того, чтоб файл запроса офлайн лицензии поменялся на полный файл лицензии. Естественно, перед тем, как выдать ключик можно зайти в магазин и глянуть, сколько версий проги купил человечек с этим UID-ом ))).
в открытом виде никакая информация не передается. есть три набора алфавита
1. ABCDE...
2. VGDHA...
3. GRDSL...
инфа внутри файла лицензии лежит в первом варианте алфавита.
мне передается код запроса во втором варианте алфавита
я отправляю код активации в третьем варианте алфавита.
ну и естественно, вся работа происходит в первом варианте алфавита, значит есть функции для превращения набора буковок-циферок ИЗ-В

Не уверен, что WbemScripting будет всегда работать. Скорее всего админ запретит его для обычных пользователей.
если у пользователя такие вольготные условия, что даже интернет есть ))), то вряд-ли закрыт WMI ). ну а если и закрыт, то работа будет только с онлайн лицензией, что тоже лично для меня не сильно страшно.
И на основе вот этого: http://www.nextofwindows.com/the-best-way-to-uniquely-identify-a-windows-machine
очень интересно. нужно потестировать. как проверю, отпишусь по этому поводу.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
почитал про MachineGuid. Это ключ, который использует криптография виндузов. без проблем его можно поменять на тот, который хочется. если просто удалить и перегрузиться, виндуза сгенерят новый.
http://forum.screenconnect.com/yaf_postst1694_MachineGuid-reset.aspx#post6966

PS: перестают работать программы, которые создают свой ключ на основе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid. Простая переустановка переставших работать программ решает проблему )))
http://blogs.msdn.com/b/vivekkum/archive/2009/02/14/machinekey-in-iis.aspx (много букв ни о чем. всё важное в последнем абзаце статьи))) )

так что уж если и привязываться к чему-то, то только к тому, что сложно поменять и уж точно таких привязок должно быть больше, чем одна (например, работать можно если совпало минимум 2/3 или 3/5 привязок). пусть в результате получится не уникальный набор данных в целом, но вероятность того, что одна и та же лицензия будет работать на нескольких компьютерах даже одного отдела уменьшается с увеличением количества привязок.
ну, еще пару слов о процессоре. хоть ProcessorId и не является серийным номером, но для четырех одинаковых процессоров купленных из одного ящика (серийные номера на коробках сверить не получится, чтоб узнать идут ли они подряд))), коробки уже давно сгнили на свалке) я получил четыре разных набора буковок-циферок.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
1) ProcessorId не обязательно уникален.
2) Это фишка Intel, а процессор может быть и не Intel
3) Получение CPUID может быть отключено в BIOS.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
1) ProcessorId не обязательно уникален.
2) Это фишка Intel, а процессор может быть и не Intel
3) Получение CPUID может быть отключено в BIOS.
увы, это жизнь ))). но другого выхода нет. чем больше брать параметров и чем меньше порог проходимости (2/3 параметров или 2/10) тем больше вероятность того, что хоть что-то будет работать (или что комп разберут на части для сбора нескольких других машинок ))) для установки одного ключа на них))) ). и в любом случае, ключ генерится только если всё срабатывает, в противном случае остается только онлайн защита.
кстати, один из самых простых способов получения уникального ключа для виндузов делается на основе времени создания папки виндузов на компьютере ))). завалить  ключ можно только переустановив windows ))). хакнуть можно написав маленький досовый экзешник, который установит дату создания папки на требуемом компьютере в нужное время ))).
так что повторюсь, взлом защиты должен превышать цену покупки. этого вполне достаточно

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
Так как топик посвящен защите ПО, то хотелось бы узнать, как уважаемые форумчане пишущие на .net защищают свой од от просмотра и как выглядит защита этого кода?

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
работать можно если совпало минимум 2/3
При этом мне кажется, если из 3 параметров совпало только 2, то 3-й стоит переписать на новое значение?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
в картинке результат работы этих функций на компьютере, собранном вручную (возможно, если б это был ноут или запаяный деловский или HP-шный корпус, было бы более информативно ))) )
Эта информация не является неизменяемой.
У меня был случай, когда я обновлял BIOS своей материнской платы. После этого, слетела регистрация всех моих автокадов и у меня не получилось никак их заново активировать. Помню, я даже обращался в ADN за помощью в этом вопросе.
Дело оказалось вот в чем: в утилите обновления есть кнопка "Clear DMI". Ну я ее и нажал, по глупости, удалив, тем самым, данные о номере матплаты из BIOS. В итоге, удалось раскопать инструмент, который позволил вбить этот номер заново и проблема пропала.
http://www.gigabyte.ru/forum/viewtopic.php?f=58&t=84520&p=398811#p398811

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Цитировать
При этом мне кажется, если из 3 параметров совпало только 2, то 3-й стоит переписать на новое значение?
ага, только делать это желательно незаметно для пользователя (дата последних изменений файла лицензии меняться не должна, чтоб пользователь ничего не заподозрил ))) )

Так как топик посвящен защите ПО, то хотелось бы узнать, как уважаемые форумчане пишущие на .net защищают свой од от просмотра и как выглядит защита этого кода?
хоть я и начинающий дотнетовец ))) (жизнь заставила разбираться с ревитом))) ) но на этот вопрос ответ один - обфускаторы. по факту, на любой обфускатор есть "деобфускаторы", да и, как пишут люди, после обфускации иногда увеличивается время обработки функций. в принципе, это имеет право оказатья правдой, ведь обфускация не защищает код, а путает следы ))). так что правильный ответ будет... увы никак. из советов в интернете советуют на дотнете делать то, что не жалко, а всю логику выносить в web сервисы или писать на с++. по факту, на c# пишут полностью всё))) в надежде на порядочность и особо не заморачиваются возможностью взлома.
уж что точно не стоит писать на c#, так это защиту ))) с открытым ключом проверки.

Эта информация не является неизменяемой.
тут вот в чем дело... я и не утверждал, что это константы, выцарапанные гвоздем на заводе))). но какова будет вероятность того, что это компьютер, для которого была получена лицензия, если 4/5 характеристик не совпали с данными ключа? а так как в тех полях просто мусор, скорей всего одинаковый для всех компьютеров на моей фирмы ))), т.к. готовое в принципе не берем, а собираем под себя и свои требования, то данные поля в ключе перекинутом на разные компьютеры совпадут, что уж точно не есть хорошо. пользоваться лучше осмысленными полями, хоть вероятность нарваться на пустое всегда остается. отсюда вывод - чем больше полей возьмем, тем лучше.

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Ну в общем так и сделал, собрал серийник из:
  • части Mac адреса,
  • части GUID-а,
  • кода приложения,
  • части  ProcessorId.
Но вот примерно каждый третий серийник стал приходить, где часть Mac адреса,и часть GUID-а, совпадают.
Тогда проверил ещё раз что возвращают эти функции, на моём ПК
Get_MacAddress -> ("FC:8B:97:0A:52:FE" "48:5B:39:97:5B:88")
Get_GUID -> "7E529360-FE8D-11D5-84C5-485B39975B88"
и оказалось они содержат общую часть...

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
Свеженькая статья на эту тему от Kean Walmsley: Securing your AutoCAD app using .NET

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
А если еще и код вот такой штукой закрыть: http://www.eziriz.com/dotnet_reactor.htm, то вполне надежно может получиться :)

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Свеженькая статья на эту тему от Kean Walmsley: Securing your AutoCAD app using .NET
ну допустим это перепечатка старого материала с теми же косяками :)
первое и самое главное, теоретически я не знаю, как в конечном итоге назовут моё приложение в магазине.
на практике создается просто публикация с интересующим меня именем без отправления на проверку. ну и после создания публикации я вижу имя, которое мне присвоили. следовательно, зашивать :en мягко говоря не разумно, особенно если локализаций несколько в одном инсталляторе. сейчас, например, они штампуют еще суффиксы, например "_windows32and64" к имени приложения.
короче говоря. зашивать нужно ТОЛЬКО имя приложения, которое вводится на страницу при начале публикации, остальное - от большой фантазии

пример из реальной жизни :). есть приложение copyEx. следовательно, запросы (все запросы проверил, так что 100% инфа :) )
appstore.exchange.autodesk.com:copyex
appstore.exchange.autodesk.com:copyex_windows32and64:ru
appstore.exchange.autodesk.com:copyex_windows32and64:en
appstore.exchange.autodesk.com:copyex_windows32and64
appstore.exchange.autodesk.com:copyex_windows32
appstore.exchange.autodesk.com:copyex_windows64

для валидного пользователя вернут один и тот же вариант - "true". да оно и правильно. если человек скачал английскую версию, то в русской, доступной в том же инсталляторе он должен работать без лишних телодвижений.
и вот если я знаю, что моё приложение называется copyex, страница публикации приложения говорит, что ссылка на проверку заканчивается на copyex без всяких суффиксов, какой мне смысл заниматься отсебятиной, которая через время может перестать работать?
например,
appstore.exchange.autodesk.com:copyex_lol32 возвращает false :):):). где гарантия того, что через пол года "_windows32" не вернет false?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Можно там в комментариях у Кина уточнить этот вопрос - нужно ли указывать версию виндовс и локализацию.
Мне вот еще интересно, почему-то для меня, как разработчика приложения, при попытке проверить пользователя, всегда возвращается False:
{"UserId":"<тут мой ONLINEUSERID>","AppId":"appstore.exchange.autodesk.com:civiltableexport","IsValid":false,"Message":"Ok"}Приложение бесплатное. Я его даже еще раз скачал и переустановил - не помогает.
Это у всех так?

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Мне вот еще интересно, почему-то для меня, как разработчика приложения, при попытке проверить пользователя, всегда возвращается False
ну на это могу ответить и я :). true возвращается ТОЛЬКО если приложение платное и ТОЛЬКО если для данного приложения в таблице есть указанный ID. засунуть свой ID туда можно двумя способами:
1. купить свое собственное приложение
2. попросить автодесковцев добавить ID в таблицу купивших приложение.

PS: вариантом №2 они всей толпой пользуются для тестирования онлайн защиты. мне на каждое приложение (всего их сейчас 2) приходят 2-3 письма (одно письмо на одного добавленного), что такие-то товарищи добавлены в список:
The following users are now entitled by Autodesk App Store admin to download ...
ну и если потом попользоваться их ID :):):) для проверки валидности, то возвращает true.


Можно там в комментариях у Кина уточнить этот вопрос - нужно ли указывать версию виндовс и локализацию.
а смысл? я как-то пытался выяснить почему на возврат всегда false идет в такого же рода комментариях после публикации. а выяснил только пообщавшись с магазинными товарищами. скорей всего ответом будет - я просто перепечатал старую тему снабдив её видео. для более детально информации... и куча ссылок :)

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
ТОЛЬКО если приложение платное
Но ведь приложение Screenshot, о котором речь в статье идет, не является платным. И для него с моим ID вернуло True, после того, как я его скачал и установил.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Но ведь приложение Screenshot, о котором речь в статье идет, не является платным. И для него с моим ID вернуло True, после того, как я его скачал и установил.
хихи, а я даже не устанавливал и тоже true. а после этого скачал еще пару бесплатных программ. и для них - false.
так что это у Кена нужно выяснить, почему его уникальное приложение возвращает true, а остальные не хотят ))).
может причина в том, что оно с 2012 года висит. может тогда добавлялись пользователи и для бесплатных приложений. ну и скрипт оставили без изменений до сих пор, не знаю.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Можно там в комментариях у Кина уточнить...
я вот не поленился и спросил ))). ответ достоин внимания )))
PS: кстати, там в вопросе я вставил ссылочку, где есть картинка с красным прямоугольничком, указывающим на имя приложеения, которое и нужно вставлять в проверку.

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
ответ достоин внимания )))
Скромничает однако.
Хотя если присмотреться, то тут используют  RestSharp, а он использовал продукт от Newtonsoft. Мелочь, а приятно.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 164
  • Карма: 14
Хотя если присмотреться, то тут используют  RestSharp, а он использовал продукт от Newtonsoft.
:) я например вообще обошелся стандартным winhttp из С++. суть то одинаковая - ушел запрос, пришел ответ. http-шных библиотек полно и платных и бесплатных, и стандартизированных и самопальных :). вопрос только в том, что бездумно перепечатывается одно и то же из года в год. не спорю, на данный момент такой вариант работать будет, но если поменяется политика и добавят чего-то нового, убрав старое, то можно и натерпеться от пользователей, купивших приложение, за те 2-3 недели, пока будет перевыкладываться в магазин исправленный вариант онлайн защиты.

кстати, в дополнение к плагину screenshot.
там только английская версия, но true возвращается и для ":fr", ":ru", ":it" или букв любого другого языка, но если поставить что-то левое, например, ":aa", то возврат - false. возможно когда-то они пытались делать разбивку по языкам, типа скачал с английской страницы, значит запускать можно только английскую версию мультиязычного плагина и т.п. но потом поняли, что смысла в этом нет (но буквы по каким-то соображениям оставили :), так же, как и добавили недавно "_windows" и "_macos") и теперь нам приходится с этим развлекаться, постоянно задумываясь над тем, по какому ключевому слову проводить проверку согласно свеженьким мануалам.

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 335
  • Карма: 56
я например вообще обошелся стандартным winhttp из С++. суть то одинаковая - ушел запрос, пришел ответ.
Позвольте согласиться.  :D

Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Ну в общем так и сделал, собрал серийник из:
  • части Mac адреса,
  • части GUID-а,
  • кода приложения,
  • части  ProcessorId
В общем за год регистраций набрал статистики:

1) Функция vk_GetMacAddress выполняется дольше всех примерно секунд 5, и через раз выдаёт разные результаты, их как правило не больше 3  ;D но всё равно не приятно, в итоге отказался от неё.
2) Функция Get_ProcessorId работает стабильно, даже после переустановки системы выдаёт тоже значение, но как показала статистика, этих значений не много, очень часто встречаются одинаковые у разных пользователей.
3) Функция Get_UUID вроде тоже стабильны, и ещё не видел повтарений, можно впринципе только её одну и использовать.
« Последнее редактирование: 02-08-2016, 11:33:55 от Geobuilder »

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
2) Функция Get_ProcessorId работает стабильно, даже после переустановки системы выдаёт тоже значение, но как показала статистика, этих значений не много, очень часто встречаются одинаковые у разных пользователей.
3) Функция Get_UUID вроде тоже стабильны, и ещё не видел повтарений, можно впринципе только её одну и использовать.
В общем пишут мне периодически, что переустановили систему и серийник поменялся, т.е. это всё же эти функции не столь стабильны, о чем не однократно предупреждали, или пользователи меня обмануть хотят?
И как дела обстоят с прочим лицензионным ПО после переустановки системы? Просто как то я сам с переустановками ни разу не сталкивался...

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

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

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
И как дела обстоят с прочим лицензионным ПО после переустановки системы? Просто как то я сам с переустановками ни разу не сталкивался...
С продуктами Autopdesk аналогично - код запроса новый.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
ProcessorID (он же CPU ID) - это та информация, которую выдает процессор по соответствующему запросу к нему. Не верю, что он может измениться после переустановки ОС.
UUID хранится в биосе. Как я считал, он формируется и задется при сборке ПК и уже впоследствии не изменяется (если, конечно, не использовать специальный софт). Но, вроде пишут, что может измениться при переустановке: http://www.cyberforum.ru/csharp-net/thread929851.html
Судя по этому: http://vlab.su/viewtopic.php?f=235&t=31336, даже если что-то в UUID изменилось, должна остаться неизменной часть, которая формируется из MAC-адреса сетевой карты. Сверьте новый UUID со старым, если совпадает неизменная часть, то, скорее всего, не обманывают. 

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

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

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
должна остаться неизменной часть, которая формируется из MAC-адреса сетевой карты
Подменить MAC-адрес настолько просто в Windows, что с этим справится даже ребёнок - так что это ненадежный идентификатор.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
А если ProcessorId
ProcessorID точно не меняется, но очень часто эта информация недоступна и выдаётся один и тот же номер
Да, он ни разу не изменился, но он у каждого второго одинаковый  :( Так что даже по его части не понятно будет обманывают или нет, т.к. он легко может быть на другой машине такой же.


С продуктами Autopdesk аналогично - код запроса новый.
Т.е. купил чувак лицензионный AutoCAD, переустановил систему и всё, покупай новую лицензию?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Т.е. купил чувак лицензионный AutoCAD, переустановил систему и всё, покупай новую лицензию?
Нет. Во-первых, если переустановка системы плановая (т.е. система жива), то можно воспользоваться утилитой перемещения лицензий перед переустановкой Windows. Во-вторых, даже если лицензия не была перенесена перед переустановкой Windows, можно несколько раз получать код ответа на один и тот же серийный номер продукта Autodesk и выполнять его авторизацию. В-третьих, если количество установок на один и тот же номер было превышено можно обратится к партнеру Autodesk, у которого приобретался продукт и он выполнит авторизацию, предварительно пожурив вас за то, что вы не воспользовались утилитой перемещения лицензий.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Он НЕ хранится в биосе, а хранится в реестре.
А Вы не спутали его с MachineGuid? Я немного погуглил, вроде все пишут, что UUID в BIOS хранится. Но информации об этом из каких-нибудь более-менее авторитетных источников не нашел.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Он НЕ хранится в биосе, а хранится в реестре.
А Вы не спутали его с MachineGuid? Я немного погуглил, вроде все пишут, что UUID в BIOS хранится. Но информации об этом из каких-нибудь более-менее авторитетных источников не нашел.
Он похоже генерируется на основе каких-то данных из BIOS и еще чего-то, что не содержится в BIOS. И хранится в реестре. И именно поэтому при переустановке Windows оно меняется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
то можно воспользоваться утилитой перемещения лицензий перед переустановкой Windows.
Ну не писать же мне сейчас такую утилиту для 5$ приложения. :-(
можно несколько раз получать код ответа на один и тот же серийный номер продукта Autodesk и выполнять его авторизацию.
Т.е. мы можем легально установить 5 копий одного продукта на 5 машин скажем в своём отделе?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Т.е. мы можем легально установить 5 копий одного продукта на 5 машин скажем в своём отделе?
Просто, как я понимаю, они так решили проблему активации при переустановке системы или другой похожей ситуации. Установить вы можете хоть миллион копий :) А вот использовать в работе одновременно можно только то количество копий, сколько куплено лицензий.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Он НЕ хранится в биосе, а хранится в реестре.
В таком случае, его бы и получали из реестра. Зачем же все тогда используют методы WMI для этого?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Т.е. мы можем легально установить 5 копий одного продукта на 5 машин скажем в своём отделе?
Легально - нет. То, что у тебя будет установлено и работать 5 продуктов не значит, что все 5 ты используешь легально, если купил только один. Если по документам ты купил одно рабочее место - то легально только одно рабочее место можешь использовать. Но это уже юридические тонкости, с которыми не дай Бог тебе столкнуться...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
В таком случае, его бы и получали из реестра. Зачем же все тогда используют методы WMI для этого?
А ты думаешь WMI работает не с реестром? ;) Во многих случаях именно с ним. Просто однократно это значение (рас)считывается и записывается в реестр. А оттуда уже используется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Положа руку на сердце, честно Вам признаюсь, что в тонкостях работы WMI я абсолютно не разбираюсь :). Просто мне непонятно то, что гораздо проще же и надежнее просто прочитать значение из реестра, чем пользоваться методами WMI. Неужели никто до этого не додумался?
Если верить вот этой статье: http://www.windowsnetworking.com/articles-tutorials/windows-7/Deploying-Windows-7-Part18.html, то UUID можно получить даже с компьютера без ОС.

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
Просто мне непонятно то, что гораздо проще же и надежнее просто прочитать значение из реестра, чем пользоваться методами WMI.
Я тоже об этом подумал.

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Просто мне непонятно то, что гораздо проще же и надежнее просто прочитать значение из реестра, чем пользоваться методами WMI. Неужели никто до этого не додумался?
Не думаю, что оно там хранится в удобоваримом виде. Впрочем спорить не буду. В любом случае далеко не все материнки поддерживают UUID. В отличии от старых IBM-360/370 (и советской серии ЕС-10XX), которые все имели реальный CPUID и все они были уникальны, на PC этого нет и видимо никогда уже не будет - не вижу попыток реальной стандартизации. Вроде что-то и вводили, но как-то через одно место...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1268
  • Карма: 247
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Эх, не поленился я между делом поставить Windows 7 x32 параллельно с Ubuntu 9.10 на древнющий Acer Extensa 5220, который валяется в шкафу уже пару лет. Что могу сказать: не изменился UUID после обеих инсталляций! Единственное, что Ubuntu и Windows по разному его показывают:
Ubuntu: 34C04320-76B7-11DC-A503-E5CF2AB6A82A
Windows: 2043C034-B776-DC11-A503-E5CF2AB6A82A
Что интересно, при этом, MAC-адреса обеих сетевых карт не совпадают с концовкой UUID. Также, при изменении MAC-адресов, UUID остается неизменным.

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
А какие мысли на счёт привязки к ONLINEUSERID ?
Если ПК без интернета, то пользователь не сможет войти в учётку?
На скольких машинах одновременно пользователь может быть одновременно авторизован?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Если ПК без интернета, то пользователь не сможет войти в учётку?
А проверить? Отключи интернет и запусти AutoCAD. У меня ONLINEUSERID не изменился при запуске при отключенной сети.

На скольких машинах одновременно пользователь может быть одновременно авторизован?
А вот на это я бы не стал рассчитывать. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyugin

  • ADN Club
  • ***
  • Сообщений: 195
  • Карма: 15
  • Геодезист
А проверить? Отключи интернет и запусти AutoCAD. У меня ONLINEUSERID не изменился при запуске при отключенной сети.
Проверял конечно, если ранее входил в учётку то всё норм. А если выйти то без интернета уже не войти, впрочем как и не выйти
А вот на это я бы не стал рассчитывать. 
Вот тут и не понятно, смогут ли под одним аккаунтом войти 10 ПК в отделе? Т.е. купив одну лицензию, пользоваться под одной учёткой всем отделом? Пусть даже не разом, а по очереди, потом отключить интренет и можно пользоваться?

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

  • Administrator
  • *****
  • Сообщений: 6890
  • Карма: 769
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот тут и не понятно, смогут ли под одним аккаунтом войти 10 ПК в отделе? Т.е. купив одну лицензию, пользоваться под одной учёткой всем отделом? Пусть даже не разом, а по очереди, потом отключить интренет и можно пользоваться?
Об этом я и написал, что рассчитывать на это нельзя. Раньше на форум Autodesk можно было зайти из разных мест под одной учеткой одновременно. Сейчас нельзя. Что придумают очередное с этим - я прогнозировать не берусь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение