wangpengcheng 发表于 2014-5-4 12:30:43

讨论:如何用片内唯一ID加进行程序加密!(已解决)

本帖最后由 FSL_TICS_ZJJ 于 2014-6-4 11:36 编辑

关于用片内唯一ID时行程序加密,不知道各路大婶们都有什么样的思路?
我自己的思路是做在Boot中,用加密算法将唯一ID进行加密,然后将密钥存止Flash固定地址中,上电后芯片先用密钥进行验证,密钥正确,则跳转止应用程序,否则对Flash进行擦除,不知道这样的方式会有什么样的优缺点,欢迎大家进行讨论!

myxiaonia 发表于 2014-5-4 12:45:30

应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了

wangpengcheng 发表于 2014-5-4 12:53:29

myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...

下暗桩是什么意思?呵呵,学习一下!

mq-life 发表于 2014-5-4 12:59:00

myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...

这不错,赞一个,间接增加破解成本

myxiaonia 发表于 2014-5-4 13:00:03

wangpengcheng 发表于 2014-5-4 12:53
下暗桩是什么意思?呵呵,学习一下!

就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自己随便玩玩的,客户买的东西时不时有麻烦很快就失去耐性的了

WXF_mabg 发表于 2014-5-4 13:02:59

myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...

同问,请教一下暗庄是什么意思

Yang_Alex 发表于 2014-5-4 13:05:47

现在许多MCU都有唯一ID了,但讨论的还是比较少。希望能多学习下。

vipqaz 发表于 2014-5-4 13:19:04

自己写个jlink批处理文件 下载程序之前先运行一下批处理文件 (就是吧唯一id读出来在下载到固定flash位置跟中去) 开机读取两个id 是否一样不就行了{:lol:}

wangpengcheng 发表于 2014-5-4 16:19:56

myxiaonia 发表于 2014-5-4 13:00
就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自 ...

呵呵,这样挺狠的,但是要搞成随机出错还真不容易,不知道您是否搞过?

wangpengcheng 发表于 2014-5-4 16:22:01

