0
Отвечен

Проблемы с UUID в UROVO i3000

Максим 4 года назад в UROVO обновлен Александр Б. «РайтСкан» 3 года назад 27

Столкнулись с проблемой "привязки" лицензий стороннего производителя ПО. Лицензирование базируется на UUID устройства, но получить лицензию смогли только для одного терминала, все остальные при подключении автоматически считают себя лицензированными и начинают работать, как параллельные. Система все их распознает как первый подключившийся терминал. Производители ПО объяснили, что такое может быть, если у всех терминалов прошит одинаковый UUID.

В связи с чем возникают вопросы, возможна ли такая ситуация и как можно узнать UUID терминала?

Воспользовались утилитой PortTool от Navitel. Проверили десять устройств - все они оказались клонированными! У всех устройств одинаковый UUID и Device ID, по всей видимости это сделано для экономии на лицензиях для Windows CE.

Технический вопрос можно закрывать. Остается вопрос, как их теперь вернуть?

На рассмотрении

Максим, укажите пожалуйста название Вашей компании и контактные данные.

ООО "Джемини Электро"

г. Новосибирск,

тел. (383) 325-31-81 доп. 1180

Никто из них клонированным не является. Начиная с Compact 21013 вызов KernelIoControl с параметром IOCTL_HAL_GET_DEVICEID является необязательным (https://msdn.microsoft.com/en-us/library/ee478480.aspx). Т.к. в Windows нет единой функции получения ИД обрудования, то каждый производитель волен реализовывать свою. Что и сделано производителем Urovo в библиотеке Device.dll

.

Это многое объясняет в плане того, почему устройство вместо UUID отдает DeviceID, но не отвечает на главный вопрос, почему все идентификаторы в разных устройствах одинаковы?

Как быть теперь с ПО, которое привязывается именно к ИД оборудования?

Подобный подход противоречит самому смыслу идентификаторов, с таким же успехом их могло вообще не быть. Вот немного про UUID https://ru.wikipedia.org/wiki/UUID - этот идентификатор должен быть уникальным.

Именно в клонированных устройствах, когда одну прошивку тупо льют во все чипы, идентификаторы бывают одинаковыми. Мне кажется, что это именно так и это брак.

Просто однажды уже сталкивался с партией сетевых карт, залитых "под копирку", у которых был прошит одинаковый MAC-адрес. Такие устройства физически не могут работать в одной подсети. Здесь схожая ситуация - устройства с одним ИД не могут работать вместе в одной программной среде.



Плюс ко всему - это нарушение лицензионного соглашения с Microsoft.

"The Windows Thin Client must have a universally unique identifier (UUID) as part of the licensing agreement.

...

You must store the UUID in a region of nonvolatile memory, and must ensure that it cannot be erased or overwritten after the device has been shipped."

Источник: Working with UUIDs (Windows CE 5.0)

Извините, вы путаете мягкое с теплым. При чем тут Thin Client, UUID, и DeviceID? Это термины из разных областей

Thin Client или не Thin Client - не суть важно! Речь идет о лицензировании операционной системы вне зависимости от используемого устройства. Микрософт не двусмысленно заявляет, что наличие уникального идентификатора в нестираемой энергонезависимой памяти является неотъемлемой частью лицензионного соглашения для Win CE 5.0

Туд дело не в деньгах, количестве лицензий или чем-то ещё, тут дело в нарушении лицензионного соглашения - UUID не уникальны

Максим, мы обсудим с разработчиком ПО "Акселот" пути решения данной задачи. Свяжемся с вами в ближайшее время.

А какую версию софта пытаетесь установить?
1С:WMS Логистика. Управление складом 4 или 1С:WMS Логистика. Управление складом 3

Судя по исходному вопросу, речь идет о 1C: WMS 4.

В клиенте 1С: WMS 4 реализованы 2 способа получения Device Unique ID:

1. IOCTL_HAL_GET_DEVICEID https://msdn.microsoft.com/en-us/library/ms906162.aspx

2. GetDeviceUniqueID https://msdn.microsoft.com/en-us/library/ee488618.aspx

Причина, по которой первый метод может давать одинаковый результат, описан https://blogs.msdn.microsoft.com/windowsmobile/2006/01/09/getdeviceuniqueid/ . Собственно Николай прав, что первый метод может давать одинаковый результат, т.к. данный метод по сути устарел. Собственно потому был реализован второй метод, а вот почему и второй метод тоже дает одинаковый результат - это куда более интересный вопрос.


Дмитрий, Акселот.

Я могу вам предоставить завтра результаты теста GetDeviceUiniqueID на партии устройств. Но сам производитель рекомендует дергать метод GetDeviceID из их библиотеки. Дмитрий, насколько сложно вынести функцию определения уникального ИД устройства в отдельную библиотеку, документировать его, что бы это было головной болью производителя оборудования? Если вы так сделаете, то мы закроем этот вопрос в течении получаса.

Этот метод не подходит, т.к. позволяет клонировать устройства между складами. Например: у клиента 2 склада по 50 устройств, он может реализовать функцию получения ID такую, что она будет получать ID из файла на диске, разложив верно файлы, он сможет пользоваться всеми 100 устройствами, купив лицензий на 50. Потому мы используем только те методы, которые предоставляет ОС. Да, клонировать ОС можно, но затраты на создание 50 уникальных сборок ОС и раскладывание данных сборок на каждые 2 терминала сильно выше, чем приобрести полный комплект лицензий.

Дмитрий! Не намного больше времени и ресурсов займет написание dll, внедрение ее в секцию импорта вашего приложения, и перехват в ней вызова KernelIoControl например. В результате задача клонирования будет решена не менее эффективно :) Так что извините, но ваше обоснование выгладит несколько слабовато

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


