搜索
bottom↓
12
返回列表 发新帖
楼主: 无衣师伊

唯一ID号原来这样破解!啊哈哈哈哈

  [复制链接]

出0入8汤圆

发表于 2016-7-8 20:21:31 来自手机 | 显示全部楼层
可以结合一些按键或者拨码在出厂前按一定顺序按后才激活,然后激活之后产生自己的唯一ID和随机数分多个地址加密保存,然后

出0入0汤圆

发表于 2016-7-8 20:27:42 | 显示全部楼层
gzhuli 发表于 2016-5-8 20:21
没用的,LZ难道不知道有内存读写断点这个功能?无论你怎么绕都能抓到你读0x004865那条指令。 ...

可以判断出是否正在仿真, 然后跳过读取UID.

SWIM复位是有复位标志的, 软件仿真的话可以判断一些特殊寄存器的初值来判断

出0入0汤圆

发表于 2016-7-8 20:32:39 | 显示全部楼层
恭喜楼主。领教了

出0入0汤圆

发表于 2016-7-8 20:38:43 | 显示全部楼层
onepower 发表于 2016-5-9 10:37
楼主做法是对的, 隐藏 唯一ID的明文;
接着 把生成ID地址的函数 和 读ID的函数写成 强制inline, 再在多个地 ...

不是很懂,好好想想

出0入0汤圆

发表于 2016-7-8 21:06:51 | 显示全部楼层
还没有接触过单片机的破解方面的东西,不明觉厉

出0入0汤圆

发表于 2016-7-8 21:23:58 | 显示全部楼层
楼主 做的什么高端产品

出0入17汤圆

发表于 2016-7-8 21:34:09 来自手机 | 显示全部楼层
学习了               

出0入0汤圆

发表于 2016-7-8 21:53:34 | 显示全部楼层
思路不错~我的想法是把程序入口地址加密了~每一个片子程序的入口地址都不同~

出0入0汤圆

发表于 2016-7-9 00:17:41 | 显示全部楼层
写个模拟器只要有HEX就容易破解。

出0入0汤圆

发表于 2016-7-9 10:06:30 | 显示全部楼层
楼主NB阿

出0入0汤圆

发表于 2016-7-9 17:47:18 | 显示全部楼层
snoopyzz 发表于 2016-7-8 20:27
可以判断出是否正在仿真, 然后跳过读取UID.

SWIM复位是有复位标志的, 软件仿真的话可以判断一些特殊寄存 ...

我也有这个想法但没有成功,能否指点一下通过那个寄存器能判断运行在调试模式??

出0入0汤圆

发表于 2016-7-10 19:07:31 | 显示全部楼层
配合MD5安全性会好些吧

出0入0汤圆

发表于 2016-7-10 20:49:07 来自手机 | 显示全部楼层
不觉明厉!

出0入0汤圆

发表于 2016-7-10 21:38:10 | 显示全部楼层
牛人,佩服

出0入0汤圆

发表于 2016-7-11 11:27:55 | 显示全部楼层
进来学习一下

出0入0汤圆

发表于 2016-7-11 22:55:19 | 显示全部楼层
gzhuli 发表于 2016-5-8 20:21
没用的,LZ难道不知道有内存读写断点这个功能?无论你怎么绕都能抓到你读0x004865那条指令。 ...

我在想即便能抓到读4865那条指令.破解者能很简单的改HEX,让读4865变成读其他地址么?请教

出0入0汤圆

发表于 2016-7-11 23:17:12 | 显示全部楼层
长知识了!

出0入0汤圆

发表于 2016-7-16 16:59:20 | 显示全部楼层

头像是猎虎?

出0入0汤圆

发表于 2016-7-16 17:05:01 | 显示全部楼层
不明觉厉!

出0入0汤圆

发表于 2016-7-18 00:02:23 | 显示全部楼层
厉害,厉害!
目前的开发过的ST还没ID加密过,因为我觉得他们没有破解价值

出0入0汤圆

发表于 2016-7-18 00:08:54 | 显示全部楼层
对于侦测ID地址问题,我觉得可以分12次读ID,每次读一个字节,把这函数插入到不同的地方,最后吧ID组合起来

