FlexLM介绍

系列索引:VAPS XT入门教程索引

需求

微软的VS软件,一般也就四个版本:社区版、专业版、高级版、旗舰版。每个版本所对应的功能固定。

像VAPS XT这样的软件,除了核心功能外还有各种各样的Feature(特性,功能,或者模块),比如说是否支持与Matlab/Simulink通信、是否支持DOORS、是否包含源码、是否支持移植、是否支持记录预览回放等等,而像某些EDA软件,可能有几十几百个Feature。

如果不同的Feature有不同的使用时长。

如果需要一台做授权服务器,有多个PC做客户端使用。

这些Feature该如何管理?

FlexLM

Flexlm(Flexible License Manager) 是由Globetrotter 公司发明的软件加密方法,。Globetrotter 公司向软件厂商出售相关开发软件,软件厂商把此加密程序集成到自己的软件中。可以锁定机器的硬盘号,网卡号,使用日期,支持加密狗,以保护软件的知识产权。

做授权的,很多软件采用基于Flexnet技术做授权的,而Flexnet属于Flexerasoftware厂商。目前该产品线已经细化,Flexnet Publisher是专做做授权的,大家熟悉的可能是Flexlm。

FlexNet Publisher 是最佳的选择,它通过灵活的定价、打包和授权,很容易保护,强化和增加你软件的市场份额。它也可以给你权力来保护你的产品和非授权软件的市场占有份额而不会疏远的你的客户。FlexNet Publisher(前身为FLEXlm) 是Flexera Software 公司的产权关系管理方案的核心组件,它实现了软件授权许可管理的目的,可以在企业环境中为计算机软件提供多达上千种类型的授权许可,比如浮动授权,单机授权,按时间授权,按用户名授权等等。它能通过简化客户关系来帮助你增加企业收入。

FlexLM就是这一类软件,它可以管理各种Daemon,几万、几十万的Feature,各种check out优先级,简短的密钥,几十种Key Words,好多种获取方式,floating,node lock,几十毫秒的时间就能验证出合格Feature。

实现软件保护是一种软保护,不象dongle 那样需要硬设备,这样其维护和升级都很方便,比如要实现试用版、演示版、正版的转换,只要发个电子邮件就行了。属于这类的软件有Flexlm、ElanLM、SentinelLm等,其中以flexlm最为著名,很多大型专业软件都采用它进行加密,但是其安全性是没有保证的,不是因为它做得不好,而是因为人们对它的研究最深入和透彻。

授权证书

Flexlm所管理的是License文件,所以我们首先要了解License文件的结构,以便于运行Flexlm管理License文件。

License文件由注释行、Server行、Demon行、以及Feature行构成, 另外有一个续行符’'用来表示一行的继续。

注释行

当一行的开始是’#‘符号时,该行被License Manager(lmgr32xx)认为是注释行,有时候’|'也可以作为注释行的开始。

Server行

Server行用来标识一台特定的主机,其格式是:

1
2
3
4
5
6
7
8
9
SERVER nodename id port-number
| | | |
| | | |___TCP端口号,如 1700
| | |
| | |___主机的ID号,Win95/98/NT平台下通常是网卡物理地址
| |
| |___主机的名称,win95/98/NT下可以用ipconfig命令看到
|
|____Server行开头的关键字,标识该行为Server行,不能更改.

例如:

1
SERVER hostname 000012345678 TCP:1700   

Daemon(或Vendor)行

Deamon/VENDOR是类似供应商开发的软件的名称,因为有很多软件采用flexlm,Deamon/VENDOR是区分不同软件提供商的,因为一个server上可以有多个采用flexlm的软件(Deamon/VENDOR),其常见格式是:

1
2
3
4
5
6
7
DAEMON daemon_name daemon_path 
| | |
| | |___daemon的路径
| |
| |_______daemon的名字
|
|___Deamon行的关键字,Flexlm6.0以后的版本也支持用VENDOR