PS Я правильно понимаю, что подход Urovo стандартен: нарушать ЛС от Microsoft, а заодно и все остальные лицензии своровать?

Начнем с ответа на второй пункт. Ни одна из лицензий Microsoft компанией Urovo сворована не была. Если вы знакомы с лицензионной политикой Microsoft на Windows CE, то вы должны знать, что стоимость OEM лицензии никак не зависит от количества выпускаемых вами устройств. Таким образом, невозврат уникального идентификатора устройства в приемлимом вам виде не есть "нарушение лицензионного соглашения". И небольшой оффтоп. Внедрение dll в секцию импорта не требует никакой пересборки приложения. Да и дизассемблировать его тоже не нужно.

насколько я знаю, стоимость оем лицензии также зависит от количества выпущенных устройств. А как урово обосновывает тот факт, что собранная ОС имеет полностью одинаковые Device Unique ID?

В целом этот спор бесполезен - вы можете пойти по пути взлома защиты нашего приложения (а в таком случае ответственность по УК РФ несет как тот кто взломал, так и тот кто использует эти устройства), по пути доработки терминалов и приведения его к стандартам MS, либо мы можем доработать приложение так, чтобы оно поддерживало работу именно с урово (мы можем реализовать не только поддержку вашего uuid, но и работу со сканером без разрыва клавиатуры) - стоимость данного варианта вы можете уточнить в коммерческом отделе Акселот.

Ну раз Вы решили перенести нашу дискуссию из технической плоскости в юридическую, то посмею вам напомнить следующие аспекты:
а) ни один из субъектов не зарегистрирован на территории государств, на которых имеет хождение DMCA.
б) т.к. "взлом" не ставит своей целью нарушение ваших имущественных и авторских прав на ПО (а именно - превышение количества проданных копий, распостранение ПО от своего имени и т.д.) то он попадает под ст. 1280.3 ГК (именно что ГК, а не УК) РФ. Напомню, что она гласит:
"3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:

1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ."

Может вернем нашу беседу в конструктивную, техническую плоскость, а не будем размахивать УК РФ (причем, совершенно не применимым в данной ситуации, тут разумнее ГК размахивать)?

Да давайте вернёмся в технические рамки. И решим проблему конечного клиента по установке ПО на тсд

боюсь, что конструктивно не получается именно у вас. Сначала, вы бодро рассказывали, что создание кряка это просто и весело. Теперь доказываете, что это еще и законно. Ну что-же следуйте данным путем, он весьма перспективен на ваш взгляд. Между тем 2 других пути я вам написал - а вы думайте.

кстати по какому кодексу трактовать данные действия решает суд, и выберет он ГК или УК знает только самый справедливый суд в мире. Между тем в самом УК в статье 273 ни слова не сказано о том что создание вредоносного ПО должно ставить целью нарушение имущественных прав. Там указан лишь сам факт создания данного ПО. Потому можете и дальше верить, что это можно делать, а вот УК с вами не согласен. В вашем случае статью надо читать так "создание компьютерных программ, заведомо предназначенных для нейтрализации средств защиты компьютерной информации." (И где тут про нарушение имущественных прав или выгоду?)

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

