Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - FlexLM без проблем
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Поиск ТОП Добавить публикацию

FlexLM без проблем

13.10.2008

Обращаем внимание, что данная публикация взята из архива.
Возможно, что информация, изложенная здесь, частично устарела

Что же это, FlexLM?

FlexLM - популярный менеджер лицензий от Globetrotter Inc.Его используют многие ведущие разработчики программного обеспечениятакие как Sun Microsystems, Apple, Corel, Adobe, для защиты своих программных продуктов. Полный список фирм есть на Web сервере фирмы. Там не меньше 100 названий. Обычно это дорогие интересные продукты (дешевле $1000 за 1 пользователя я еще не встречал. ;-) Система защиты существует для большинства известных UNIX платформ, MS Windows. Globetrotter считает свой продукт ведущим в области и самым надежным.

FlexLM позволяет производить контроль за запуском программ в сети, используя сервер лицензий. Система позволяет контролировать количество запущенных в сети версий продукта, ограничивать срок действия продукта, используемые версии. Общая схема защиты состоит из четырех компонент:

    • License manager (lmgrd).
    • Vendor daemon.
    • Файл лицензий (license.dat).
    • Защищаемый программный продукт.

На сервере запускается менеджер лицензий и считывает конфигурацию из файла лицензий. Согласно конфигурации запускаются демоны производителей программного обеспечения, проверяющие соответствующие строки лицензий. Программное обеспечение обращается к серверу лицензий каждый раз привыполнении ответственных операций, а также по таймеру примерно раз в 120сек. - так называемый heartbeat. Расположение сервера определяется по переменной LM_LICENSE_FILE. Ее значение - или путь до файла лицензий или вида [email protected]  

Формат файла лицензий.  

Обычный файл лицензий выглядит так:

SERVER    servername    hostid    [port]

DAEMON vendord /path/to/daemon/vendord [/path/to/file/license.opt]

FEATURE featurename vendord version expirationDate #n_licenses KEY "vendor_string" [OPTIONS]
 

 

Файл начинается со строки SERVER. Их так же может быть три при системе из 3х серверов. Строка кроме ключевого слова содержит имя сервера, его hostidи номер порта, на котором будет висеть демон. Имя сервера используется лишь для проверки соответствия при запуске и в проверке лицензии не учавствует. Hostid - уникальный номер характеризующий сервер. В разных системах он получается по разному. Для SUN этот номер прошит в eeprom, для DEC, PC это MAC-адрес сетевой карты(для его получения требуется установка протокола IPX), для PC это так же может быть серийный номер раздела на котором установлена Windows или номер предоставляемый аппаратной заглушкой(Sentinel), etc. Вместо hostid может быть слово ANY, тогда номер указывается в параметре HOSTID в разделе options строки лицензии. Значение порта может быть опущено, оно будет взято из базы системных сервисов.

Строка DAEMON определяет путь до демона производителя софта. Третий, необязательный параметр - указатель на файл license.opt - опции для демона производителя. Таких строк может быть любое количество.

Далее следуют строки лицензий. Они могут начинаться словами FEATURE, INCREMENT, FEATURESET, PACKAGE, UPGRADE.

FEATURE, INCREMENT используются для описания лицензий. Ключевое слово INCREMENT может использоваться вместо FEATURE или для добавления дополнительных лицензий. Cуществует очень простое правило: для каждого featurenameможет быть только одна строка FEATURE и она должна стоять до любой из строк INCREMENT этого же продукта. Поддерживаются следующие опции:

     
       
    • VENDOR_STRING='vendor_string' - заключенная в кавычки строка определяемая производителем. Может иметь до 64 символов, кроме кавычек. При шифровании из строки исключаются пробелы.
    •  
    • HOSTID=12345678 - номер для лицензий, привязанных к определенному hostid. Возможна привязка к Интернет адресу: HOSTID=INTERNET=195.121.*.*
    •  
    • vendor_info='vendor_info' - дополнительная информация производителя продукта. Не криптуется.
    •  
    • dist_info='dist_info' - дополнительная информация от продавца программного обеспечения. Не криптуется.
    •  
    • user_info='user_info' - дополнительная информация, добавленная сетевым администратором или пользователем. Не криптуется.
    •  
    • asset_info='asset_info' - дополнительная информация, добавленная сетевым администратором для asset менеджмента. Не криптуется.
    •  
    • ISSUER='issuer' - Изготовитель лицензии.
    •  
    • NOTICE='notice' - Строка для копирайта, etc.
    •  
    • ck=nnn - Контрольная сумма. Используется для проверки корректности введенной конечным пользователем или администратором лицензии. Не криптуется.
    •  
    • OVERDRAFT=nnn - Разрешение на использование дополнительного количества лицензий, сверх купленного. Превышение отмечается в логе. (версия 4.0 и выше)
    •  
    • DUP_GROUP=NONE|SITE|UHDV - Дублирование группы (v4.0 и выше). Используется чтобы пользователь с одинаковыми параметрами (host, display, etc) не занимал дополнительную лицензию. U - DUP_USER, H - DUP_HOST, D - DUP_DISPLAY, V - DUP_VENDOR_DEF. Допустимы любые комбинации.