出0入0汤圆

发表于 2016-7-18 01:36:40 | 显示全部楼层
我觉得软件运行一定时间后再校验,这样仿真破解难度增加了。

出0入0汤圆

发表于 2016-7-18 02:07:25 | 显示全部楼层
认真学习,认真学习

出0入0汤圆

发表于 2016-7-18 11:53:32 | 显示全部楼层
不看不知道,一看吓一跳啊
“费用。 3300 含ID加密的”
刚从网上问到的

出0入0汤圆

发表于 2016-7-18 11:54:02 | 显示全部楼层
看看来要在加密上下点功夫了

出0入0汤圆

发表于 2016-7-18 21:16:51 | 显示全部楼层

yes,当年的最爱!

出0入0汤圆

发表于 2016-7-18 21:28:23 | 显示全部楼层
还没搞过加密解密,mark

出0入0汤圆

发表于 2016-7-20 00:22:00 | 显示全部楼层
kinsno 发表于 2016-5-8 19:35
我管你三七二十一,我也不管你明文不明文,上来就读这个ID,因为大家都知道这个ID地址是固定的,我不管你出现 ...

可以没法让你跟踪,用一点方法,吧这段加密的算法放到一个内存段上,加密完后,删除就ok了,你没得追....我已经有产品这样了...呵呵..

出0入0汤圆

发表于 2016-7-20 00:35:55 | 显示全部楼层
Jason022 发表于 2016-5-11 08:12
我原来也这么搞过,开始使用不出问题,累计使用200小时或者开关机200次才检测id,如果是盗版再采取措施, ...

这个思路可以嗳~只要能判断出程序被人改过,暂时先不管,等到了正式量产交货后再出问题,可他妈坑死山寨的了。。。

出0入0汤圆

发表于 2016-7-20 06:36:28 来自手机 | 显示全部楼层
如果加片atsha204a呢,也没多少钱,有人破解过么

出0入36汤圆

发表于 2016-7-20 10:47:25 | 显示全部楼层
其实这个问题很好解决 真心这么关注不被破解的问题么 加个加密芯片全部解决 要是本来产品就属于低端拼量拼价格的 还是想想如何降低成本以价格优势来遏制对手吧 靠搞这些不靠谱

出0入0汤圆

发表于 2016-7-20 11:39:04 | 显示全部楼层
干嘛非得要读单片机唯一ID呢?换个思路吧!不如使用串口、USB或者其他方式,对产品授权。

出0入0汤圆

发表于 2016-7-20 14:39:22 | 显示全部楼层
还没编写过加密的程序

出0入10汤圆

发表于 2016-7-20 15:44:38 | 显示全部楼层
无衣师伊 发表于 2016-5-8 18:20
1.
8K  FLASH不可能全部用完吧?总会有些空间剩的.好吧。只要有12字节就够了.这12字节就保存母片的ID
2.读唯 ...

看了半个小时,好像解决方法是这样。

母片的芯片ID和你的HEX,对于客户来说是知道的。
如果需要复制,那么会将母片的ID写到新的芯片的一个FLASH空处,并将HEX中指向母片ID的指针都指向这个新的地址。

对策是:
函数分成3部分。

写入根据芯片ID计算出KEY并保存,因为地址为明文,因此这个函数中的地址可以在HEX中修改。
StmWriteUniqueID()
我猜测在实际运行中这个函数执行不到,只有你在激活的时候才执行这个函数。
如果真的是我猜的的这样,不如程序中指定该函数在FLASH中的存储位置,当成功激活后,程序自己将这个函数所在的区域擦除掉。

检查芯片ID与KEY是否对应
StmCheckUniqueID()
该函数调用新增加的函数GetIdBaseAddress,以保证本函数中不出现0x4865,因此难以找到修改的位置。

新增加的函数,之前不存在这个函数,该函数目的用于隐藏地址0x4865,计算结果是0x4865
GetIdBaseAddress()

也就是说,在客户修改HEX文件后。
StmWriteUniqueID() 函数无法读取真实ID地址,是客户修改后的FLASH的地址
StmCheckUniqueID()函数取得是真实的ID地址

