wibu证书 - 初探
本文为看雪论坛优秀文章
看雪论坛作者ID:bluefish蓝鱼
最近遇到一个wibu加密的程序,使用wibu证书进行授权,类似于sentianl的软锁SL,没有加密狗。
一
前期准备
下载运行环境codemeter runtime,我这里使用的是程序自带的runtime,版本为6.60,运行平台为linux。下载链接:https://pan.baidu.com/s/1E_6qsUx57Irc4s-E88fD6g?pwd=koqk 提取码:koqk
-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证书的相关使用说明(https://help.wibu.com.cn/help/manual/CodeMeter/42a5)。
cmboxpgm.exe -f6000010 -lif:"MyFirstUfcLif.WibuCmLIF" - lfs:smart:3 -lpn:"Universal Firm Code - 2000" -lpid:2000 -lopt:vm,reimport -v
二
初步接触
先使用cmu -i -f xxx.WibuCmLIF来尝试导入许可信息文件,结果报错:无法在虚拟机上导入该证书。
$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.
只能先跟一下cmu,看看cmu的工作原理。cmu绝大多数的功能都是由libwibucm.so实现。继续跟踪该so文件,发现它connect一个服务端,并将xxx.WibuCmLIF的内容加密后打包发送,可以大胆的猜测服务端才是这次分析主菜。服务器端的端口为22350,程序为CodeMeterLin。
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
cmu还有一个有趣的方法防止调试,就是上述xxx.WibuCmLIF加密时使用当前时间作为密钥,服务器收到加密数据使用接收到数据的时间作为密钥解密,一旦调试起来在传输的某个过程停留超过几秒则服务器无法解密数据,错误代码如下所示。
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等常用算法。
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
{
^= a2;
v8 = ++v7;
a2 = 0x5917 * a2 + 0x4A6B;
}
while ( v7 < v6 );
v2 = *(_DWORD *)(a1 + 260);
}
}
}
result = 1;
*)(a1 + 260) = v2 & 0xFFFFFFFD;
}
}
return result;
}
接下来会讲解一下如何asn1的一些相关知识,以及如何使用CodeMeterLin内的asn1定义解析码流。
看雪ID:bluefish蓝鱼
https://bbs.pediy.com/user-home-674195.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注KnowSafe微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
- NetMount一站式统一管理,轻松挂载云存储
- 5.71亿人活跃在QQ原因:截图方便、传输快 办公必备
- 男子用ChatGPT编假新闻被采取刑事强制措施;苹果M3芯片下半年量产;Safari超Edge,成第二大桌面浏览器|极客头条
- 文心一言来了!李彦宏:百度是全球大厂中第一个做出来的!
- 喜报,又拍云入选“2022 年度优秀开源技术团队”
- 第六届补天白帽大会召开:多方聚力推动白帽人才实战化能力发展
- “如果没有从事研发,学习自动化的我可能在装水表”
- 【9折预售中】CTF训练营-Web篇,全方位立体化学习!
- Qualcomm 2022暑期实习生招募正式启动!速来
- 我从构建生产型数据库中学到的42件事
- 关于谷歌P0的AppContainer逃逸的一种简单的复现
- 网上诈骗为何如此泛滥?360:你要的诈骗方式我都有!
赞助链接