例如:

1
2
3
4
5
6
7
DAEMON cdslmd c:\cdslic\bin\cdslmd.exe
| |
| |___Cadence License Daemon的路径
|
|___Daemon的名字为cdslmd (Cadence License Manager Daemon 的简称)

VENDOR MPICRO

VAPS XT使用的供应商名为MPICRO。

Feature行

FEATURE是license的核心,我们可以把feature理解为一个软件中的各个模块,其常见的格式为:

1
2
3
4
5
6
7
8
FEATURE name vendor version expiration_date n Key Vendor_String hostID
| | | | | | | |
| | |_版本号 | | | | |_主机ID(可省略)
| | |_过期时间 | | |
| |_厂商标识 | | |
| | | |_厂商定义的字符串
| | |_密钥
|_Feature名称 |_许可的终端用户个数(同时使用)

例如:

1
INCREMENT vxt_vapsxt MPICRO 4.2 permanent uncounted VENDOR_STRING=12345 HOSTID=123456789abc SN=123abc START=01-jan-2023 SIGN="1234 .... 5678"

INCRENMENT表示将多个软件的FEATURE添加到一个license file中时使用的,当然还有其他关键字。

当前授权的模块是vxt_vapsxt,即VAPS XT的核心模块。授权程序开发者为MPICRO,VAPS XT版本为4.2(包括后续的4.2.1等版本),有效期为永久,不限量授权,代理商代号为41701,安装PC的MAC地址为123456789abc,客户代号为123abc,证书签发时间为2023年1月1日,授权密钥为1234…5678,密钥共120个字符,四个一组分开,用于防止前面的字段内容被修改。

授权密钥本质是把前面的这些部分通过某种运算(简称函数f)得到一个加密码串。上述过程可以用函数f如下表示:

1
f(主机号,软件名,版本,期限,许可证个数,加密参数)= 加密串 

这个函数还和flexlm的版本有关系,实际上只要得到相应版本的 flexlm SDK,就可以执行此函数(虽然不知道内部是如何实现的),flexlm SDK是公开的(以前如此),唯一保密的是上述函数中的“加密参数”它由flexlm公司通过保密的途径提供给其客户,这些参数由5个Vendor Code(客户码)和两个Encryption Seed(加密种子)组成,只要知道了这七个参数,就可以用相应版本的SDK构造出完整的许可证生成程序。

在旧版本的SDK中,可以通过一些方法直接从程序中提取出两个种子,在2002年的时候flexlm引入ECC校验(椭圆曲线加密)了,版本我记得应该是V8,只不过没有推广开来。2007年开始,各大主流EDA公司逐步在新版软件中强制要求使用Flexlm V11,其实主要目的就是强制引入ECC密钥验证,并逐步延长密钥至现在的239位,对应的Feature中的sign 120位的字符串。

原因很简单,ECC这套公开密钥的加密方法,具有密钥短,极难逆向破解的特性,非常适合license管理。目前为止,以我所知,没有人算出过239位Flexlm ECC的私钥。

那么就剩下一种方法,既然我不知道私钥是什么,那就换成我知道的私钥,最近几年的软件破解版都是直接提供破解补丁,这个破解补丁就是暴力替换私钥后的激活组件。

当然,还有更加暴力的方法,直接跳过验证步骤。

组件分析

Flexlm包括client端和server端,client端上安装要使用的供应商的软件,server端控制此软件的license的分配和管理。

我们把client端上供应商的软件叫做FLEXenable应用程序

Server端包括许可证服务器管理器lmgrd和供应商守护进程vendor deamon

因此Flexlm的组件主要包括以下几个部分:

FLEXenable应用程序

针对节点锁定的方式,这部分需要license的解析模块,包括license的获取属性接口,license的签名算法。针对浮动许可的方式,需要与server端的获取license授权的通信的功能。

Lmgrd