所以StmCheckUniqueID返回为假。


是这个意思么?



出0入0汤圆

发表于 2016-7-20 20:16:34 | 显示全部楼层
mcuyongchao 发表于 2016-7-20 00:22
可以没法让你跟踪,用一点方法,吧这段加密的算法放到一个内存段上,加密完后,删除就ok了,你没得追....我已 ...

不是。
我是说,每个STM32的读ID不是固定的吗?那个ID地址是固定的啊,你变不变我才不管呢,反正我就是要读那个地址。。。

出0入0汤圆

发表于 2016-7-20 20:21:32 来自手机 | 显示全部楼层
默默关注

出0入0汤圆

发表于 2016-7-20 21:43:17 | 显示全部楼层
本帖最后由 mcuyongchao 于 2016-7-20 21:44 编辑
kinsno 发表于 2016-7-20 20:16
不是。
我是说,每个STM32的读ID不是固定的吗?那个ID地址是固定的啊,你变不变我才不管呢,反正我就是要 ...


我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,然后删除这段加密和读取ID程序(这段内存全部变成FF),下次启动根本没这段程序, 这段加密代码在第一次启动都刷没了,你到哪里去追踪?,不过唯一的缺点就是,第一次上电一定要可靠,让程序读出来ID,加密,放在某个或几个地址,然后删除,与下次上电或以后启动做必要的准备,如果在中间断了电.......你懂的,呵呵,我就被自己挖的坑整过.不过毕竟这少之又少,一般会特别注意第一次启动的...

出0入0汤圆

发表于 2016-7-21 10:18:53 | 显示全部楼层
mcuyongchao 发表于 2016-7-20 21:43
我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,然后删除这段加密和读取ID ...

我能不能这要理解:
1. 你是利用原有的ID,产生了一个新ID,并存在一个你自己任意定义的地址;   这样的话,地址变了,不再是STM32官方规定的那个读ID的那个地址了;
2. 你的程序需要刷2遍;

出0入0汤圆

发表于 2016-7-21 15:59:41 | 显示全部楼层
kinsno 发表于 2016-7-21 10:18
我能不能这要理解:
1. 你是利用原有的ID,产生了一个新ID,并存在一个你自己任意定义的地址;   这样的话,地 ...

不需要刷2遍

出0入0汤圆

发表于 2016-7-21 16:45:31 | 显示全部楼层
无衣师伊 发表于 2016-5-8 18:20
1.
8K  FLASH不可能全部用完吧?总会有些空间剩的.好吧。只要有12字节就够了.这12字节就保存母片的ID
2.读唯 ...

牛逼,直接替换假冒的了

出0入0汤圆

发表于 2016-7-21 20:23:32 | 显示全部楼层
mcuyongchao 发表于 2016-7-20 21:43
我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,然后删除这段加密和读取ID ...

那第二次上电不是还是要读ID,计算后跟第一次上电加密的值进行比较?这样才能验证是不是被盗版了吧

如果不进行验证,那直接全片读出来再烧写进新片,不就直接能跑了?

出0入0汤圆

发表于 2016-7-21 21:34:15 | 显示全部楼层
落叶随风 发表于 2016-7-21 20:23
那第二次上电不是还是要读ID,计算后跟第一次上电加密的值进行比较?这样才能验证是不是被盗版了吧

如果 ...

我搞错了,刚看了下程序,不是删除,是加密那段做crc,然后放到别的地方...

出0入0汤圆

发表于 2016-7-21 22:01:02 | 显示全部楼层
mcuyongchao 发表于 2016-7-21 21:34
我搞错了,刚看了下程序,不是删除,是加密那段做crc,然后放到别的地方...

我也在考虑把重要的代码做个CRC32或MD5之类的计算,如果有了修改就能发现了

出0入0汤圆

发表于 2016-7-21 22:12:06 | 显示全部楼层
有些愚钝,没有看懂

出0入17汤圆

发表于 2016-7-21 22:37:52 | 显示全部楼层
厉害,厉害!

出0入0汤圆

