讨论:如何用片内唯一ID加进行程序加密!(已解决)
本帖最后由 FSL_TICS_ZJJ 于 2014-6-4 11:36 编辑关于用片内唯一ID时行程序加密,不知道各路大婶们都有什么样的思路?
我自己的思路是做在Boot中,用加密算法将唯一ID进行加密,然后将密钥存止Flash固定地址中,上电后芯片先用密钥进行验证,密钥正确,则跳转止应用程序,否则对Flash进行擦除,不知道这样的方式会有什么样的优缺点,欢迎大家进行讨论! 应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...
下暗桩是什么意思?呵呵,学习一下! myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...
这不错,赞一个,间接增加破解成本 wangpengcheng 发表于 2014-5-4 12:53
下暗桩是什么意思?呵呵,学习一下!
就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自己随便玩玩的,客户买的东西时不时有麻烦很快就失去耐性的了 myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...
同问,请教一下暗庄是什么意思 现在许多MCU都有唯一ID了,但讨论的还是比较少。希望能多学习下。 自己写个jlink批处理文件 下载程序之前先运行一下批处理文件 (就是吧唯一id读出来在下载到固定flash位置跟中去) 开机读取两个id 是否一样不就行了{:lol:} myxiaonia 发表于 2014-5-4 13:00
就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自 ...
呵呵,这样挺狠的,但是要搞成随机出错还真不容易,不知道您是否搞过? vipqaz 发表于 2014-5-4 13:19
自己写个jlink批处理文件 下载程序之前先运行一下批处理文件 (就是吧唯一id读出来在下载到固定flash位置跟 ...
你这样的做法,一旦BIN被读了出来了,很容易就能找得到你存的地址,加密是必须得有的,呵呵,加完密后是看不到一样的东西! wangpengcheng 发表于 2014-5-4 16:19
呵呵,这样挺狠的,但是要搞成随机出错还真不容易,不知道您是否搞过? ...
有的芯片有硬件随机数发生器,也可以定时出错 tohell 发表于 2014-5-4 22:01
有的芯片有硬件随机数发生器,也可以定时出错
飞思卡尔的芯片好像没有,呵呵,不过可以做软件随机数,但这种随机数也是有律可循的,下次做项目试一下! 其实做累加更好,把id和一定空间的flash内数据取累加和存到特定空间,开机自己校验 首先运行的是厂商的boot程序,不是用户的boot程序,容易被劫胡 坐个凳子,好好听大神的课! 增加破解难度。万变不离其宗 xjf_hz 发表于 2014-5-5 00:52
其实做累加更好,把id和一定空间的flash内数据取累加和存到特定空间,开机自己校验 ...
这样子的话每次程序升级的时候岂不是都要进行累加计算?而且有时候升级是机器已经在现场了! yangyi 发表于 2014-5-5 06:32
首先运行的是厂商的boot程序,不是用户的boot程序,容易被劫胡
飞思卡尔貌似没有厂商的Boot,ARM的话做Boot也不是难,只是做应用的时候需要把Boot的空间让出来而已! 如果仅仅是根据ID是否对错来决定跳转地址,这种方法太简单,很容易被破解--读出代码,直接修改跳转到正确地址,不去判断ID是否对。 Yang_Alex 发表于 2014-5-5 10:06
如果仅仅是根据ID是否对错来决定跳转地址,这种方法太简单,很容易被破解--读出代码,直接修改跳转到正确 ...
所以才想需要加密,用Boot进行加密与解密! 高级的方法, 利用加壳程序
写一段加解密的程序, 用一个密钥加密
然后拷贝这段程序到ram中运行,
然后解壳,利用密钥解密, 然后读取唯一ID,
这部分程序在明文里面没有 读取 ID 的命令,
只有解密之后才有读取ID的命令
可以迷惑一部分靠反汇编分析读取ID命令来解密的人
这部分什么时候验证, 可以灵活掌握,
高级的方法, 利用加壳程序
写一段加解密的程序, 用一个密钥加密
然后拷贝这段程序到ram中运行,
然后解壳,利用密钥解密, 然后读取唯一ID,
这部分程序在明文里面没有 读取 ID 的命令,
只有解密之后才有读取ID的命令
可以迷惑一部分靠反汇编分析读取ID命令来解密的人
这部分什么时候验证, 可以灵活掌握,{:lol:}
xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序
写一段加解密的程序, 用一个密钥加密
别忘了用完之后把RAM清空或者写成乱数,要不全留在那儿了……
另外这段加壳程序的加密和密钥如何保存、如何保密,也是个问题 wangpengcheng 发表于 2014-5-4 16:22
你这样的做法,一旦BIN被读了出来了,很容易就能找得到你存的地址,加密是必须得有的,呵呵,加完密后是 ...
大部分二进制指令都是一样的,把ID加密了之后,读两份binary一对比,还是很容易暴露ID存在哪里了,因为就那一小段儿不一样…… xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序
写一段加解密的程序, 用一个密钥加密
好办法,最好将这段程序分段存储,如果在一个数组中,依然很容易被反汇编出来 wangpengcheng 发表于 2014-5-5 12:06
所以才想需要加密,用Boot进行加密与解密!
你只是加解密ID而已,然后跳正常地址。破解直接跳过你的ID加解密不分,后面就正常了。
我自己觉得应该ID不做加密,但是多次在正常程序不同位置中验证不同加密方法加密ID后的结果,然后正常运行一段时间转不同情况(千万不要死机,死机就被发现不正常了)。 lileistone 发表于 2014-5-5 13:25
大部分二进制指令都是一样的,把ID加密了之后,读两份binary一对比,还是很容易暴露ID存在哪里了,因为就 ...
说的也是,除非将所有程序都放在RAM中运行,然后如前面那位所说的,加个壳,这样的话BIN就完全不一样了,只有壳体部分相同,但目前我们用的M0+与M4根本就没有那么大的内存! Yang_Alex 发表于 2014-5-5 13:49
你只是加解密ID而已,然后跳正常地址。破解直接跳过你的ID加解密不分,后面就正常了。
我自己觉得应该 ...
用系统单建一个专门读ID的线程,然后OK就发信号量给正常进程,不OK就不发,让正常线程偶然出错,哈哈,这样行不? 飞思卡尔有些有BOOT,有些没有。 myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...
对,有道理。让他先迷迷糊糊的着,偶尔给乱搞。这样就算破解也要难些 yangyi 发表于 2014-5-5 19:35
飞思卡尔有些有BOOT,有些没有。
我对Kinetis比较熟悉,好像没有看到Kinetis系列的有Boot,不知道飞思卡尔其它的哪些系列有? source.ant 发表于 2014-5-5 20:19
对,有道理。让他先迷迷糊糊的着,偶尔给乱搞。这样就算破解也要难些
是啊,虽然我们做的软件技术含量上不高,但也不能让某些人利用啊{:lol:} xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序
写一段加解密的程序, 用一个密钥加密
加壳不错
还可以做个小型软件虚拟CPU,关键位置用自己指令执行,到这一步估计破解的要死了 gongxd 发表于 2014-5-5 22:15
加壳不错
还可以做个小型软件虚拟CPU,关键位置用自己指令执行,到这一步估计破解的要死了 ...
我估计没有几个网友的程序需要保密到这个程度。{:titter:} 而且太浪费程序空间。 你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了 提高破解成本就行了。 hejiang177 发表于 2014-5-6 09:07
你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了 ...
呵呵,您考虑的太多了,我相信坛子里的朋友都是有职业道德的! 围观,来听听大神的见解 hejiang177 发表于 2014-5-6 09:07
你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了 ...
道理是这样明白,但具体应用各有不同。 myxiaonia 发表于 2014-5-4 13:00
就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自 ...
说的好 以后就这么干 霸气侧漏 发表于 2014-5-6 20:46
说的好 以后就这么干
让程序随机出问题的事情也不容易干的,呵呵,一般只要是做出来的,基本都是有规律的! wangpengcheng 发表于 2014-5-7 09:04
让程序随机出问题的事情也不容易干的,呵呵,一般只要是做出来的,基本都是有规律的! ...
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个月,设备该进现场进现场了,该验收已经验收了,然后找个悬空的AD引脚做个电压采集,
确定为当天的心情指数,如果心情不错呢,就好好干活,如果心情不太好呢,就根据具体指数在用户数据的不同位置给它修改一个字节,当然协议啊校验啊之类的还是要遵守的。
当然刚开始不要太频繁,十天半个月来一下,不是还有累加器吗?随着累加的日子增加,爷的心情越来越糟糕...... Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...
牛B人,哈哈!不知道这样子会不会让抄板的人疯掉! Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...
真是厉害吊炸天 wangpengcheng 发表于 2014-5-7 10:48
牛B人,哈哈!不知道这样子会不会让抄板的人疯掉!
隔一段时间要重装程序.{:biggrin:} gtnr 发表于 2014-5-7 12:06
隔一段时间要重装程序.
然后像小米手机那样,隔一段时间我就要重新刷一下机,不然问题频出,我都快疯了! 不是绝对安全的 stm32f103f4 发表于 2014-5-7 12:46
不是绝对安全的
你有绝对安全的方案没有? appcat 做程序也可以这么有情趣。牛 有没有这方面的书,分享一下,谢谢 chunyu 发表于 2014-5-7 13:41
有没有这方面的书,分享一下,谢谢
没注意过是否有这么一本书,但是我想程序加密历来就有,可以借鉴一下电脑上程序加密的书籍去看一下! wangpengcheng 发表于 2014-5-7 12:10
然后像小米手机那样,隔一段时间我就要重新刷一下机,不然问题频出,我都快疯了! ...
那你是不是用的是山寨的小米啊? gtnr 发表于 2014-5-8 07:40
那你是不是用的是山寨的小米啊?
有可能吧,雷布斯可能发了个山寨货给我! Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...
太容易破解了。如果被发现,这个AD引脚固定上啦或下拉,心情就被固定了。还是藏起来,用软件搞些事会比较好。 yangyi 发表于 2014-5-8 09:30
太容易破解了。如果被发现,这个AD引脚固定上啦或下拉,心情就被固定了。还是藏起来,用软件搞些事会比较 ...
你也说了,如果被发现......
一颗MCU可以AD的引脚很多,你要一个一个或者都组合实验吗?你是在抄板,在破解啊,如果你花的时间和成本让你或者你的客户无法接受,那我加密的目的就达到了。
况且这只是给楼主的一个思路,一个MCU里边可以随机的因素可以很多,偏偏不是软件自身能做到的,所以就事论事没有任何意义。加解密永远是无止境的一场战争,看谁想的巧妙,
看谁更能琢磨对手的心理,这不是一个纯技术层面的话题。 mark一下 关注的人好多啊,再看看回复。 jiang887786 发表于 2014-9-4 11:18
关注的人好多啊,再看看回复。
一般讨论的东西里面都有一些自己没见过的,呵呵! 同问,看看有什么解决办法 下暗桩是什么东西?后门?
页:
[1]