由flexlm提供,处理与FLEXenable软件的初始连接,还用来启动vendor deamon,以及指定使用的license文件路径等。

Vendor deamon

处理license的分配管理以及与client端的通信,license的解析

License文件

格式不定,vxworks的扩展名为txt,VAPS XT的扩展名为wri

另外还有一些输出的日志文件,调试信息文件,lmutil工具等

Flexlm许可证的请求过程

  • FLEXenable应用程序的许可证模块根据LM_LICENSE_FILE环境变量查找许可证文件,(LM_LICENSE_FILE可以是一个license文件的完整路径,也可能是包含多个license的目录。还可能是port@host,即在网络上。节点锁定许可证采用前两种,浮动许可证采用port@host,着重讲解浮动许可证)。
  • FLEXenable应用程序通过port@host与lmgrd建立连接,并通知它需要与其对话的vendor deamon。
  • Lmgrd确定vendor与FLEXenable对话的TCP/IP端口,并将其发送给FLEXenable应用程序。(这个端口可能是license中VENDOR 字段的端口,如果wendor部分没有端口描述的话,可能lmgrd会指定一个合法端口)
  • FLEXenable与VENDOR建立连接,获取lisence请求
  • VENDOR检查是否有可用的license,授权或者拒绝FLEXenable
  • FLEXenable的许可证模块根据接受的授权或者拒绝来启动或者终止FLEXenable应用程序

版本

摘取自flexera 发布历史

