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文件。
wibu软授权(五)的更多相关文章
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- Spring Security OAuth2.0认证授权五:用户信息扩展到jwt
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- Spring Security OAuth2.0认证授权六:前后端分离下的登录授权
历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...
- jeecg入门操作—菜单管理
一.菜单配置入口 登录jeecg平台,点击系统管理->菜单管理,弹出菜单管理界面 二.配置一级菜单 点击菜单录入 三.配置二级菜单 选中生成的一级菜单,点击菜单录入 四.菜单授权 五.注销系 ...
- Python之路【第九篇】:面向对象进阶
阅读目录 一. isinstance(obj,cls)和issubclass(sub,super)二. 反射三. __setattr__,__delattr__,__getattr__四. 二次加工标 ...
- kubernetes 1.6 RBAC访问控制
一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...
- NoSQL 数据库概览及其与 SQL 语法的比较
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对N ...
- 数据库MySQL 之 库操作
数据库MySQL 之 库操作 浏览目录 系统数据库简介 数据库操作 命名规范 用户权限 修改密码 忘记密码 中文乱码问题 一.系统数据库简介 information_schema :虚拟库,不占用磁盘 ...
- 商派OMS增加PMC跟生产中心角色权限思路
一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...
- NoSQL数据库概览及其与SQL语法的比較
[文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.同一时候也是知名的NoSQL数据库之中的一个.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤 ...
随机推荐
- VSCTF的Recovery
题目如下: from random import randint from base64 import b64encode def validate(password: str) -> bool ...
- 【转载】WebBrowser控件的常用方法、属性和事件
1. 属性 属性 说明 Application 如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch).如果在宿主对象中自动化对象无效,这个程序将返回Web ...
- TensorRT基础笔记
一,概述 TensorRT 是 NVIDIA 官方推出的基于 CUDA 和 cudnn 的高性能深度学习推理加速引擎,能够使深度学习模型在 GPU 上进行低延迟.高吞吐量的部署.采用 C++ 开发,并 ...
- [C++]C++11右值引用
右值引用的概念(摘自C++Primer) 左值和右值的概念 1.左值和右值是表达式的属性,一些表达式要求生成左值,一些表达式要求生成右值:左值表达式通常是一个对象的身份,而一个右值表达式表示的是对象的 ...
- NSOperation的简单使用
1.默认情况下,NSOperation并不具备封装操作的能力,必须使用它的子类,使用NSOperation子类的方式有3种: 1> NSInvocationOperation 2> NSB ...
- 算法之Floyd-Warshall算法【c++】【图论】【最短路】
我们作为刚学图论的小蒟蒻,先接触到的算法一定是图上最短路径算法.而最短路算法中最简单的当属Floyd-Warshall算法.下面是一些基本介绍: 该算法可以计算图上任意两点间的最短路径 时间复杂度: ...
- Redis--回顾提要
一.写在前 知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Redis干就完事了! 二.来辣! Redis做异步队列:一般list结构做队列,rpush生产消息,lpop消费消息,当lpop ...
- Gitlab配置ssh_key
一.背景 当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码.那么我们就 ...
- RAM算法原理
1 应用场景 信道的不对称性和信道的高波动是移动环境中无线信道的两个显著特征.因此,当在车辆网络等移动环境中使用IEEE 802.11设备时,有一个能够处理这些问题的有效速率自适应方案至关重要.RAM ...
- 重学SpringBoot. step2 Spring AOP
Spring AOP AOP的原理,就是生成对象的代理,然后通过在代理的执行中,添加一些钩子来扩展功能. @Aspect public class MyAspect { @Pointcut(" ...