首页
论坛
课程
招聘
[原创]wibu证书 - 初探
2022-9-6 22:39 10213

[原创]wibu证书 - 初探

2022-9-6 22:39
10213

前言

最近遇到一个wibu加密的程序,使用wibu证书进行授权,类似于sentianl的软锁SL,没有加密狗。

前期准备

  • 下载运行环境codemeter runtime,我这里使用的是程序自带的runtime,版本为6.60,运行平台为linux。下载链接:https://pan.baidu.com/s/1E_6qsUx57Irc4s-E88fD6g?pwd=koqk 提取码:koqk
1
2
3
4
5
6
7
8
$cmu -v
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.
 
Operating System:
 Name:         Ubuntu 18.04.6 LTS (Kernel 5.4.0-124-generic)
 Architecture: x86_64
  • 一个以WibuCmLIF结尾的许可信息文件
    由于某种原因,无法分享我在使用的WibuCmLIF文件,有需要的朋友可以找找使用wibu加密的产品。
    空许可信息文件的生成可以通过以下命令行,此操作需要测试fsb或厂商fsb,详情可参考wibu证书的相关使用说明
    1
    cmboxpgm.exe -f6000010 -lif:"MyFirstUfcLif.WibuCmLIF" - lfs:smart:3 -lpn:"Universal Firm Code - 2000" -lpid:2000 -lopt:vm,reimport -v

初步接触

  1. 先使用cmu -i -f xxx.WibuCmLIF来尝试导入许可信息文件,结果报错:无法在虚拟机上导入该证书
1
2
3
4
5
6
$cmu -i -f xxx.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.
  1. 只能先跟一下cmu,看看cmu的工作原理。cmu绝大多数的功能都是由libwibucm.so实现。继续跟踪该so文件,发现它connect一个服务端,并将xxx.WibuCmLIF的内容加密后打包发送,可以大胆的猜测服务端才是这次分析主菜。服务器端的端口为22350,程序为CodeMeterLin。
1
2
3
sudo netstat -tlp | grep 22350
tcp        0      0 0.0.0.0:22350           0.0.0.0:*               LISTEN      12483/CodeMeterLin 
tcp6       0      0 [::]:22350              [::]:*                  LISTEN      12483/CodeMeterLin
  1. cmu还有一个有趣的方法防止调试,就是上述xxx.WibuCmLIF加密时使用当前时间作为密钥,服务器收到加密数据使用接收到数据的时间作为密钥解密,一旦调试起来在传输的某个过程停留超过几秒则服务器无法解密数据,错误代码如下所示。
1
2
3
4
5
6
cmu -i -f xxx.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: A network error occurred, Error 100.

分析CodeMeterLin

  1. 先分析一下CodeMeterLin有哪些算法,在IDA上最好是使用findcrypt插件,另外还可使用binwalk或者die。 我这里使用的是die,可以看到有base64和AES、sha256等常用算法。
    算法检测

  2. 打开WibuCmLIF文件看看,看到这串字符串大概就能推断出是base64加密。解密后放进die看看其熵值,蛮高的,感觉还是加密的状态。

    base64编码数据
    解密前熵值图

  3. 一开始认为需要aes或des解密,在两个算法的相关函数下断点,并没有发现明显解密的过程,最后直接追踪tcp接收流的去向,找到了相关的解密(解扰)算法,其中0x5917和0x4A6B是算法参数,而a2初值为WibuCmLIF文件的时间戳(TimeStamp)。解完之后可以再看看数据的熵值,看看是不是还需要解密。如图,熵值降低了很多,并且能看到明显的字符串,可以认为解密成功了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
