本篇将尝试根据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. Python实验报告(第5章)

    实验5:字符串及正则表达式 一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例01:使用字符串拼 ...

  2. [OpenCV实战]6 基于特征点匹配的视频稳像

    目录 1 介绍 1.1 视频稳定的方法 1.2 使用点特征匹配的视频稳定 2 算法 2.1 帧间运动信息获取 2.1.1 合适的特征点获取 2.1.2 Lucas-Kanade光流法 2.1.3 运动 ...

  3. python之路49 模板层标签 自定义过滤器 模板继承、模型层准备、ORM部分操作

    模板层之标签 {% if 条件1(可以自己写也可以是用传递过来的数据) %} <p>周三了 周三了</p> {% elif 条件2(可以自己写也可以用传递过来的数据) %} & ...

  4. python之路45 初识django框架

    纯手撸web框架 1.web框架的本质 理解1:连接前端与数据库的中间介质 理解2:socket服务端 2.手写web框架 1.编写socket服务端代码 2.浏览器访问响应无效>>> ...

  5. 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 PY32F0系列上市其实相 ...

  6. 刷题笔记——2181.信息学奥赛一本通T1005-地球人口承载力估计

    题目 2181.信息学奥赛一本通T1005-地球人口承载力估计 2999.牛吃牧草 代码 x, a, y, b = map(int,input().strip().split()) z = float ...

  7. 让你的手,不再抽筋,速度:修改mac的快捷键,以及鼠标滑动

    我是资深️windows系统爱好者️ 最近开始尝试使用MAC系统进行代码运行测试,从配置环境,到写博客,一天按下了n次的复制粘贴快捷键, 妈耶,感觉要抽筋了 呜呜--- 这简直无法忍,我决定修改这个快 ...

  8. U3D编辑器开发&粒子特效/动画预览器示例

    概述 U3D提供了一套拓展编辑器的接口,可以用于直接在编辑器非播放模式运行程序.常用于运行一些工具程序,例如资源管理.在做技能编辑器等工具程序时,也可以使用运行模式接口会比较简单(这样也方便开放游戏创 ...

  9. Python自动批量修改文件名称的方法

      本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法.   已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一份:所有作业文件命名格式统一,都是地信1701_姓 ...

  10. Java 进阶P-4.6+P-4.7

    向上造型 造型cast 子类的对象可以赋值给父类的变量 注意! java中不存在对象对对象的赋值!! 父类的对象不能赋值给子类的变量 可以用造型: c=(Car) v; (只有当v这个变量实际管理的是 ...