发表于 2016-7-25 13:40:54 | 显示全部楼层
无衣师伊 发表于 2016-5-8 18:20
1.
8K  FLASH不可能全部用完吧?总会有些空间剩的.好吧。只要有12字节就够了.这12字节就保存母片的ID
2.读唯 ...

是不是可以 4865的数据读出来,,  加密算法后存到 flash的某个地址, 之后看版权 就从这个flash里面读,  是不是可以这么做?

出0入0汤圆

发表于 2016-7-25 13:46:22 | 显示全部楼层
mcuyongchao 发表于 2016-7-20 21:43
我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,然后删除这段加密和读取ID ...

mark  有参考意义

出50入0汤圆

发表于 2016-7-25 16:44:42 来自手机 | 显示全部楼层
感谢分享,mark

出0入0汤圆

发表于 2016-7-26 09:24:30 | 显示全部楼层
加密 破解 再加密 再破解,碟中谍啊

出0入0汤圆

发表于 2016-8-1 13:56:26 | 显示全部楼层
传统的加密方法是没有用的

出0入0汤圆

发表于 2016-8-2 14:58:14 | 显示全部楼层
STM32F4,会有这样的问题吗?

出0入0汤圆

发表于 2016-8-3 08:09:29 来自手机 | 显示全部楼层
留名学习

出0入0汤圆

发表于 2016-8-3 08:58:11 | 显示全部楼层
有空要来试试,不过仍要谢谢楼主提供的方法了。

出0入0汤圆

发表于 2016-8-3 16:23:29 | 显示全部楼层
知道防不了,但也不能让破解的人太过于轻松

出0入0汤圆

发表于 2016-8-4 21:02:53 | 显示全部楼层
首先uid得是确定可靠的唯一的

出0入0汤圆

发表于 2016-8-16 22:25:11 | 显示全部楼层
多谢分享了

出0入0汤圆

发表于 2016-8-17 15:06:12 | 显示全部楼层
虽然不是太明白,但还是要点赞一下

出0入0汤圆

发表于 2016-8-17 15:09:48 | 显示全部楼层
日日♂夜夜 发表于 2016-5-9 09:10
如果用jlink调试可以有内存断点
可以设置当访问某一特定地址的时候停止。。
所以用内存断点可以直接get这个 ...

如果烧录完直接关掉JLINK调试功能呢?

出0入0汤圆

发表于 2016-8-18 10:14:27 | 显示全部楼层
不管如何加密,如果人家能读出你的hex出来。即芯片内部flash内容,跟复制进去的内容一致,就能正常工作。只不过多些字节而已。。。。。你所谓的加密统统都没得用。。外部eeprom一样。人家也可以拆下来读。。。。。。解密不解密还是在于芯片能不能被解密。

出0入0汤圆

发表于 2016-8-18 11:05:16 | 显示全部楼层
mcuyongchao 发表于 2016-7-21 21:34
我搞错了,刚看了下程序,不是删除,是加密那段做crc,然后放到别的地方...

客户多开几片获得hex,然后比较hex,嘿嘿

出0入0汤圆

发表于 2016-8-18 13:31:15 | 显示全部楼层
JoshuaAstray 发表于 2016-8-17 15:09
如果烧录完直接关掉JLINK调试功能呢?

这里的前提是读到了hex
读到了可以解析出汇编
汇编直接改掉就好了

好像还可以改启动方式 这个时候调试不关闭  然后再介入jlink手动跳转pc就好了

说以没有硬件保护都是纸老虎

出0入0汤圆

发表于 2016-9-20 14:18:33 | 显示全部楼层
wangpengcheng 发表于 2016-5-9 09:48
可以利用烧录器,在烧录的时候把代码跟唯一id一起生成一个校验码写到空白flash内,在程序中进行自校验!如 ...

这是确实可以

出0入0汤圆

发表于 2016-9-20 15:03:31 | 显示全部楼层
以前就听说STM32唯一ID被破解了,原来是这样破的。

出0入0汤圆

发表于 2016-9-21 18:58:37 | 显示全部楼层
程序里直接找ID肯定是暴露的啊。

出0入0汤圆

发表于 2016-9-21 19:04:12 | 显示全部楼层
相对变量动态寻找操作,要隐蔽的多

出0入0汤圆