版本功能
2022 (11.19.X)客户端和供应商守护程序之间基于TLS的加密通信
flexlm诊断日志路径的新环境变量
lmadmin安全:3次密码尝试失败后,用户锁定10分钟
安全更新
Wibu加密狗驱动程序已从v6.51升级到v6.60
支持Windows 11操作系统
对Visual Studio 2022的支持
安全通信的增强功能
添加了可选的命令行选项“-datestamp”
支持macOS 12.0 beta Monterey
新API:lc_dupuserlist 一种新的客户端和服务器通信混淆机制
第三方库更新
SafeNet加密狗驱动程序已升级到8.43版
对RHEL 9的支持
支持macOS 12.0 Monterey
支持Windows Server 2022操作系统
2021 (11.18.X)支持Windows Server 2022操作系统
支持macOS 12.0 Monterey
批量签出
Docker容器(使用container_ID锁定服务器/功能线)借用缓存改进
在macOS 11.0 Big Sur上支持lmadmin
在英特尔体系结构上支持macOS 11.0 Big Sur
安全网(FLEXID9)加密狗现在支持Ubuntu平台
安全更新
用于在网络断开期间检测客户端许可证的新供应商变量
为FlexNet授权服务引入了新的错误消息
Azure云环境下检测技术的变化
Safenet加密狗驱动程序已从v8.21升级到v8.23
2020 (11.17.X)服务器日志的自动滚动
通用供应商守护程序简介
支持集装箱化/码头化的API
高效预订(基于API)
Everrun Hypervisor支持LM_PROJECT扩展
lmstat报告项目
带rollOver选项的lmswitch
用于混淆服务器日志中用户名的实用程序(用于GDPR)
许可证验证实用程序
异步lc_vsend简介
新诊断-基于客户端消息的诊断
服务器和客户端示例—自动恢复受信任的存储
时区消息协议简化
2019 (11.16.x)Lmstat增强功能–无用户信息
为实用程序MAX_CONN保留缓冲区
UMN1工程选项文件限制的连接数
供应商守护程序的相对路径支持
ReRead上的服务器行为更改
支持macOS公证
协议简化以提高性能
TsActDiag与FNP发布者工具包
2018年(11.15.x-11.16.x)FNP对ARM架构的支持
受信任的存储诊断和运行状况检查
64位lmadmin
在macOS上为lmadmin和lmgrd启动兼容性
在Linux上定位独立可执行文件(PIE)
安全修复和更新
用于从可信存储签出的INCLUDE/EXCLUDE选项
物理绑定到Windows上的TPM
REPORTLOG中的用户名匿名
lc_feat_list增强
在lmadmin中配置SOAP通信的选项
2017 (11.14.x - 11.15)安全更新
新选项文件关键字INCLUDEPALL ENTITLEMENT、EXCLUDEALL ENTITLIMENT
TPM(受信任的Patform模块)主机id
无FNLS的基于证书的应用程序的虚拟化检测
2016年(11.13.x-11.14.x)部分可用签出
服务器快捷方式
借用增强功能
lmadmin Active Directory集成支持
Visual Studio 2015支持
云支持的改进
-2-p-本地选项增强
AMZN_EIP主机ID
XFS文件系统上的VCG支持
FlexNet许可服务、虚拟化和性能改进
从供应商守护程序(VD)回调中提取客户端主机ID
2015 (11.13.x)安全修补程序
提高了服务器稳定性
java客户端的性能修复
OVERDRAFT许可证的供应商守护程序回调
云和虚拟化增强功能
2014年(11.11.x-11.13)在可信存储上激活借用回收
改进了对基于可信存储的许可的虚拟化支持
激活借用的选项文件关键字
确定功能的许可证来源
加密狗更新
具有可信存储的PACKAGE支持
Trusted Storage许可证服务器自动重新读取
供应商守护程序强化
2013 (11.1.1 - 11.12)虚拟化支持激活和可信存储
消除交叉版本签名
调试日志中增强的许可证服务器诊断
支持Windows 8和Server 2012
Windows SafeSEH兼容性
服务器端受信任存储的本地激活
计划检查受信任存储中的更新
激活中的非英语字符
lmadmin和lmgrd现在支持软件标记
供应商守护程序关闭的回调
2012 (11.10.1 - 11.11, 10.8.10)支持预配置的受信任配置
支持Xen虚拟环境
用于Linux机器识别的UMN4
支持Mac OS X 10.8.X
lm借用的清除选项
覆盖IP地址的功能
支持Linux上的新以太网设备名称
支持分组以太网接口
带宽受限环境中许可证服务器的激活
从联机激活检索响应XML
支持Mac OS X 10.7.X
lmadmin安全修补程序
2011 (11.9.1 - 11.10)支持云环境中的许可
支持Mac Lion
能够在Hypervisor Console OS外部运行lmbind
虚拟化支持激活和可信存储
改进了对基于许可证文件的许可中安全数据类型的支持
在lmadmin中支持Active Directory用户和组
lmadmin的WhiteHat认证
支持具有2GB闪存的Flexid 9加密狗
Java Toolkit支持Wibu系统的加密狗
2010 (11.8.0 - 11.9.0)虚拟化:支持Hyper-V lmstrip改进
Wibu Systems AG提供的WibuKey加密狗支持
对Visual Studio 2010编译器的支持
用于激活API的C#包装器
复合事务(用于可信存储许可)
虚拟化:ESX虚拟容器的lmbind和UUID
2009 (11.6.1 - 11.7, 10.8.8 - 10.8.9)对Microsoft Visual Studio 2008的支持
支持Windows Server 2008
支持Windows平台上虚拟以太网适配器的主机ID
Windows上改进UMN2受信任的存储备份
lmadmin安装程序Linux标准库(LSB)认证
时区许可证试用包
自动重新读入选项文件
2008 (10.8.7 - 11.6)基于GUI的许可证服务器管理器-ladmin
许可工具包支持Mac OS X 10.5 (Leopard)和64位Intel硬件
激活API函数以“取消”失败的退货请求
在某些平台上支持多个以太网主机
支持机器虚拟化—VMware ESX Server

FlexLM介绍
https://blog.jackeylea.com/vapsxt/introduction-of-flexlm/
作者
JackeyLea
发布于
2022年10月13日
许可协议