购物车0种商品
IC邮购网-IC电子元件采购商城
MCU之思想
(2011/10/21 9:55:00)

要复制一块PCB, 破解者需要知道:
1, PCB图纸. 这个 可以通过抄板得到. 问题不大. 不论是几层板, 都有抄的, 基本上无法防. 打磨型号基本无用, 因为可以通过测试的方式试出来.
2, MCU的hex文件, 就是软件部分. 这个对大部分破解者来说更是小菜一碟, 通过对某些管角加压的方式来读出MCU中flash文件, 修改成hex文件.

这是现在的破解情况.


那么要防破解, 就是要给这个PCB一些唯一的东西, 使得破解者无法复制, 或者复制的成本很高, 高于研发成本.

我们首先想到的肯定是唯一序列号芯片. 比如ds18b20之类的, MCU可以通过SPI总线读出唯一的序列号, 这个序列号与hex文件中唯一的序列号进行比对, 从而确定这块板子是对应这个hex文件的.
也就是说, 破解者得到了hex文件后, 是不能直接在复制的硬件上使用的.

这是一种常见的防破解方法.

但是这种类似加密狗思想的防破解方法早就被破解者们攻的体无完肤了. (1992年的破解就是这种.)
破解过程是这样的:
1, 收集三个或者更多母本hex文件. 并记录唯一序列号. (没有写外边的不记录)
2, 比对这几个hex文件的不同之处, 找出序列号在hex文件中位置.
3, 直接清空, 甚至寻找附近的判断jmp语句, 并改成判断成功的跳转.,
4, 找一个空序列号的芯片替代母板芯片.

简单的讲, 这个破解思路类似我们的PC程序破解,就是想办法找到序列号判断的语句, 并破坏之. 寻找序列号位置的方法使用了对比多个母板hex文件.

这个破解成本稍微高些, 但是也已经产业化. 基本无效.


下边写hex文件的加密.
hex文件就是程序编译成的机器码. 拿到了hex文件相当于拿到了汇编文件, 当然, 里边助记符啥的都没有, 现阶段得靠人猜(有自动反汇编的软件存在的. 不过那是独门绝技, 危害较大, 我们当它不存在就是了), 如果是C语言写的程序, 肯定无法根据hex文件反解到C了---如果这个可行的话, 我们所用的软件都是可以被还原成C的.

假定一个汇编程序编译成了hex文件,

那么, 我们知道这个hex文件的内部机器码次序是基本对应汇编代码的. 假使程序共有10个函数f0(),f1(),...f9(),顺序编程. 那么hex文件中这10个函数的对应二进制段也是10个二进制代码段.
一个段可以表示为如下图:


函数的调用实际上是call的这个f0_start 地址, 用寄存器传递的参数. 简单的讲就是运行这个函数, 就是pc指针从f0_start开始跑.
这10个函数结构类同.
我们知道, 程序是有函数组成的, 对应的, hex文件是由很多个函数二进制段组成的, 函数的调用是call函数地址来完成的. 那么, 我们可以将函数的地址做一个列表, 函数的调用可以先查这个表, 然后call表里的地址. 相当于有一个函数表存在.

在C语言中, 我们通过
1, 创建2个结构体s0,s1
2. s0中有2个成员,ptr为指向s1的结构指针,fn为函数的个数
3. s1中只有一种数据类型即函数指针,F0,F1,..F9对应指向函数f0(),f1(),...f9(),Fx指向f9()后的空函数fx()
即f0()(),f1(),...f9()的长度为L0=f1()-f0(),L0=f2()-f1(),L3=f3()-f2(),...L9=fx()-f9(),
函数调用方式:
s0->ptr->F0(),s0->ptr->F1,...s0->ptr->F9()

这样, 结构体S1就是我们的函数首地址表, 而s0->ptr->F0()这种调用方式又决定了先查表再调用这种思路.

下一步就是重点的加密了!
1.ISP下载hex文件的以前, 将hex文件中的f0(),f1(),...f9()代码段顺序打乱,F0,F1,...F9顺序不变值变化(就是让指针对应不了函数),即每次isp下载的Hex文件每次传送都不一样
网站记住s0,s0全部成员后填充为空!!!,这样isp过程即使拦截也无法知道s0,s1
2.IAP
IAP命令参数及调用地址由IAP与串口通讯动态得到,也想就恢复了s0和s1,程序后将IAP入口指针清零.
下边举个例子说明.

假定原来hex文件结构如图:


现在我调换下f0和f1代码段的位置, 变成:


我们看到, f0的入口地址现在应该为2, 但是因为S1结构体没有变化, 所以记录的f0入口地址依然为1, 那么, 可以想象, 这个hex文件是无 法 正 (我*, "法 正" 也是敏感字?)常运行的.

