本篇将尝试根据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软授权(五)的更多相关文章

  1. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  2. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...

  3. Spring Security OAuth2.0认证授权六:前后端分离下的登录授权

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...

  4. jeecg入门操作—菜单管理

    一.菜单配置入口 登录jeecg平台,点击系统管理->菜单管理,弹出菜单管理界面 二.配置一级菜单 点击菜单录入 三.配置二级菜单 选中生成的一级菜单,点击菜单录入  四.菜单授权  五.注销系 ...

  5. Python之路【第九篇】:面向对象进阶

    阅读目录 一. isinstance(obj,cls)和issubclass(sub,super)二. 反射三. __setattr__,__delattr__,__getattr__四. 二次加工标 ...

  6. kubernetes 1.6 RBAC访问控制

    一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...

  7. NoSQL 数据库概览及其与 SQL 语法的比较

    NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对N ...

  8. 数据库MySQL 之 库操作

    数据库MySQL 之 库操作 浏览目录 系统数据库简介 数据库操作 命名规范 用户权限 修改密码 忘记密码 中文乱码问题 一.系统数据库简介 information_schema :虚拟库,不占用磁盘 ...

  9. 商派OMS增加PMC跟生产中心角色权限思路

    一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...

  10. NoSQL数据库概览及其与SQL语法的比較

    [文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.同一时候也是知名的NoSQL数据库之中的一个.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤 ...

随机推荐

  1. Jmeter 之bzm- Concurrency Thread Group 压测

    bzm- Concurrency Thread Group  并发线程组代替 jp@gc - Stepping Thread Group线程组. 1.  下载jmeter-plugins-manage ...

  2. Sql Server中order by对varchar类型排序结果不对

    1.问题描述 我写一个sql想要把查询结果根据LineNumber升序进行排序,即1.0,1.1,1.2,...1.3.2....2.0,......10.0,......15.2,......这样子 ...

  3. Java基础篇——多线程

    创建线程的三种方式 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 继承Thread类 public Test extends Thread{ public voi ...

  4. Spring框架初学习

    Spring框架初学习   摘要:今天我终于开始学习大名鼎鼎的Spring框架了,在上大学的时候,经常看见一些课设大佬Spring,Spring的,什么Spring boot,Spring MVC的, ...

  5. Linux 查找某一线程是否已运行,并启动的方法

    参考资料:(3条消息) [Linux]守护线程自动重启某个程序的3种常用办法_L7256的博客-CSDN博客_守护进程 自动重启 方法一:使用编写一个监控APP的脚本 start.sh脚本如下:exp ...

  6. 基于 VScode 搭建 STM32 运行环境

    所需软件 vscode: 是我们的代码编辑器 STM32CubeMX: 是我们配置和初始化的软件 OpenOCD: 是开源片上调试器, 他下载完是一个压缩包, 需要配置环境 arm-none-eabi ...

  7. 特殊input框需求,粘贴文字或者扫码筛选检查后加密为password格式,否则正常显示/假如用户输入的信息是以mima开头,就切换输入框为密码类型

    1.angular8粘贴文字或者扫码筛选检查后加密为password格式,否则正常显示 <input [type]="myInputType" (keyup.enter)=& ...

  8. Quarkus入门体验,22ms启动一个Web服务

    简介 Quarkus是类似于Spring Boot的框架,可以方便大家进行Java开发.利用GraalVM的魔力,能更好的适应云原生的场景,极快的启动速度. 创建项目 在IDEA就直接有创建Quark ...

  9. 定时调度插件------Longbow.Tasks

    官网地址Longbow.Tasks 使用说明 dll引用 使用NuGet 搜索Longbow.Task可找到相关版本的dll 目前最新的为7.0.0版本,需net6.0+ 如果低版本用户可使用5.2. ...

  10. 百万级数据excel导出功能如何实现?

    前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...