发表于 2018-4-19 10:31:21 | 显示全部楼层
mcuyongchao 发表于 2016-7-20 21:43
我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,然后删除这段加密和读取ID ...

我在刷完程序后,第一次开机的时候把ID读出来,加密后放到内存某一个或几个地方,
存放的地址用两个样品bin文件对比一下就找到了。
另外,第一次可以这么做,之后的启动是不是就对比上次存放位置的ID号了?如果这样,直接复制不用修改bin就能用了,因为你只在第一次上电读取芯片唯一ID,之后做算法处理,放到其他几个位置,在次上电直接对比上次存放的位置,这很容被发现。

出0入0汤圆

发表于 2018-4-20 12:31:12 | 显示全部楼层
需要防止破解,说明功能很牛逼呀!应该没有啥不能破解的,都只是成本问题;

出0入0汤圆

发表于 2018-4-21 11:39:57 | 显示全部楼层
我做的产品,CPU的id只是个幌子,当然也是用了很多功夫的,真正的坑是nandflash的id,很多nandflash也有uid的……

出0入0汤圆

发表于 2018-4-21 18:04:10 来自手机 | 显示全部楼层
楼主做的产品很畅销。

出0入0汤圆

发表于 2018-4-21 18:49:36 | 显示全部楼层
现在搞这种破解ID加密的程序员发财了,灰色收入比咱们编程序的还高

出0入0汤圆

发表于 2018-4-22 09:48:13 | 显示全部楼层
有人想解密你的程序,说明你的产品畅销啊。

出10入95汤圆

发表于 2018-4-22 11:04:45 | 显示全部楼层
做产品前,要先想好尽量防止破解。
累啊

出10入95汤圆

发表于 2018-4-22 11:24:04 | 显示全部楼层
gzhuli 发表于 2016-5-9 00:47
稍微增加了一点破解难度,不过如果你的判断点还是一条比较指令加一条跳转指令的话,那其实帮助也不是特别 ...

多谢大师的思路!
还想请教大师,机器码如何做混淆呢?

出0入0汤圆

发表于 2018-4-22 12:42:29 | 显示全部楼层
防不胜防,所以我现在都懒得加密了。

出0入0汤圆

发表于 2018-4-22 16:07:13 | 显示全部楼层
一山更比一山高,同时使用多套加密方式,效果更好

出0入0汤圆

发表于 2018-4-22 18:33:59 | 显示全部楼层
首先是要能获取到hex文件。现在很多芯片有读取保护。jlink接上去识别不了芯片,需要先执行擦除操作才能连接上。

出0入0汤圆

发表于 2018-4-22 21:05:23 | 显示全部楼层
不明觉厉啊

出20入0汤圆

发表于 2018-4-22 23:21:25 | 显示全部楼层
与其费半天劲破解,不如下点工夫多研究一下把产品做好。个人愚见

出0入0汤圆

发表于 2018-4-22 23:49:05 | 显示全部楼层
可以HEX自校验.

出0入0汤圆

发表于 2018-4-27 18:05:51 | 显示全部楼层
不明觉厉

出0入0汤圆

发表于 2019-12-4 11:55:54 来自手机 | 显示全部楼层
这么绕 不小心就把自己坑了 成本不在乎直接用防破解芯片,为毛用通用料

出0入0汤圆

发表于 2019-12-4 13:18:10 | 显示全部楼层
无衣师伊 发表于 2016-5-8 18:20
1.
8K  FLASH不可能全部用完吧?总会有些空间剩的.好吧。只要有12字节就够了.这12字节就保存母片的ID
2.读唯 ...

找到道友一枚 哈哈

出0入0汤圆

发表于 2019-12-4 17:21:58 | 显示全部楼层
学习了,收藏慢慢看

出100入0汤圆

发表于 2019-12-4 18:50:14 | 显示全部楼层
加密算法,学习了

出0入0汤圆

发表于 2019-12-5 08:56:10 | 显示全部楼层
如果产品利润够高,直接用加密狗比较好吧

出0入0汤圆

发表于 2019-12-13 21:36:51 | 显示全部楼层
不错,学习了。问题如程序要验证这个ID,那如何办?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 11:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表