那么, 如果我们在改动函数代码段的同时, 调整对应的入口地址表呢?
如图: 这样, hex文件就又能使用了!



那我们没事鼓捣这玩意有什么意思呢? 这个东西可以用于hex文件加密.

思路如下:
假定有种产品, 10万台, 有pcb文件图纸和hex文件. 要防破解. 不能增加太大成本, 怎么办?
用这个思路, 将hex文件变成10万个不同的无法使用的hex文件, 记录每个hex文件对应的可以正常使用的S1结构体(就是真正的地址表啦). 烧入10万个产品卖出.

那这些产品都是无法直接使用的. 因为它们的hex文件都是不正确的, 那么如何在产品出厂后改正这些flash中的数据, 来修正S1结构体呢, 很显然, 只能用bootload, IAP编程.

产品一旦上电, bootload程序运行, 等待从外围io(UART, SPI, 以太网)读入S1结构体的数据, 得到S1结构体数据后, 修改flash中S1结构体, (这地方估计写的不对.......)

(先空着不写)

也即是说, 每一个hex文件需要一个S1结构体信息----相当于密钥文件才能运行.

我们只要保证S1结构体不被别人获取就是了, MCU内部的hex文件本身就是不能运行的.

那么如何方便的, 不需要耗费太高成本的提供S1呢?
答案在于网络!
























(未完待续, 慢慢写)

网友评论:给酷

网友评论:听大师们讲课.

网友评论:真羡慕你们,我还在为有人来破解我的产品而不懈努力

网友评论:呵呵,这是与老hot谈过的内容,sinanjj还要加强理解,sinanjj字面上所指涵盖的范围很宽泛,老hot所言则主要针对可远程ISP的嵌入式系统,这种系统是有前提的,首先系统资源要足够,其次本身要带远程通讯接口,至少也得通过本地人为干预临时引入其它平台上的远程接口,这种思想对工控系统很有意义,工控系统满足了资源条件,本身也足够复杂,更有知识产权保护的需要。老hot的这种思路可以引入到任何具备类似条件的嵌入式系统上,越复杂的越有价值,简单系统则要走不同的思路,方程式赛道是给F1赛车准备的,开辆QQ还是别上去的好,更不要说骑自行车了。

网友评论:在程序里留后门吧,不公开的协议。每季度或半年访问一次,看是否是合法产品。
留版权信息,密文。
让确解的代价大于开发的代价就可以了。

网友评论:程序里留后门,能反汇编的话轻松解决,协议不公开架不住端口捕获……
对于廉价产品,芯片的选择很重要,资源足够可再采取防反汇编技术,次之加版权信息,而对于价格较高的复杂嵌入式系统一般的手段就不够了,而有些系统甚至要求必须开放协议、开放加密算法,老hot的思路是针对这类系统解决问题的方向之一。
对付破解,一是增加其成本,二是拖延其周期,三是留取其盗版证据。

网友评论:支持26 楼

利润高的,破解也拿不到什么订单
利润低的,多半没什么技术含量,直接重写算了

网友评论:
给大家推荐一个软件,ida pro,所有语言都能反编译.包括arm
icecut 发表于 2010-7-20 09:43
首先要明确PC端和嵌入式编程平台的最大差异:
前者程序从硬盘取出,在ram中运行。程序的二进制码可以随意读取。
后着程序大部分可以直接在rom中运行。程序的二进制码可能受限制读取。

前者理论上全部可以破解,后者破解途径较多和复杂,有些几乎不能破解和反汇编或难度很大。

网友评论:为何要破解,而不去找人开发.
这里就有很多问题,找到行业内高手几乎不可能,外行进来开发,几乎就行业白丁,新开发产品,周期长,费用高,而且可能BUG一大堆.
另外,高手也不会轻易去为别人仿制产品,大多是水平一般的.

这也是为什么宁可破解,也不会找人去重新开发了.
被仿制产品都是成熟的产品,就是被市场认可的,这才是问题关键.
不少产品,从新开发,到成熟都有几年时间,不断改进的.

网友评论:

对于“版权信息”的看法:
所谓暗码及版权信息,若从未激活且想以此作为“呈堂证供”---简直是痴心妄想~~~
因为超级反汇编的理论基础是代码和数据的分离技术,即程序运行过的区域为代码区,
未运行过的为数据区。
此数据区又有真伪数据之分,即寻址过的数据区为真数据区,否则为伪数据区。
伪数据区实际有3种情况:
1.从未访问的用户自定义函数,即编写的函数从未调用过。在优秀的编译器将被优化点而不存在。
2.从未访问的初始化过的全局或静态变量,即声明的变量从未访问过。在优秀的编译器将被优化点而不存在。
3.所谓被某些怪异的方法或绝对定位的一些版权信息或暗码。此类数据即可被超级反汇编轻易找出并消灭之。