В получении ключа лицензии (криптовании) используются только опции написанные заглавными буквами. Кроме описанных опций могут быть дополнительные опции определяемые производителем софта. Например: DOMAINNAME (Sun), VOLUME_NUMBER (Altera).

FEATURESET vendord KEY
 

 

FEATURESET строка используется для блокировки от изменения FEATURE линий в файле лицензий.

PACKAGE suite vendord version #licenses KEY COMPONENTS='comp1 comp2' OPTIONS=SUITE
FEATURE suite vendord version expiration_date #licenses KEY ""
 

 

PACKAGE строка используется для описания пакета программ. Компоненты описываются в виде feature[:version[:count]]. Если задано OPTIONS=SUITE, то строка FEATURE c соответствующим именем checked out (Пардон, даже не знаю как это сказать по-русски, но я надеюсь понятно). Если OPTIONS=SUITE не задано, соответствующая строка FEATURE игнорируется.

FEATURE featurename vendord version expdate #lics KEY ""
UPGRADE featurename vendord version new_version expdate #lics KEY ""
 

 

UPGRADE строка преобразует указанное количество лицензий с версии version до new_version.

#lics = 0. Отдельный случай - когда количество лицензий в строке - ноль. Такие лицензии привязываются к конкретной машине. Для работы такой строки она содержит дополнительные опции, такие как DEMO, HOSTID=12345678, DOMAIN="uma.net", VOLUME_NUMBER=1234567. Такие строки игнорируются license демоном и проверяются самим продуктом. Сервер для таких лицензий не требуется.  

Как это лечится.  

Я думаю это самый интересный для всех вопрос. Можно ли сделать самому лицензии для этого "крутейшего и надежнейшего" диспетчера лицензий N1?

Правильный ответ - ДА! Вы будете смеяться, но хваленый продукт не имеет никакой защиты от изучения кода и проходится любым дебаггером. Единственная "защита" отрезанная символьная таблица имен. Тем более смешно, что некоторые системы позволяют эту информацию восстановить (Solaris например ). Более того, продукт имеет оригинальную схему проверки ключа - считается правильный ключ и сравнивается с данным. Это дает замечательную возможность создавать собственные ключи любого содержания.

Сначала немножко теории. Как получается ключ лицензии? Защищаемая строка и hostid сервера для которого она предназначена шифруются с двумя 32-битными числами - ENCRYPTION_SEEDs. Эти два числа являются секретными и выбираются производителем. Как показывает опыт, обычно продукты для разных платформ одного производителя имеют одинаковые ENCRYPTION_SEEDs, для возможности инсталляции license сервера на произвольной платформе.

	mov     	20, %o2
mov %i0, %o1
call strncmp
mov %i4, %o0
orcc %g0, %o0, %g0
bne,a 0x16ef0
nop
 

Это фрагмент проверки ключа лицензии. Ключ просто сравнивается вызовом функции strncmp c ограничением длины 20 символами - длиной ключа. Сразу за этим идет сравнение возвращенного значения %o0 с нулем %g0 - равенство строки.  

lu_gethostid()

	sethi   	%hi(0xfffffc00), %g1
add %g1, 0x330, %g1
save %sp, %g1, %sp
add %fp, -101, %o1
mov 7, %o0
mov 100, %o2
call sysinfo // sysinfo, function=7: SI_HW_SERIAL
nop
add %fp, -101, %o0
add %fp, -108, %o2
sethi %hi(0x61c00), %o1
or %o1, 0x15c, %o1
call sscanf
nop
ld [%fp - 108], %o0
ba m001
nop
m001:
mov %o0, %i0 // host_id
ret
restore
 