vipqaz 发表于 2014-5-4 13:19
自己写个jlink批处理文件 下载程序之前先运行一下批处理文件 (就是吧唯一id读出来在下载到固定flash位置跟 ...

你这样的做法,一旦BIN被读了出来了,很容易就能找得到你存的地址,加密是必须得有的,呵呵,加完密后是看不到一样的东西!

tohell 发表于 2014-5-4 22:01:29

wangpengcheng 发表于 2014-5-4 16:19
呵呵,这样挺狠的,但是要搞成随机出错还真不容易,不知道您是否搞过? ...

有的芯片有硬件随机数发生器,也可以定时出错

wangpengcheng 发表于 2014-5-4 23:55:19

tohell 发表于 2014-5-4 22:01
有的芯片有硬件随机数发生器,也可以定时出错

飞思卡尔的芯片好像没有,呵呵,不过可以做软件随机数,但这种随机数也是有律可循的,下次做项目试一下!

xjf_hz 发表于 2014-5-5 00:52:26

其实做累加更好,把id和一定空间的flash内数据取累加和存到特定空间,开机自己校验

yangyi 发表于 2014-5-5 06:32:47

首先运行的是厂商的boot程序,不是用户的boot程序,容易被劫胡

jiang887786 发表于 2014-5-5 08:07:20

坐个凳子,好好听大神的课!

master5888 发表于 2014-5-5 08:33:44

增加破解难度。万变不离其宗

wangpengcheng 发表于 2014-5-5 09:08:27

xjf_hz 发表于 2014-5-5 00:52
其实做累加更好,把id和一定空间的flash内数据取累加和存到特定空间,开机自己校验 ...

这样子的话每次程序升级的时候岂不是都要进行累加计算?而且有时候升级是机器已经在现场了!

wangpengcheng 发表于 2014-5-5 09:09:58

yangyi 发表于 2014-5-5 06:32
首先运行的是厂商的boot程序,不是用户的boot程序,容易被劫胡

飞思卡尔貌似没有厂商的Boot,ARM的话做Boot也不是难,只是做应用的时候需要把Boot的空间让出来而已!

Yang_Alex 发表于 2014-5-5 10:06:19

如果仅仅是根据ID是否对错来决定跳转地址,这种方法太简单,很容易被破解--读出代码,直接修改跳转到正确地址,不去判断ID是否对。

wangpengcheng 发表于 2014-5-5 12:06:11

Yang_Alex 发表于 2014-5-5 10:06
如果仅仅是根据ID是否对错来决定跳转地址,这种方法太简单,很容易被破解--读出代码,直接修改跳转到正确 ...

所以才想需要加密,用Boot进行加密与解密!

xiaomu 发表于 2014-5-5 12:22:13

高级的方法, 利用加壳程序

写一段加解密的程序, 用一个密钥加密

然后拷贝这段程序到ram中运行,

然后解壳,利用密钥解密, 然后读取唯一ID,

这部分程序在明文里面没有 读取 ID 的命令,

只有解密之后才有读取ID的命令

可以迷惑一部分靠反汇编分析读取ID命令来解密的人

这部分什么时候验证, 可以灵活掌握,

xiaomu 发表于 2014-5-5 12:22:34

高级的方法, 利用加壳程序

写一段加解密的程序, 用一个密钥加密

然后拷贝这段程序到ram中运行,

然后解壳,利用密钥解密, 然后读取唯一ID,

这部分程序在明文里面没有 读取 ID 的命令,

只有解密之后才有读取ID的命令

可以迷惑一部分靠反汇编分析读取ID命令来解密的人

这部分什么时候验证, 可以灵活掌握,{:lol:}

lileistone 发表于 2014-5-5 13:23:57

xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序

写一段加解密的程序, 用一个密钥加密


别忘了用完之后把RAM清空或者写成乱数,要不全留在那儿了……
另外这段加壳程序的加密和密钥如何保存、如何保密,也是个问题

lileistone 发表于 2014-5-5 13:25:25

wangpengcheng 发表于 2014-5-4 16:22
你这样的做法,一旦BIN被读了出来了,很容易就能找得到你存的地址,加密是必须得有的,呵呵,加完密后是 ...

大部分二进制指令都是一样的,把ID加密了之后,读两份binary一对比,还是很容易暴露ID存在哪里了,因为就那一小段儿不一样……

wangpengcheng 发表于 2014-5-5 13:48:36

xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序

写一段加解密的程序, 用一个密钥加密


好办法,最好将这段程序分段存储,如果在一个数组中,依然很容易被反汇编出来

Yang_Alex 发表于 2014-5-5 13:49:58

wangpengcheng 发表于 2014-5-5 12:06
所以才想需要加密,用Boot进行加密与解密!

你只是加解密ID而已,然后跳正常地址。破解直接跳过你的ID加解密不分,后面就正常了。

我自己觉得应该ID不做加密,但是多次在正常程序不同位置中验证不同加密方法加密ID后的结果,然后正常运行一段时间转不同情况(千万不要死机,死机就被发现不正常了)。

wangpengcheng 发表于 2014-5-5 13:51:38

lileistone 发表于 2014-5-5 13:25
大部分二进制指令都是一样的,把ID加密了之后,读两份binary一对比,还是很容易暴露ID存在哪里了,因为就 ...

说的也是,除非将所有程序都放在RAM中运行,然后如前面那位所说的,加个壳,这样的话BIN就完全不一样了,只有壳体部分相同,但目前我们用的M0+与M4根本就没有那么大的内存!

wangpengcheng 发表于 2014-5-5 13:54:29

Yang_Alex 发表于 2014-5-5 13:49
你只是加解密ID而已,然后跳正常地址。破解直接跳过你的ID加解密不分,后面就正常了。

我自己觉得应该 ...

用系统单建一个专门读ID的线程,然后OK就发信号量给正常进程,不OK就不发,让正常线程偶然出错,哈哈,这样行不?

yangyi 发表于 2014-5-5 19:35:32

飞思卡尔有些有BOOT,有些没有。

source.ant 发表于 2014-5-5 20:19:42

myxiaonia 发表于 2014-5-4 12:45
应该说前面都好,但是不用擦除flash,下暗桩才是最好的办法,要迷惑破解者以为破解成功了 ...

对,有道理。让他先迷迷糊糊的着,偶尔给乱搞。这样就算破解也要难些

wangpengcheng 发表于 2014-5-5 20:55:53

yangyi 发表于 2014-5-5 19:35
飞思卡尔有些有BOOT,有些没有。

我对Kinetis比较熟悉,好像没有看到Kinetis系列的有Boot,不知道飞思卡尔其它的哪些系列有?

wangpengcheng 发表于 2014-5-5 20:57:40

source.ant 发表于 2014-5-5 20:19
对,有道理。让他先迷迷糊糊的着,偶尔给乱搞。这样就算破解也要难些

是啊,虽然我们做的软件技术含量上不高,但也不能让某些人利用啊{:lol:}

gongxd 发表于 2014-5-5 22:15:40

xiaomu 发表于 2014-5-5 12:22
高级的方法, 利用加壳程序

写一段加解密的程序, 用一个密钥加密

加壳不错
还可以做个小型软件虚拟CPU,关键位置用自己指令执行,到这一步估计破解的要死了

Yang_Alex 发表于 2014-5-6 08:58:55

gongxd 发表于 2014-5-5 22:15
加壳不错
还可以做个小型软件虚拟CPU,关键位置用自己指令执行,到这一步估计破解的要死了 ...

我估计没有几个网友的程序需要保密到这个程度。{:titter:} 而且太浪费程序空间。

hejiang177 发表于 2014-5-6 09:07:01

你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了

Etual 发表于 2014-5-6 10:25:24

提高破解成本就行了。

wangpengcheng 发表于 2014-5-6 10:34:30

hejiang177 发表于 2014-5-6 09:07
你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了 ...

呵呵,您考虑的太多了,我相信坛子里的朋友都是有职业道德的!

skylinyk 发表于 2014-5-6 12:12:21

围观,来听听大神的见解

yangyi 发表于 2014-5-6 19:41:36

hejiang177 发表于 2014-5-6 09:07
你们在这儿讨论这么清楚,搞破解的看到了就不用破解了,就知道你们怎么加密的了 ...

道理是这样明白,但具体应用各有不同。

霸气侧漏 发表于 2014-5-6 20:46:26

myxiaonia 发表于 2014-5-4 13:00
就是让破解者以为破解成功了,实际上你可以随机的或者某个时长后来点错误嘛。。。工业上用的东西可不是自 ...

说的好 以后就这么干

wangpengcheng 发表于 2014-5-7 09:04:17

霸气侧漏 发表于 2014-5-6 20:46
说的好 以后就这么干

让程序随机出问题的事情也不容易干的,呵呵,一般只要是做出来的,基本都是有规律的!

Appcat 发表于 2014-5-7 09:33:18

wangpengcheng 发表于 2014-5-7 09:04
让程序随机出问题的事情也不容易干的,呵呵,一般只要是做出来的,基本都是有规律的! ...

在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个月,设备该进现场进现场了,该验收已经验收了,然后找个悬空的AD引脚做个电压采集,
确定为当天的心情指数,如果心情不错呢,就好好干活,如果心情不太好呢,就根据具体指数在用户数据的不同位置给它修改一个字节,当然协议啊校验啊之类的还是要遵守的。
当然刚开始不要太频繁,十天半个月来一下,不是还有累加器吗?随着累加的日子增加,爷的心情越来越糟糕......

wangpengcheng 发表于 2014-5-7 10:48:53

Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...

牛B人,哈哈!不知道这样子会不会让抄板的人疯掉!

霸气侧漏 发表于 2014-5-7 11:51:35

Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...

真是厉害吊炸天

gtnr 发表于 2014-5-7 12:06:58

wangpengcheng 发表于 2014-5-7 10:48
牛B人,哈哈!不知道这样子会不会让抄板的人疯掉!

隔一段时间要重装程序.{:biggrin:}

wangpengcheng 发表于 2014-5-7 12:10:53

gtnr 发表于 2014-5-7 12:06
隔一段时间要重装程序.

然后像小米手机那样,隔一段时间我就要重新刷一下机,不然问题频出,我都快疯了!

stm32f103f4 发表于 2014-5-7 12:46:22

不是绝对安全的

wangpengcheng 发表于 2014-5-7 13:15:16

stm32f103f4 发表于 2014-5-7 12:46
不是绝对安全的

你有绝对安全的方案没有?

一品电子 发表于 2014-5-7 13:25:49

appcat 做程序也可以这么有情趣。牛

chunyu 发表于 2014-5-7 13:41:06

有没有这方面的书,分享一下,谢谢

wangpengcheng 发表于 2014-5-7 14:47:59

chunyu 发表于 2014-5-7 13:41
有没有这方面的书,分享一下,谢谢

没注意过是否有这么一本书,但是我想程序加密历来就有,可以借鉴一下电脑上程序加密的书籍去看一下!

gtnr 发表于 2014-5-8 07:40:18

wangpengcheng 发表于 2014-5-7 12:10
然后像小米手机那样,隔一段时间我就要重新刷一下机,不然问题频出,我都快疯了! ...

那你是不是用的是山寨的小米啊?

wangpengcheng 发表于 2014-5-8 08:38:27

gtnr 发表于 2014-5-8 07:40
那你是不是用的是山寨的小米啊?

有可能吧,雷布斯可能发了个山寨货给我!

yangyi 发表于 2014-5-8 09:30:06

Appcat 发表于 2014-5-7 09:33
在程序发现自身是非法副本后,仅仅开启一个累加(减)器,每次上电累加(减),然后正常运行。估算着几个 ...

太容易破解了。如果被发现,这个AD引脚固定上啦或下拉,心情就被固定了。还是藏起来,用软件搞些事会比较好。

Appcat 发表于 2014-5-8 09:40:42

yangyi 发表于 2014-5-8 09:30
太容易破解了。如果被发现,这个AD引脚固定上啦或下拉,心情就被固定了。还是藏起来,用软件搞些事会比较 ...

你也说了,如果被发现......
一颗MCU可以AD的引脚很多,你要一个一个或者都组合实验吗?你是在抄板,在破解啊,如果你花的时间和成本让你或者你的客户无法接受,那我加密的目的就达到了。

况且这只是给楼主的一个思路,一个MCU里边可以随机的因素可以很多,偏偏不是软件自身能做到的,所以就事论事没有任何意义。加解密永远是无止境的一场战争,看谁想的巧妙,
看谁更能琢磨对手的心理,这不是一个纯技术层面的话题。

飞鱼爱上鸟 发表于 2014-5-13 14:21:17

mark一下

jiang887786 发表于 2014-9-4 11:18:33

关注的人好多啊,再看看回复。

wangpengcheng 发表于 2014-9-4 11:26:19

jiang887786 发表于 2014-9-4 11:18
关注的人好多啊,再看看回复。

一般讨论的东西里面都有一些自己没见过的,呵呵!

JESTER9 发表于 2014-9-4 12:02:28

同问,看看有什么解决办法

rockyyangyang 发表于 2014-9-4 13:32:31

下暗桩是什么东西?后门?
页: [1]
查看完整版本: 讨论:如何用片内唯一ID加进行程序加密!(已解决)