所谓“激活”即此版权信息参与了某种运算,那么它属于程序不可分割的一部分。
而未激活的暗码或版权信息,由于它不属于程序的一部分。则可被破译者随意“优化”而被灭之。此暴行绝不会影响程序的运行。

所以,未激活可被灭之,激活则必被解密。


矛与盾之争,盾有几分生机???

网友评论:版权信息应当被程序访问,不论明的还是暗的,所谓手脚也只能在访问的基础上作为,当然此法存在被解密或绕开的风险,只适用于廉价小系统。很多小产品都是直接解密后1:1照抄,就是有鲜明的版权信息盗版者也不在意,有心想改的还算要求高的,有些手段对付的就是这类盗版者。

35楼的看法是不正确的,你是不知道业界的现状……

网友评论:宏晶的MCU不是说无法解密的吗?

数据手册中这样写道:
每片单片机具有全球唯一身份证号码(ID号)
无法解密,加密坚不可摧

网友评论:ATMEL新推出的基于SHA-256 公开哈希算法的加密芯片,采用SOT-23-3的封装,使用单线通信,只需要一个GPIO资源,有极高的安全性。产品特点:

1、内置多组256位掩膜安全密钥,密钥外部不可读。

2、64位安全OTP熔丝,安全熔丝状态外部不可读。

3、48位唯一序列号

4、高强度SHA-256算法。

5、不需要签订NDA,使用简单,ATMEL完全源代码支持。

6、适用于从机端。

网友评论:呵呵,LS的广告是白打了,前面就已经说过了,这种加密方法也容易绕开的。

网友评论:一般产品在代码内部保留有特殊版权信息和各种暗码,必须通过一些特殊操作才能调出来,然后选择解密成本相对高一点的芯片,

多数商业产品如此即可,现在社会一款产品很难保证3年不做升级,不管是自我功能完善、提高性能、降低成本或者是用户要求增加,解密者跟跑也是很累的。

网友评论:这个必须要关注

网友评论:
给大家推荐一个软件,ida pro,所有语言都能反编译.包括arm
icecut 发表于 2010-7-20 09:43
这个没那么神,,,

网友评论:好,各庄的地道都有很多高招,回头儿咱也破一个。。。。。。。

网友评论:
真羡慕你们,我还在为有人来破解我的产品而不懈努力
5880527 发表于 2010-7-20 12:13
一个软件被破解是社会对其软解设计者能力和智慧的褒奖,是他此生的荣耀与自豪。
反之,是他此生的叹气与悲哀。
破解而未果,是他此生的霸气与狼嚎...

网友评论:46#
呵呵,褒奖、荣耀、自豪这些词有点不妥帖哈,最多就自己偷着乐一会不得了了

网友评论:哈哈~~~俺说的社会是“黑社会”,它对您成功软件的关注、认可及价值要远比“白社会”更高、更强。

网友评论:我,我,我的水平还没达到,就不掺和到这个帖子里来了

网友评论:记号,慢慢看

网友评论:有道理

网友评论:顶好贴

网友评论:再想一些办法

网友评论:有道理,关注

网友评论:好东西

网友评论:记号--关于嵌入式软件加密

网友评论:S1结构体信息, 难度不会给人拦截,复制,够傻的。

网友评论:简单芯片的反汇编没有那么复杂,即使一堆函数指针互相躲猫猫,或者估计指令字节错位
挂到虚拟机去去跑,甚至能透过虚拟bridge来连接验证服务器,然后分离数据和程序,记录程序执路径树
然后反汇编全出来了,然后把验证函数改成直接Return TRUE,哈哈哈
以前我*这个接过几个单,现在金盆洗手了

复杂的是大容量单片机的反汇编,比如1M字节的纯代码,让你没有这么多的经历去分析
比如4K用一天的时间可以搞定,40K代码的复杂度绝对超过4K的10倍

简单的MCU防破解,还是要选好芯片,提高破解成本,另外彩蛋藏版权信息
比如PIC和台系EMC的一些大销量的型号,破解成本非常低,100-300¥就可以搞定
我曾写过一个商业化破解的帖子,说明为什么某些IC破解成本如此之低

网友评论:
简单芯片的反汇编没有那么复杂,即使一堆函数指针互相躲猫猫,或者估计指令字节错位
挂到虚拟机去去跑,甚至能透过虚拟bridge来连接验证服务器,然后分离数据和程序,记录程序执路径树
然后反汇编全出来了,然后把验 ...
McuPlayer 发表于 2010-7-24 10:42
帖子在哪里?发上来看看 !

网友评论:
S1结构体信息, 难度不会给人拦截,复制,够傻的。
g_turing 发表于 2010-7-24 07:12
让破解者拦截也没用, 不是写了未完待续吗?


慢慢看吗.