lu_gethostid получает и возвращает hostid системы.

Для получения лицензии для произвольного хоста необходимо составить файл лицензий с необходимыми опциями, иметь vendor daemon производителя продукта и минимум времени. Совет: при составлении файла лицензий располагайте линии с одинаковым именем продукта друг за другом. FEATURE line должна быть первой. Порядок версий значения не имеет. Одинаковые линии инкремента должны различаться строкой в кавычках ("0", "1", etc.). Впишите временные произвольные значения 20-символьных ключей. Главное - они не должны повторяться!

Далее можно 2мя способами - дебаггером или с помощью своей библиотеки. Какой из них прменять - решать вам. Если вы хотите использовать библиотеку - вам необходимо сделать две свои функции - strncmp() и lu_gethostid(). lu_gethostid должна возвращать необходимый u_long hostid. strncmp должна выдавать в stderr значения подаваемых строк если заданная длина = 20. Загрузите эту библиотеку перед штатными, например определив LD_PRELOAD, и получайте удовольствие:

vendord -T hostname 4 -c license.dat

Второй способ использует дебаггер, например adb (Solaris). Необходимо дизассемблировать демон производителя и найти в нем описанные выше места - проверку ключа и получение hostid. Далее vendord запускается в дебаггере.На найденные точки ставятся остановы и необходимая информация подменяется или просматривается.

	:s -T server 4 -c license.dat	# Command line
ls_feat_validate+0x248 :b # Check for correct code (suntechd)
lu_gethostid+0x3c :b # Get hostid
:c # Continue
12345678 >o0 # Hostid in o0 (lu_gethostid+0x3c)
:c # Continue

:k # Kill
$q # Quit

Оба способа легко автоматизируются для обработки больших списков или лицензий нескольких производителей одновременно. Здесь пример файла для генерации списка лицензий для продуктов Sun, защищенных suntechd. Этот файл лишь образец, его можно еще значительно улучшать. Каюсь, я так до сих пор и не попробовал создавать все лицензии с помощью одного демона, подменяя ENCRYPTION_SEEDs. Я пошел дальше, но об этом напишу позже.

Вроде все написал. Сейчас уже 4:20 утра, пива нет и хочется спать. Если я что-то забыл написать или написал не ясно, пишите, я буду рад. Можете присылать пиво, это я тоже ценю.

Vyacheslav.

e-mail: [email protected]

При копировании материалов ссылка на HackZone.RU обязательна

Добавить страницу в закладки

 Детали
Категория: Архив
Опубликовал: DiMan
Просмотров: 53758
Проголосовало через SMS: 0
  Разместить у себя на сайте
Прямая ссылка
HTML
BBCode ссылка
BBCode ссылка с текстом

 Комментарии (оставить свой комментарий можно здесь)
Только зарегистрированные пользователи могут оставлять комментарии

Зарегистрироваться *** Авторизоваться


 Последние новости и статьи  Последние сообщения с форумов
  • SpaceX и НАСА запретили сотрудникам использовать Zoom. Разработка...
  • В Firefox исправлены две 0day уязвимости
  • Хакерский форум OGUsers взломан
  • Уязвимости в Safari позволяли взломать камеру на iPhone и MacBook
  • Уязвимость в iOS блокирует шифрование трафика VPN
  • Зафиксирован новый случай использования крайне редкой атаки BadUS...
  • Опубликован способ обхода PPL для внедрения шелл-кода
  • ФБР ликвидировали deer.io
  • Пользователи iOS в Гонконге стали жертвами многофункциональной ма...
  • Украдены исходные коды графических процессоров AMD

    Все новости... Все статьи... Прислать новость RSS
  • Портал / Отзывы и предложения » Re: Make HackZone Great Again
  • Разное / Предложения работы » взлом сайта
  • Взлом и безопасность / Программы » ISBC Telecom обеспечит смс-информирование персонала на удале
  • Взлом и безопасность / Разное » Re: Живу в Туркменистане, SOS
  • Взлом и безопасность / Разное » Re: Живу в Туркменистане, SOS
  • Взлом и безопасность / Разное » Re: Живу в Туркменистане, SOS
  • Взлом и безопасность / Разное » Живу в Туркменистане, SOS
  • Разное / Предложения работы » Взлом CRM сайта
  • Портал / Отзывы и предложения » Re: Make HackZone Great Again
  • Разное / Ищу работу » Re: взлом почты на майле

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}