wibu软授权(五)
本篇将尝试根据RAU的asn1定义手动生成一份自定义的RAU文件,看看能不能通过wibu软授权系统的验证
准备工具
- python3
- asn1tools
- Ubuntu 18.04
- CodeMeter Runtime 6.60
证书链
如果自定义修改LIF文件、RAC文件或RAU文件等任何被证书保护的文件,都需要知道证书的私钥。
显然,正常途径下我们是没有办法获得证书的私钥,所以需要我们自己生成证书并替换原来的证书。
通常情况下,证书链中包含以下证书:
CodeMeterLin中root证书(根证书)
LIF文件中的Wibu-Production证书和LPK证书
RAC文件中的Wibu-Production证书、LPK证书和CmActKey证书
RAU文件中的wibu-Production证书、LPK证书、LTK证书和CmActKey证书
除了root证书和CmActKey证书为自签证书外,其余均为子证书(由其他证书签名)。
在软授权过程中,CmActKey证书与当前系统特征相关,如无必要无须替换。
其他证书均需要替换,其中最为关键的则是root证书的替换。
root证书替换
用于替换的证书可以手动生成(如使用openssl),也可以在原来证书基础上修改。
为了省事,本文使用后者的方法,好处是很多字段无须填写,用原来的就行,要修改的只有公钥字段和校验字段。
值得注意的是,CodeMeterLin中的root证书长度为370字节,我们要尽可能生成同样大小的root证书来替换,否则如下图这样的调用也要修正长度参数。
替换root证书的代码主要由wibu_cert.py的patch_codemeterlin函数和cert_data_fix函数完成。具体代码见github仓库wibu。
在cert_data_fix函数中,我把私钥固定为0xd9352ca798fde876a6c093e60bb39870ddb10e722276ab78eea3cc40
,这样的好处是在进行证书验证时可以使用同一密钥进行签名。
由于在生成证书验证信息时使用了随机数,生成的验证信息可能有一两个字节的差异,需要多次生成才能生成370字节的证书。
生成替换了root证书的CodeMeterLin后,还需要将其放入/usr/sbin中。
验证效果
在原始状态下,导入LIF的结果如下:
通过解析LIF文件,发现该LIF设置了不能在虚拟机环境下导入的限制。
> cmu -i -f dji_aeroscope_pro.WibuCmLIF
cmu - CodeMeter Universal Support Tool.
Version 6.60 of 2017-Dec-18 (Build 2869) for Linux
Copyright (C) 2007-2017 by WIBU-SYSTEMS AG. All rights reserved.
List remote updates failed: It is not permitted to use this license on a virtual machine, Error 273.
在替换root证书后,继续导入该LIF,结果如下:
由于LIF里的证书无法通过替换后的root证书的验证,所以报错。
> cmu -i -f dji_aeroscope_pro.WibuCmLIF
cmu - CodeMeter Universal Support Tool.
Version 6.60 of 2017-Dec-18 (Build 2869) for Linux
Copyright (C) 2007-2017 by WIBU-SYSTEMS AG. All rights reserved.
List remote updates failed: Unknown error
将LIF里的证书也进行证书替换后导入,结果如下:
这里可以看到,得到的结果和原始状态一致,代表着root证书替换成功了一大半。
> cmu -i -f sder/dji_aeroscope_pro.WibuCmLIF
cmu - CodeMeter Universal Support Tool.
Version 6.60 of 2017-Dec-18 (Build 2869) for Linux
Copyright (C) 2007-2017 by WIBU-SYSTEMS AG. All rights reserved.
List remote updates failed: It is not permitted to use this license on a virtual machine, Error 273.
之前说过,在不清楚证书的私钥,无法私自修改LIF文件中的任何内容。
但现在我们已经获知证书的私钥,在修改LIF文件中对虚拟机的限制后,导入结果如下:
可以看到,导入成功了,并且/var/lib/CodeMeter/CmAct目录正确地生成了wbc文件。
> cmu -i -f novm/dji_aeroscope_pro.WibuCmLIF
cmu - CodeMeter Universal Support Tool.
Version 6.60 of 2017-Dec-18 (Build 2869) for Linux
Copyright (C) 2007-2017 by WIBU-SYSTEMS AG. All rights reserved.
The file contains 1 Update:
CmActLtLicense binding information: FirmCode 6000316
Execute Update ...
The file contains 1 Update:
CmActLtLicense update: Serial number 130-2326785491, FirmCode 6000316.
--> successful
1 successful update done
接下来,先尝试生成RAC文件,并且确认RAC文件中的证书是否为替换后的证书。
> cmu -c6000316 -s130-2326785491 -f context-130-2326785491.WibuCmRaC
cmu - CodeMeter Universal Support Tool.
Version 6.60 of 2017-Dec-18 (Build 2869) for Linux
Copyright (C) 2007-2017 by WIBU-SYSTEMS AG. All rights reserved.
Write CmFAS for 130-2326785491 for FirmItem 6000316
运行以下代码来测试RAC文件的证书是否有效,若存在问题,则会抛出异常,若正常,则不会有任何异常抛出。
> asn1_init("asn1/", "testcase/root.der")
> rac_proc("testcase/context-130-2326785491.WibuCmRaC")
Exception: Check cert[WIBU-SYSTEMS:Wibu-Production] failed
> asn1_init("asn1/", "testcase/root_new.der")
> rac_proc("testcase/context-130-2326785491.WibuCmRaC")
RAU文件
虽然目前没有可用的RAU文件进行参考,但是可以根据asn1定义手动生成RAU文件。
最新文章
- 【知识必备】一文让你搞懂design设计的CoordinatorLayout和AppbarLayout联动,让Design设计更简单~
- GitHub上整理的一些工具
- java基础-jdbc——三种方式加载驱动建立连接
- 经典SQL
- strlen() 函数
- java之旅——JDK版本下载
- C# 经典入门15章 RadioButton和CheckBox
- Integer的自动拆箱
- 从Windows迁移SQL Server到Linux
- [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
- linux下利用ruby做系统备份与还原
- 踩坑学习python自动化测试第一天!
- python之OpenCv
- DBS:CUPhone
- Oracle错误——user ** lacks CREATE SESSION privilege logon denied
- 如何在hanlp词典中手动添加未登录词
- WPF 去掉Drag a column header here to group by that column
- 在vue项目中使用canvas-nest.js,报parameter 1 is not of type 'Element'
- jquery事件及插件
- Python基础(list和tuple)可变集合和‘不可变’集合
热门文章
- npm Error: Cannot find module 'are-we-there-yet'
- 国产paozhu c++ web framework 正式版发布
- 封装一个python的pymysql操作类
- [机器学习] Yellowbrick使用笔记3-特征分析可视化
- Python Kconfiglib初次学习
- Hadoop详解(07) - Hdfs数据压缩
- S2-052 CVE-2017-9805 远程代码执行
- 《Effective C++》再次探索traits技法
- P7076 [CSP-S2020] 动物园
- (Java)设计模式:结构型