FLEXLM ECC问答 (2)
6. 研究flexlm主要需要哪些资料?
flexlm相对来说资源丰富,基本上每个版本的sdk都有泄漏。
如果想深入研究flexlm的加密算法,flexlm sdk是必需的。
写kg是必须要读sdk的,值得注意的是v9.2 sdk sourcecode泄漏。这个网上可搜索到。
sdk有一部分是c代码,里面最有用的是l_prikey.c, 这里有ECDSA验证的函数。
这个文件的尾部有300行comments,其中有一封email很值得一读。
ECC核心库没有源文件,只有lib文件。
在certicom目录下的lib里面,主要为libsb.lib等(Certicom 的加密库:Security Builder)。
lib是混淆过了的,但是不影响ida反编译,只是不便于做sig文件。
主要依靠人脑识别函数,需要经验和时间。
7. flexlm的key加密强度有哪些?
以flexlm sdk v9为例,用宏定义表示LM_SIGN_LEVEL。
#define LM_SIGN2 2 /* SIGN2= */
#define LM_SIGN 1 /* SIGN= the default */
#define LM_NO_SIGN 0 /* license key */
v9以后,默认就采用ECC PUBKEY加密。SIGN支持ECC,所以大部分情况下用SIGN比较多,有些用SIGN2。
LM_NO_SIGN 是传统的license key, 强度最弱,不建议使用。
ECC PUBKEY 只有3种类别, 113, 163, 239 bits。
对应的sign长度(字符数) , 字节为( bits + 7 )/8 字节数 , 打印出来,
用hex digits表示,ECC的SIGN长度分别是一对 30,42,60 [0-9,A-F]。
采用ECC的,pubkey_strength 必须定义为下面的一个类别,否则l_pubkey_verify会出错:
LM_STRENGTH_113BIT,LM_STRENGTH_163BIT,LM_STRENGTH_239BIT。
#define LM_STRENGTH_LICENSE_KEY 0
#define LM_STRENGTH_DEFAULT 1
#define LM_STRENGTH_113BIT 2
#define LM_STRENGTH_163BIT 3
#define LM_STRENGTH_239BIT 4
#define LM_STRENGTH_PUBKEY LM_STRENGTH_113BIT
#define LM_STRENGTH_VERYHIGH LM_STRENGTH_239BIT
在l_pubkey_verify 有这么一段初始化代码, 判断pubkey_strength。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
