5755|6

1170

帖子

0

TA的资源

至上芯片

楼主
 

关于应用FLASH二次写入防止改写代码问题 [复制链接]

在某种场合,有时不得不将Hex文件即程序代码交付对方自己烧写。

这在FLASH的MCU/ARM/DSP上会经常遇见,因为派人到对方现场ISP的费用太高。

故如何防止对方改写代码是我们需要考虑的问题。

这实际是已知代码反汇编源码的问题,如果不加以手段,那么任何反汇编软件

都会反出汇编源码,即使源码是C源码。

那么如何阻止对方反汇编及调试出程序真正的入口地址呢???

FLASH/EPROM大多都可以“二次写入”,即FLASH的某位为‘1’时可继续写入‘0’

但一旦写入‘0’时必须擦除后恢复为‘1’。

那么我们即可利用FLASH这一“特性”来保护真正的代码和数据在对方反汇编及调试时得不到所需结果。

我们可以将真正的代码(入口地址)和数据在HEX文件里让其为‘空’,即0xff/0xffff/0xffffffff

当首次运行时,解开一部分代码或数据,利用内部或外部看门狗复位,再次重复

解开一部分代码或数据...

这样复位N次后,真正的代码和数据才出现在FLASH中,程序才真正可以运行。

由于“解码”需要N次复位,故反汇编和调试工具也就无用武之地了。

实际应用中,一般要把显式调用函数改为结构函数指针调用。即类似COM接口技术。

它实际上是将重要函数的入口地址作为结构中的成员(函数指针表)。

若是我们将其申请为动态的结构指针,结构成员将要动态装载(函数指针表),这样

我们即可将“解码”后的“数据”装载即可完成。

如何防止代码被改写呢???这实际是个很简单的算术问题。

假入真正的数据或代码为(前3位):

01 02 03 FF.

求和为0B.

由于不为0,我们认为未“解码”。

由于“惧怕”反汇编及调试跟踪“断点”,故不能去判断这个0B不为0是错误!!!

应该将此值去对函数指针表进行“解码”运算,因为正确为0,那么+或^实际

函数指针表会不变的!!!

由于debug时,很难发现IAP调用,即FLASH二次写入,故用0B去“解码”肯定不对。

所以我们只需将FF二次写入F5即可得到:

01 02 03 FA

这样求和为0。

假若这个FA隐藏在别处,或为其他“解码”所用,那么对方想改写源代码,即

想改写01 02 03都会出错。这就达到了我们利用FLASH二次写入保护代码的目的。

假若用CRC等算法和多次复位加载等,对方“解码”难度肯定增强。

当然本主题是在MCU不被解密的前提下,HEX文件的保护问题。
此帖出自单片机论坛

最新回复

。。。。。。。。。。学习了。。。。。。。。。  详情 回复 发表于 2008-10-7 16:25
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

回复 楼主 呱呱 的帖子

热电源又出新招数了。。。
此帖出自单片机论坛
 
 

回复

1170

帖子

0

TA的资源

至上芯片

板凳
 

回复 沙发 yewuyii2 的帖子

哈哈~~~这是和汽车电子约会时他提出的问题
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 呱呱 的帖子

直接用AES~~~其实也只怕防君子~~~
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复 4楼 testcode 的帖子

哎这是实际问题啊,现在俺是整了一个加密芯片
此帖出自单片机论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复 5楼 hq_y1 的帖子

烧写时不加密,等正常运行不就可以读出了。
这方法只适合少数没有读出机制的mcu
此帖出自单片机论坛
 
 
 

回复

2400

帖子

0

TA的资源

裸片初长成(高级)

7
 
查看本帖全部讨论,请登录或者注册
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名赢【小米双肩包、contigo水杯】 | TI MSPM0 系列 MCU 再添新成员
了解TI 前沿新品——高性能与高性价比的优秀组合 MSPM0G351x / MSPM0L111x,4月24日(周四)上午10:00直播~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 12

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表