STM32加密之我见
软件工程师很辛苦。每天加班熬夜,为了一个有创意的算法茶饭不思。面对当前强盗横行的世道,如何尽最大努力将你的劳动成果保住? 基本上锁有单片机都具备了读保护功能。但是还是很多很多的被解案例。所以单有读保护看来是不够的。STM32也难逃这个厄运。曾经看过一篇深圳大学出的文章(作者记不起来了)文章就讲到这个。能不能做点手脚,让被解出来的Flash文件不能直接在其他片上运行。所幸的是STM32具备了96为的芯片身份号码.可惜STM8自105以后的产品都没有了。
就此谈谈我的思路。其中借鉴了网友关于将Option 设置嵌入芯片的思路。既然可以将Option 设置嵌入一段程序到芯片中,那么我们就再多做一点。将读出芯片ID和写芯片ID也做进去。这样的话我们就可以在程序初次运行时让程序自动去读芯片ID之后再写入你指定的位置。再做读写保护设置。这个程序只运行一次后将永远不再运行了。在你的应用程序中每次复位后再运行都做ID确认,不对则进入一个空操作的死循环。这样的话即使程序被人读出来也不能治接应用了。如果他再做大量的反汇编这样就是间很困难的事了。这样做基本没人愿意做了。肯定还有更聪明的破解者会想到将你的Flash保存后再去读出目标芯片的ID,通过查找的方式从Flash文件中找出那段字符来的.这样你的程序也能被盗用到.谁说他要每个IC手工前进目标IC的ID有点麻烦,但终究还是可以用的.这样都不行,那还有什么办法?把ID拆散成不同组合写到不同且不连续的地址去.或者再带上你自己的标识.这样他还能查找得到吗?我觉得这基本不可能了.由于我目前还没有实际应用STM32做项目,所以也没有做这个实践.感情属纸上谈兵.我不是警察更不是流氓.我很讨厌,没有能力抓流氓,但我总是想尽力制止流氓行为.下面是我思路中的步骤.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1 在主程序的起始位置做程序是否为初次运行检查,是就进入第2步的程序中。不是初次运行是就做ID校验,通过开始运行程序,不能通过进入空操作死循环。
2写一段程序包含ID读写功能函数、Option字设置函数、当然Flash 读写函数也是要的。在这个函数中安插一个初次运行标志。运行完后擦除掉。应用程序以此判断是否需要执行这段程序。这段程序不要放在别人容易猜测到的位置。
3在应用程序中事先做几个数组,用于保存从芯片中都出的ID。这个数组里事先放一组自定义的字符。在做写ID时先看看这里面是不是你安排的字符。不是就不写ID。
4将你读出的ID打乱后分成几组写入预定好的数组中。
5写Option字的读写保护及其它相关位。
到此结束,希望对能用得着的朋友有点帮助。
呵呵,第一次写博客。希望不会是闹个笑话。
用户377235 2013-9-4 12:25
zpwang69_817469318 2010-10-2 21:55
用户218635 2010-3-16 11:29
zpwang69_817469318 2010-2-5 22:47
用户227169 2010-2-3 14:45