嵌入式芯片加密防抄板技巧简析
目录标题
- 背景
- 外部IC加密
- 简易MCU端加密
- MCU端加密优化版
- ID地址混淆
- 代码混淆
- 校验区混淆
- 固件防修改
- 芯片混淆
- 总结
背景
随着嵌入式和物联网的快速发展,越来越多的嵌入式产品推向市场,如何保证产品程序的安全和知识产权不受侵害呢,目前主要有两种方式:MCU端加密和外加加密IC来进行相关的产品和知识产权保护。
最近跟几个朋友讨论了以下相关加密的技巧,在这里分享一下。
外部IC加密
一般来说就是,在主控芯片和加密芯片都预存一个密码,STM32读取一个加密芯片生成的随机数,然后与8位密码做一个加密运算,把这个结果发给加密芯片比较。加密芯片用同样的随机数和密码做加密运算,结果是和STM32算出来是一样的则正常运行。
以上算是比较常见的ic加密的流程。
实际上比较容易看汇编很容易找到比对点,可以直接跳过比对点。
这种加密IC一般都是国外的,国外破解压力小,功能单一,另外电路要加外部IC,优势上感觉不是很明显。
简易MCU端加密
就是纯软件做加密了,我们这里着重讲这种,一般来说STM,NXP等常见芯片商的芯片上都有UID和flash读写保护。
MCU加密也常常就是UID+flash读保护为基础。flash读保护做第一重保护,防止别人直接读出你的固件(虽然也比较简单能读出来,淘宝成本50块)。UID加密做第二重保护,将硬件id加密存储在flash中,当固件id解密出来和硬件的id不匹配无法正常运行,不同的芯片不同的UID,别人抄完硬件烧录固件的时候,因为软件uid和硬件uid比对不通过,仍无法正常运行。
以上算是比较简单的MCU加密了,基本上所有的MCU端加密都是以以上思路来进行的。剩下的就是多加混淆,增加他人的破解成本了。
MCU端加密优化版
首先,上面说了芯片的flash读保护只能说是聊胜于无,现在常见芯片的flash保护破解基本已经是成熟产业链了,不要太依赖。所以程序仍然需要注意代码上的混淆加密了。
ID地址混淆
一般来说芯片的uid都是通过指定地址读取,如stm32f103的地址就是0x1ffff7e8,注意在程序中不要用以下方式直接读取,别人直接通过固件搜索地址0x1ffff7e8就可以知道你的cpuid读取在什么位置,从而找到校验区直接修改固件就可以直接跳过你的校验。
CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);
注意使用公式计算出存储uid的地址,这种别人就没办法直接搜索出代码了。
代码混淆
我们的代码一般写不满芯片的flash,但是flash空的地方不要闲置,使用有用的代码缀余出来填满后面的空闲空闲区域,增加逆向工程破译难度。
校验区混淆
校验不要使用if else 而是用switch case,汇编里if else更容易搜索出来,一个一个筛选也很容易找到校验区。
当校验失败不要直接写while死循环,这样也容易跟踪知道你的校验区了。
这时你可以设计一种校验失败不直接死循环,而是使用一种校验错误次数,上电校验失败,次数加一,并在另外一个地方校验错误次数,在错误次数30次以下正常执行,在30次以上通过停止软件看门狗让他无限重启。
这样,在别人以为找到你的校验区成功破解的时候,并抄板准备量产的时候出现无限重启的问题,也会很让人崩溃的。
固件防修改
以上种种方法都算是混淆,同时我们也可以在固件防修改上下写功夫。固件的自校验可以参考我之前的博客
固件crc校验失败时不让正常运行。
芯片混淆
我们芯片一般都有丝印,别人可以通过丝印寻找对应的现成破解方案的时候,我们可以把一些非常不常见的杂牌芯片丝印印上去,这样也一定程度上误导并筛选掉一些逆向工程的破解。只不过这种改丝印的些许增加成本。
总结
说了这么多,无论是硬件加密还是软件加密,其实基本思路都是加密算法+UID。目前我所知的加密ic功能都比较简单,硬件加密的优势好像没有那么明显。反而软件加密能玩的花样不少。不过总的来说加密都只能说是增加别人的破解难度,并不存在真正安全的加密,大家可以根据项目自行设计合适自己的混淆加密逻辑。
嵌入式芯片加密防抄板技巧简析相关推荐
- 怎么防抄板:从保护固件与安全认证开始
在物联网和智能设备飞速发展的今天,嵌入式软件已经成为电子设备核心的知识产权,很多关键创意或者算法都体现在其中,而怎么保护嵌入式软件和电子设备产品不被抄袭或入侵成为很多开发者头疼的问题,一般来讲如果需要 ...
- 防抄板加密芯片ALPU笔记
一.加密芯片的作用 1.版权保护 防抄板防复制 2.数据加密 2.1数据传输加密 语音通话加密.物联网服务器传输数据加密.IPC视频加密.智能家居设备通信加密等等 2.2数据存储加密 将机密隐私进行加 ...
- 凌科芯安发布8位多接口嵌入式防抄板加密芯片
凌科芯安发布8位多接口嵌入式防抄板加密芯片 LKT4102是8位智能卡平台多接口加密芯片,采用专用的智能卡芯片平台,硬件平台使用8051内核,用户既可以按照通用I2C来保存数据,也可以把主要算法放到芯 ...
- ALPU-C防抄板加密芯片
前言 公司投入大量人力财力研发一款新的电子产品或者软件算法,推出市场后,却被人抄板复制,知识产权和劳动成果被窃取,公司受到重大损失,其实通过技术手段完全可以规避这一风险,加密芯片可以有效的防止产品被非 ...
- 适合防抄板,耗材认证,核心算法授权,程序保护,数据传输加解密等应用的逻辑加密芯片和带安全内核加密芯片
适合防抄板,耗材认证,核心算法授权,程序保护,数据传输加解密等应用的逻辑加密芯片和带安全内核加密芯片.有需求的朋友可以了解下: 1.品牌:MICROCHIP/ATMEL 国别:美国:代表型号:ATS ...
- 加密芯片在防抄板中的应用
在激烈竞争的电子及信息技术产品行业,很多公司费尽心血研发的产品,在投放市场不久就被竞争对手破解,产品破解的时间和成本越来越低,在很多行业出现了仿制品多于自有产权产品的现象,严重损害了产品研发者的权益. ...
- Neowine防复制防抄板的加密芯片是主要分为以下几种
Neowine防复制防抄板的加密芯片是主要分为以下几种: ALPU-C : 特点:客制化独立ID ,定制的加密库, 封闭式供货,市场流通性为0, AES-128算法,IIC通信,封装SOT23-6 A ...
- 防抄板芯片,加密芯片,版权保护芯片,模块的原理与控制
加密ESAM模块 加密ESAM模块是将一颗具有操作系统(COS)的安全芯片封装在DIP8或SOP8模块中,做成一个安全存取模块.将其嵌入到水.电.气.暖智能(卡)表.机顶盒.智能电器或其它专用设备中, ...
- 某数加密的流程与原理简析
啃了这么长时间,基本上已经把某数的套路摸了个八九不离十,不愧是中国反爬界的集大成者,感觉收获满满,这里就简单记录一下分析成果. 注意:某数在不同的网站上有不同的版本,其流程也略有不同,这里的流程不一定 ...
最新文章
- 必须进行支持的游戏方可使用此功能_企业微信 3.0上线,开放朋友圈功能,又一风口?...
- python 检验数据正态分布程度_Python DataFrame 检验数据正态分布及平均值差异检验...
- 学好人工智能,其实不难,从以下几点开始
- 【Python】调用百度云API驾驶行为分析 Driver Behavior
- 将某内存单元数据做乘法 + 内存间数据的复制
- Storm教程1理论介绍
- 【C++学习】C++中的强制转换
- java作业——Day0014
- php 分页 报表 框架,zentaoPHP框架的分页解决方案
- Hyper-V 3.0网络虚拟化PART 3:内部交换机
- 乐视android系统耗电量大,乐视手机突然充电慢耗电快,怎么解决?
- Xcode证书路径和缓存清理路径
- 阻塞、非阻塞、同步、异步的区别
- Windbg Configuration
- 华为性格测试通关指南
- rpm命令的使用与软件的安装
- 基于天天动听API开发在线音乐查询网站
- JS 字符串截取切割操作汇总
- 标准化作业指导书的作用是什么?如何制作标准化作业指导书?
- CANopen 7.过程数据对象 PDO Process data object)
热门文章
- python简述程序的ipo结构_简述程序设计的IPO模式的特点。
- 并行insert出现library cache lock与cursor: pin S wait on X等待问题记录
- 蛮力法分硬币问题 c++ cpp
- “泰迪杯” 挑战赛 - 基于市场资金流向分析的商品期货量化交易策略(附suibian代码)
- TTL,CMOS,LVTTL,LVCMOS电平标准
- 手游逆向专题<英雄联盟手游>: Unity内还原亚索渲染效果
- VIT Adapter【Vision Transformer Adapter for Dense Predictions】论文笔记
- android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...
- 利用站点抓取功能批量下载壁纸
- 英语“死”的委婉说法