S1只是加密hex文件本身的, 下边还有复杂的.



而且, coretx-M0系列可以自锁死isp, 内有唯一id......

网友评论:图纸出来了,俺要将其付诸实际,有点:



网友评论:强大的楼主。。

网友评论:本主题的中心思想是让解密者即使是100%的拦截也拿不到hex文件的全文。而且修复函数入口指针的工作在iap加密流中,拦截的hex文件无任何有价值信息,而且是每次传播的内容都不同。更何况每个芯片还有一个uid.
总之,本思路是开创性的,方法也是现有条件可以满足的。

网友评论:呵呵,今天才看到.有些用处.但是也犯了网上公开加密算法都有的错误(仅仅是个人看法)......

网友评论:
呵呵,今天才看到.有些用处.但是也犯了网上公开加密算法都有的错误(仅仅是个人看法)......
不起眼 发表于 2010-8-1 13:01
请与赐教~~~

网友评论:你的朋友太多了,不敢说.千万别生气.

网友评论:直接完整复制呢?无所谓获得hex文件,反正只要拷贝出一个能完整运行的设备里的映像文件就行。
去法院告?这是唯一的路径,但很多时候你会发现你比被告死的更惨。

网友评论:
你的朋友太多了,不敢说.千万别生气.
不起眼 发表于 2010-8-1 14:47
哈哈~~~站内短信

或:

QQ:1270688699 俺每日20小时在线,注意添加好友信息,否则不加之

网友评论:敢于公开算法的加密算法才是nb算法。哪些不敢公开的,一般是因为漏洞较多。

网友评论:
直接完整复制呢?无所谓获得hex文件,反正只要拷贝出一个能完整运行的设备里的映像文件就行。
去法院告?这是唯一的路径,但很多时候你会发现你比被告死的更惨。 ...
aceice 发表于 2010-8-1 16:49
PC端软件和单片机运行环境造就了它们最大的区别。

前者可以很轻松的拿到完整的EXE文件,后者就有可能让你得不到完整的HEX文件。

但若都采用这种认证机密机制,将会都得不到完整的执行代码。

即使得到也是本机的运行代码。

菜农的天下无贼论实际就是同时针对这两不同领域的。

但菜农更注重于后者的研究,因为前者。。。

网友评论:mark
加密芯片、防芯片破解、防反汇编,一个都不能少

网友评论:mark

网友评论:学习

网友评论:华而不实,我的芯片一般加密成只读.呵呵.

网友评论:加密无止境!

网友评论:刚一位老板拿着一块板找俺克隆,一看MCU是三星的;“这个MCU 买不到,即使有也没有仿真器等开发工具。唯一的办法,我给你换51MCU,重新写程序。”

成交,一个月完成,2万劳务费。

所以我说,程序加密没有任何意义。只要知道板子功能,看得见外围芯片是什么,自己找个MCU自己写控制程序了。

你若没有自己写程序的能力,源代码破解了也没用。(还有硬件)你看不懂呀。
你若有自己编写程序的能力,你根本不需要仿效别人的源代码,你自己写的比他好,干嘛要克隆他?


、、

网友评论:这种加密方式主要是用来防止传输过程泄密
其实,你传输完以后,只要能得到芯片正常运行的Hex文件,前面的功夫都白费了

网友评论:V5 强大的山寨

网友评论:离加密专家距离非常远。。。
赞扬一下勇于发言的精神
哈哈

网友评论:好好听课 虽然世一头雾水 高手哇

网友评论:原来是老帖了。。。
加密解密在于思路...
知道了加密方式,自然迎刃而解。
普通MCU可以直接通过读FLASH取得机器码,这使很多加密算法都做无用功。因此加密要放到硬件上。
从硬件上实现无法读取的加密,再从软件上实现算法加密,这才是加密的方向。

网友评论:再强的加密都难抵有心破解的人。重要是你做产品的思想。产品的质量,创意,服务,市场销售网络,品牌效应永远无法复制!

网友评论:mark

网友评论:谢谢诸位,先存了,慢慢悟道,呵呵

网友评论:顶一下

网友评论:加密是把双刃剑啊!
在主程序里加装防破解外壳得处处小心翼翼,稍不留神很容易把本身没有问题的主程序里
带来新的隐患,而且当时测试可能还不能立即发现
到用户那里特定时候就会暴露出来,看用户怎么收拾你!
所以加密也得处处小心!
我曾经一个产品,用于加密的时间比搞主程序时间还久
程序里加密的代码比主程序代码还多

浏览:(609)| 评论( 0 )
博文评论

  • 昵 称:
  • 内 容:10~250个字符
  • 验证码: 验证码看不清楚?请点击刷新验证码
  •                      
  • 博文分类

    热点博文

    最新博文

    最新评论

    IC电子元件查询
    IC邮购网电子元件品质保障