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 |
|
例如:
1 |
|
Daemon(或Vendor)行
Deamon/VENDOR是类似供应商开发的软件的名称,因为有很多软件采用flexlm,Deamon/VENDOR是区分不同软件提供商的,因为一个server上可以有多个采用flexlm的软件(Deamon/VENDOR),其常见格式是:
1 |
|
例如:
1 |
|
VAPS XT使用的供应商名为MPICRO。
Feature行
FEATURE是license的核心,我们可以把feature理解为一个软件中的各个模块,其常见的格式为:
1 |
|
例如:
1 |
|
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 |
|
这个函数还和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 |