Дмитрий, диалог, судя по всему, зашел в тупик. Продавец данных терминалов написал нам в скайп примерно следующее: "производитель не гарантирует работу сторонних программ на своих устройствах", и это нормально, но производитель (региональные представители) пока никак не может прокомментировать тот факт, что стандартная системная процедура возвращает температуру воздуха в городе Пекине вместо запрошенных данных.

Так же имеется проблеме с обнулением пользовательских данных при полном разряде батареи. Видимо энергонезависимая память не такая уж независимая. Решением предлагается установка дополнительного костыля, который будет по новой создавать эти данные, но для этого нужно описать процесс в xml-файле и делать, по всей видимости, это придется компании Акселот, потому как мы не обладаем достаточной информацией по процессу установки мобильного клиента, да и с китайским языком есть некоторые затруднения - инструкция на китайском. Так же есть сомнения, что данный механизм сработает. Времени, к сожалению, не так много, чтобы тратить его на сомнительные эксперименты.

Мы и так потеряли уже почти месяц на решении данных проблем. Руководство рвет и мечет! Боюсь, что сегодня-завтра уже будут приняты какие-то кардинальные решения не в пользу UROVO.

Максим, к сожаленью, мы не сможем вам помочь. Адаптировать приложения имея инструкции на китайском мы не сможем. У нас нет таких специалистов. Мы разрабатываем приложения согласно рекомендациям разработчика ОС. Соответственно ожидаем, что все устройства выпускаемые с данной ОС соответствуют документации. Но существует Китай, и что взбредет в голову очередному китайскому производителю, мы предположить не сможем. Такие проблемы уже всплывали на ТСД неизвестных китайских производителей M3 Green и Proton, но данные производители пошли навстречу своим покупателям и исправили сборку ОС. Единственная рекомендация: использовать ТСД производителей, которые известны на рынке: Zebra, Motorola, Psion, Intermec, Honeywell, Datalogic, Casio, Chiperlab. Если уж брать китайцев, то берите Chiperlab.

А что за китайская инструкция о которой идет речь поясните пожалуйста?
Все инструкции для ТСД UROVO есть на английском и на русском языке, сборка Windows CE тоже английская.

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

Компания "РайтСкан" со своей стороны готова всячески содействовать в интеграции тсд UROVO с ПО Акселот: предоставить необходимую информацию, инструкции на доступном языке, терминал на тест, консультацию по железу и т.д.

К сожалению, без совместных с вами усилий, мы действительно не сможем помочь конечному заказчику, в данном случае ООО "Джемини Электро".

Мы 04.10.16 написали в адрес вашей компании(Акселот) очередное письмо о возможности и условиях интеграции. Ждем от вас принципиального решения и ответа.


Вот официальный ответ компании Axelot по вопросу совместимости ПО WMS4 и ТСД UROVO нам на электронную почту:


Ниже описание функции DeviceUniqueID() из .NET Compact Framework:

“This function returns an application-specific hash of the device identifier. The application can use this hash to uniquely identify the device.”

Тут явно написано о том, что приложение может использовать данный хэш чтобы уникально идентифицировать устройство. Разработчик программы "1С:Предприятие 8. WMS Логистика. Управление складом" ровно так его и использует.

Вы имеете возможность обратиться к разработчику ОС, компанию Microsoft и сообщить им, что данная функция на терминалах UROVO возвращает одинаковые значения. Если компания Microsoft подтвердит, что это приемлемо и исправит описание функции DeviceUniqueID(), то мы переделаем приложение согласно новым требованиям разработчика ОС.

Таким образом, мы заключаем, что:

1.Клиентское приложение для подключения радиотерминаловполностью соответствует требованиям тех ОС, которые указаны как допустимые

2. Приобретенные Вами ТСД UROVO имеют одинаковый Device Unique ID, что не соответствуют требованиям производителя ОС.

Рекомендуем вам обратиться к поставщику или производителю терминалов UROVO с просьбой привести ТСД к стандартам, указанным на msdn.


Дело в том, что ПО работает не на оборудовании, а в операционной системе и, соответственно, ПО разрабатывается не под требование оборудования, а под требования ОС. Оно никак не может быть несовместимо с оборудованием, если есть совместимость на уровне ОС. Тут обратная ситуация - ПО предъявляет определенные требования к конечному оборудованию. В данном случае оборудование не соответствует требования (лицензионному соглашению) установленной на него операционной системы.

Ответственность за подобные "выкрутасы" должен нести производитель.

Представьте себе ситуацию, что у вас не запустится какой-нибудь Firefox под Windows 7, потому что вы используете материнскую плату AsRock а не ASUS, например... ну ведь бред же!

Сервис поддержки клиентов работает на платформе UserEcho