char __fastcall license_dec(__int64 a1, __int64 a2)
{
  int v2; // edx
  char result; // al
  _DWORD *v4; // rcx
  unsigned __int64 v5; // r8
  unsigned __int64 v6; // r8
  unsigned int v7; // edx
  __int64 v8; // rax
 
  v2 = *(_DWORD *)(a1 + 260);
  result = 0;
  if ( (v2 & 1) == 0 )
  {
    result = 1;
    if ( (v2 & 2) != 0 )
    {
      v4 = *(_DWORD **)(a1 + 264);
      if ( v4 )
      {
        v5 = *(_QWORD *)(a1 + 280);
        if ( v5 )
        {
          result = 0;
          if ( !a2 )
            return result;
          v6 = v5 >> 2;
          if ( v6 )
          {
            v7 = 0;
            v8 = 0LL;
            do
            {
              v4[v8] ^= a2;
              v8 = ++v7;
              a2 = 0x5917 * a2 + 0x4A6B;
            }
            while ( v7 < v6 );
            v2 = *(_DWORD *)(a1 + 260);
          }
        }
      }
      result = 1;
      *(_DWORD *)(a1 + 260) = v2 & 0xFFFFFFFD;
    }
  }
  return result;
}

解密后熵值图

  1. 解完后的数据是一段asn1码流,可以使用一些在线网站初步解析,但里面有很多wibu自己定义的字段,需要写代码将这些asn1定义涵盖进来。

    asn1在线解析

  2. 这里先放LIF的解析过程,有兴趣的朋友可以自行查看,后续的文件也会涉及到这里面的函数。这里先看看虚拟机检测函数,大致是检测CPU信息、硬盘信息、中断表、驱动等,待会需要先强制修改返回值来跳过虚拟机检查。

    LIF解析流程
    检测代码部分预览

【预告】
接下来会讲解一下如何asn1的一些相关知识,以及如何使用CodeMeterLin内的asn1定义解析码流。


看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

最后于 2022-9-6 22:41 被bluefish蓝鱼编辑 ,原因: 标题修改
收藏
点赞4
打赏
分享
最新回复 (11)
雪    币: 6458
活跃值: 活跃值 (1272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chengdrgon 活跃值 2022-9-7 12:45
2
0
感谢分享
雪    币: 929
活跃值: 活跃值 (1310)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yaoguen 活跃值 2022-10-29 07:40
3
0
请问一下die怎么查加密算法,我的die没找到这个功能
雪    币: 695
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sunbest 活跃值 2022-10-29 22:06
4
0
用wibu加密狗的程序,加密的原理差不多吗
雪    币: 5967
活跃值: 活跃值 (2461)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
bluefish蓝鱼 活跃值 2022-10-30 23:17
5
0
sunbest 用wibu加密狗的程序,加密的原理差不多吗
加密狗的话应该是不一样的,因为用加密狗的话就不需要证书了
雪    币: 929
活跃值: 活跃值 (1310)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yaoguen 活跃值 2022-10-31 09:36
6
0
bluefish蓝鱼 加密狗的话应该是不一样的,因为用加密狗的话就不需要证书了
请问一下die怎么查加密算法,我的die没找到这个功能
雪    币: 5967
活跃值: 活跃值 (2461)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
bluefish蓝鱼 活跃值 2022-11-1 00:43
7
0

雪    币: 929
活跃值: 活跃值 (1310)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yaoguen 活跃值 2022-11-2 07:32
8
0
bluefish蓝鱼
好的,谢谢,原来是2.0版本的die有这个功能,最新的3.0版本没有
雪    币: 160
活跃值: 活跃值 (831)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_一叶_733 活跃值 2022-11-8 22:50
9
0
有一个WIBU加密狗一直不知道从哪里入手
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
lxr677 活跃值 1天前
10
0
有软授权的WibuCmRAU文件能否实现解绑对应的硬件呢
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
lxr677 活跃值 1天前
11
0
WibuCmLIF中的LicenseInfomation内容还需要做其他的处理么,我把内容去掉回车换行后放到网上在线的base64解密会报错
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
lxr677 活跃值 1天前
12
0
lxr677 WibuCmLIF中的LicenseInfomation内容还需要做其他的处理么,我把内容去掉回车换行后放到网上在线的base64解密会报错
已经解决,需要使用base64转16进制,如果转字符串有非可见字符,复制后会丢数据
游客
登录 | 注册 方可回帖
返回