“加密前行”-加密芯片在软件License中的应用

article/2025/9/22 2:30:20

“ 在上篇文章中,我们介绍了在汽车应用中,软硬件加密技术在保护车辆数据和通信方面发挥着关键作用。

JokerEye,公众号:ADAS之眼
ADAS-“加密前行”:软硬件技术在汽车安全中的应用"

今天,我们将以实际的加密芯片案例来讲解加密芯片在消费电子、汽车电子等的应用。”

01

为什么需要加密芯片?

硬件加密是指使用待加密的电子产品之外的硬件电路与待加密的电子产品进行通讯,让产品内部程序通过通讯数据来判断自己是否应该继续执行程序。

软件加密是在程序启动前对license做认证来决定程序是否启动或者在数据交互时先调用信息安全模块对信息进行加密,然后接收方使用相应的解密软件进行解密并还原。

首先我们看一段简单的c demo,如下:

int main (int argc, char** argv)
{if (argc <= 1) {printf("sorry input argc nums error\r\n");return 0xee;}printf("log success!!\r\n");return 0;
}

假定我们这里程序判断入参个数就是我们软件做license认证的手段,我们把exe打包给客户,但客户对程序反编译得到主函数符号如下:

0000000000001149 <main>:
1149: f3 0f 1e fa            endbr64 
114d: 55                     push   %rbp
114e: 48 89 e5               mov    %rsp,%rbp
1151: 48 83 ec 10            sub    $0x10,%rsp
1155: 89 7d fc               mov    %edi,-0x4(%rbp)
1158: 48 89 75 f0            mov    %rsi,-0x10(%rbp)
115c: 83 7d fc 01            cmpl   $0x1,-0x4(%rbp)
1160: 7f 13                  jg     1175 <main+0x2c>
1162: 48 8d 3d 9b 0e 00 00   lea    0xe9b(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
1169: e8 e2 fe ff ff         callq  1050 <puts@plt>
116e: b8 ee 00 00 00         mov    $0xee,%eax
1173: eb 11                  jmp    1186 <main+0x3d>
1175: 48 8d 3d a5 0e 00 00   lea    0xea5(%rip),%rdi        # 2021 <_IO_stdin_used+0x21>
117c: e8 cf fe ff ff         callq  1050 <puts@plt>
1181: b8 00 00 00 00         mov    $0x0,%eax
1186: c9                     leaveq 
1187: c3                     retq   
1188: 0f 1f 84 00 00 00 00   nopl   0x0(%rax,%rax,1)
118f: 00

从上面汇编代码可以看出:

(1)程序在地址偏移0x115c处和入参个数进行对比(指令cmpl);

(2)若判断成功,把0xee放入eax寄存器(保存程序返回值的寄存器),然后jp跳转到地址偏移0x1186处,完成程序返回 0xee,程序停止;

(3)若判断失败,则继续在地址偏移为0x1175处运行,并打印log sucess;

(4)返回0,程序停止;

此时,黑客从上面汇编代码发现了漏洞,聪明的读者也能看出,假如我把地址偏移为0x1173的指令替换如下:

1173 eb 11 nop #空转

此时软件再重新运行时,即使license判断失败,也不耽误后续软件的正常运行,而这也就是目前一部分软件的破解方式。当然,目前有很多对软件保护的方案如软件套壳、程序逻辑设计、防止反汇编等手段可以防止上述问题。

假设现在软件做了防止反汇编、软件套壳等防护手段,然后现在思考一个软件加密无法解决一个问题:“当出售的软件是可以离线运作时,那么一个license可以在多台电脑上运行,此时我怎么才能解决按照license收费问题呢?”。

答案是:“使用加密芯片,通过硬件加密技术来解决”。

02

加密芯片应用

回到上一章的问题,假设现在软件已经做过反编译以及软件套壳等加密手段,如何采用硬件加密手段来进行license的一对一唯一验证呢?
在上一篇文章我们提到的数字签名技术。基于数字签名技术,很直接的一个答案已经出来:在软件以及硬件中存放着相同的密钥以及设备的唯一标识数据(可以使用mac地址或者sn)。在软件启动时,软件产生一个随机数然后发送给加密芯片,加密芯片以及软件使用相同的数据以及密钥进行SHA256或者其他算法进行计算。计算结束后,软件对二者结果进行对比,若相同,则程序继续往下执行,否则程序结束退出。
以MCU搭配某国产加密芯片为例,其典型的应用流程如下:
在这里插入图片描述

在工厂生产阶段或者程序首次启动阶段,软件可以将密钥(所有软件共享)、UID(唯一标识ID,如芯片的SN)以及自定义数据等写入安全芯片中进行保存。另一方面,这些数据在MCU软件中也可以通过一些方式获取到,注意绿色圈出来的8Bytes常量一般是加密芯片内部固化的。
在软件正式运行阶段,软件每次启动都会生成8Bytes的随机数发送给加密芯片,加密芯片结合密钥、UID、常量数据、以及自定义数据进行SHA256计算,计算后返回MAC2值给MCU。同样MCU也会从自己OTP内部把Key、UID等数据读出,结合随机数进行SHA256计算,生成结果MAC1,通过MAC1和MAC2对比是否相等便可以知道加密芯片是否有更换,决定程序是否启动,完成了MCU以及加密芯片的一对一的认证。假设有人更换了加密芯片,那么加密芯片内部存储的UID和MCU则是不同的,那么二者计算的MAC值也不同,最终的认证结果必然也是失败的。
通过上述流程我们完成了MCU以及加密芯片的一对一绑定,这样我们便可以通过出货加密芯片的的数量来判断软件使用量的多少。另外,加密芯片一般也会有看门狗复位功能,即主控芯片需要定时和加密芯片进行通信数据验证,注意验证是在加密芯片端做的,即主机发送一段数据以及结果给加密芯片,如果数据验证失败或者长时间未进行数据验证,那么加密芯片则会将主机硬件复位,保证了程序的安全。
联想工作中一些比较重要的工业软件,一部分是使用U盾来验证的,其工作原理和上述方案一致,都是通过硬件加密的方式保证一对一的license匹配,只不过内部实现略有不同,在此不再赘述。

03

结束语

在国内盗版软件横行的今天,软件破解以及盗版本质上都是对知识产权的不尊重,因此各个厂家在软件防破解方面下足了劲并使用各种方式进行防护。当然今天讲解了硬件加密方案只是众多防护措施的一种,讲述了硬件加密在软件license的认证作用,希望各位看官有所收获。


http://chatgpt.dhexx.cn/article/D10WqPjM.shtml

相关文章

如何选择加密芯片以及加密芯片的工作原理

如何选择加密芯片&#xff1a; &#xff08;1&#xff09;安全性&#xff1a;不同加密芯片&#xff0c;主要却别在于所选单片机不一样&#xff0c;加密芯片开发人员不一样&#xff0c;加密方式实现的差异&#xff1b;只要加密芯片实现方式上没有很大漏洞&#xff0c;以及加密算…

IC芯片简介

IC芯片(Integrated Circuit Chip)是将大量的微电子元器件&#xff08;晶体管、电阻、电容等&#xff09;形成的集成电路放在一块塑基上&#xff0c;做成一块芯片。IC芯片包含晶圆芯片和封装芯片&#xff0c;相应 IC 芯片生产线由晶圆生产线和封装生产线两部分组成。 目录 1.IC芯…

硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理

前端时间有研究多款加密芯片&#xff0c;加密算法实现&#xff0c;以及破解可能&#xff0c;也有一些个人的观点&#xff0c;仅供参考&#xff1b; 一&#xff0c;加密芯片的来源及工作流程&#xff1a; 市面上的加密芯片&#xff0c;基本都是基于某款单片机&#xff0c;使用I…

什么是加密芯片?

加密芯片是对内部集成了各类对称与非对称算法&#xff0c;自身具有极高安全等级&#xff0c;可以保证内部存储的密钥和信息数据不会被非法读取与篡改的一类安全芯片的统称。在嵌入式行业应用广泛。它的前身就是水电气表等行业的ESAM模块&#xff0c;专门用于线路数据的加密传输…

加密芯片介绍 加密芯片选择(加密IC) 加密芯片原理

原文链接&#xff1a;https://blog.csdn.net/chengjian815/article/details/107516575 前端时间有研究多款加密芯片&#xff0c;加密算法实现&#xff0c;以及破解可能&#xff0c;也有一些个人的观点&#xff0c;仅供参考&#xff1b; 一&#xff0c;加密芯片的来源及工作流…

tesseract-ocr中文识别

Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR&#xff08;Optical Character Recognition , 光学字符识别&#xff09;引擎。与Microsoft Office Document Imaging&#xff08;MODI&#xff09;相比&#xff0c;我们可以不断的训练的库&#xff0c;使图像转换文本…

【PC工具】更新在线图片文字识别工具,OCR免费文字识别工具

微信关注 “DLGG创客DIY” 设为“星标”&#xff0c;重磅干货&#xff0c;第一时间送达。 之前分享过两个windows上的OCR文字识别工具&#xff1a; 【PC工具】更新&#xff01;windows图片文字识别软件&#xff0c;OCR免费文字识别工具 我经常用其中的PandaOCR&#xff0c;带截…

怎么在线识别图片文字?说一个思路

图片中的文字怎么在线识别&#xff1f;很多小伙伴在接收到图片类型的文件时&#xff0c;不知道怎么处理其中记录的信息。打字整理嫌麻烦怕出错的话&#xff0c;可以借助识别软件来处理&#xff0c;下面给大家介绍三种比较好用的工具&#xff0c;希望能解决你的问题。 方法一、在…

一款免费在线文字识别(OCR)工具

你一定遇到过以下一些场景。 学习工作中需要处理一些纸质文件、电子文档或图片资料&#xff0c;想对这些文字进行编辑整理&#xff0c;但很多文字不能直接复制&#xff0c;苦于一个字一个字手动打出来。 发现一段不错的文字想要做书摘笔记&#xff0c;但又懒得去打字或是手抄…

图片字符识别

程序员玩生死时速打字游戏-图片文字识别_哔哩哔哩bilibili 我的这个程序是识别图片中的字符&#xff0c;并且用键盘自动输出出来&#xff0c;从而达到模拟人按键的效果&#xff0c;进而来完成生死时速这个打字游戏&#xff0c;直接放代码: import math import time import pya…

python--识别图片中的文字

本篇文章主要参考了 python图像处理之识别图像中的文字 这篇文章&#xff0c;在实现的过程中出现了些偏差&#xff0c;特此记录。因为此时笔者不是第一次安装&#xff0c;所展示的结果会和首次安装的结果有所差别。 1.安装PIL 以管理员的身份打开命令提示符&#xff0c;输入&…

图片中文字的识别

主要用到tesseract这个工具&#xff0c;以及pytesseract和pillow两个库。 首先下载tesseract这个工具&#xff0c;下载地址&#xff1a; Index of /tesseracthttps://digi.bib.uni-mannheim.de/tesseract/ 根据自己电脑系统进行下载&#xff0c;下载后安装&#xff0c;安装的…

文字识别:Tesseract OCR

一、安装并配置Tesseract 1、下载Tesseract-OCR &#xff08;网上直接下载即可&#xff09; 2、双击安装&#xff0c;选择所有人均可使用&#xff0c;避免权限问题 勾选最后一项添加语言包&#xff0c;但是全部勾选需要1.3G&#xff0c;可以点开加号&#xff0c;选择自己所需的…

如何识别图片中的文字

工具/原料 http://jingyan.baidu.com/article/ae97a64699f19dbbfc461d47.html WPS办公软件 AJViewer文字识别软件 准备工作 1 下载软件 ① 在“百度搜索”中输入这2款软件的软件名进行下载。 ② 在“百度网盘”下载&#xff0c;地址是&#xff1a;http://pan.baidu.com/share/l…

免费在线图片识别文字工具

在平时工作中&#xff0c;经常会遇到这样的场景&#xff1a;将图片转为文字。如果只需处理一两张图片或者PDF&#xff0c;用键盘敲文字占用的时间也不会很长。如果文件非常多&#xff0c;用电脑把这些文字全部敲出来&#xff0c;太浪费时间了&#xff1f;有没有一款工具&#x…

图像文字识别

图像文字识别 &#xff08;结尾附样例展示&#xff09; 以下为与图像通用识别的 Python示例代码* #!/usr/bin/env python #codingutf-8from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.…

OCR文字识别

OCR定义和起源 OCR &#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相机&#xff09;检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定其形状&#xff0c;然后用字符识别方法将形状翻译成计…

图片识别文字

浏览链接&#xff1a;http://116.62.147.89:8081/OCRUtil/index.html 最终结果图&#xff1a; 如果已经有access_token&#xff0c;请直接跳到第6步 1&#xff0c;注册并登录百度 2&#xff0c;选择管理控制台 3&#xff0c;选择文字识别 4&#xff0c;选择创建应用 按要求填写…

识别图片文字怎么弄?我来教大家怎么识别图片中的文字

有时&#xff0c;我们需要从图片中提取文本以进行编辑或搜索。虽然手动转录是一种选项&#xff0c;但这是费时费力的工作&#xff0c;而且容易出错。为了解决这个问题&#xff0c;出现了各种各样的技术和工具&#xff0c;可以帮助我们自动识别图片中的文字。在本文中&#xff0…

如何识别图片文字?这几个方法助你轻松搞定

你是否有遇到过这样的经历&#xff1f;收到了领导发来的一份资料&#xff0c;但是很多是图片格式&#xff0c;而我们需要用到图片中的文字内容&#xff0c;这时你会怎么解决呢&#xff1f;如果使用传统的方法&#xff0c;一字一句打出来的话&#xff0c;无疑会增加我们的工作。…