搜索
bottom↓
回复: 99

stm8 唯一ID号加密方法.思路

  [复制链接]

出0入0汤圆

发表于 2013-7-2 13:15:15 | 显示全部楼层 |阅读模式
1.读出ID号
#if defined(STM8S103)
    #define     ID_BaseAddress         (0x4865)
#else//  defined(STM8S105)
    #define     ID_BaseAddress         (0x48CD)
#endif

void GetUniqueID(unsigned char *p)
{
    unsigned char i;
    unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);   
    for(i=0;i!=12;i++){*p++=*pIDStart++;}
}

2.把读出的ID号生成其他数据。不一定就是12字节的!并保存在内部EEPROM。在这个模块准备2个函数.一个用于加密.一个用于解密
void StmWriteUniqueID(unsigned char Addr)
{
    unsigned char i;
    FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
    while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
    unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);
    unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);

    for(i=0;i!=6;i++)//由12字节生成12*N个字节
    {
        *pEE++=第1种算法,商业原因.我的算法就不公开了.大家可以准备一个数组查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
        *pEE++=第2种算法,商业原因.我的算法就不公开了。大家可以准备一个数组查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
        。。。。
        第N种算法
    }              
}


//解密函数
unsigned char StmCheckUniqueID(unsigned char Addr)


3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪
    while(1)
    {
        其他任务...............
        /////////////////////////////////////////////////////////////////////////
         if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
        {
            Flag&=~FLAG_CHECK_ID;
            if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入
            else{IsIDCorrect=0x00;}//错误写入      
        }        
        /////////////////////////////////////////////////////////////////////////
              其他任务...............
    }



        /////////////////////////////////////////////////////////////////////////
总结:
这样做还是能被破解的。但对方已经很难跟踪了.
如果破解者对芯片熟悉.他会根据ID号的地址!----毕竟芯片ID号的地址是固定的.找到对应的调用程序.加密时用到芯片ID号的地址。解密时也有用到芯片ID号的地址
所以只有对方熟.是能很快跟踪到加密/解密程序.而在解密程序入口就return出去!


这种方法已经很实用了.毕竟不是太专业的很难破.

希望对大家有用.我现在的产品就是用这种方法.之前还在这论坛发过自己AVR产品被破解的牢骚帖.


阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-7-2 13:44:07 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2013-7-2 13:56:53 | 显示全部楼层
记号 学习下

出20入22汤圆

发表于 2013-7-2 14:08:58 | 显示全部楼层
好资料,顶一个

出0入0汤圆

发表于 2013-7-2 14:14:57 | 显示全部楼层
STM8在烧写程序时,用那种方法把KEY写到EEPROM比较好

出0入0汤圆

发表于 2013-7-2 14:25:52 | 显示全部楼层
标记一个,研究

出0入0汤圆

发表于 2013-7-2 14:51:10 | 显示全部楼层
lee345 发表于 2013-7-2 14:14
STM8在烧写程序时,用那种方法把KEY写到EEPROM比较好

是否可以准备两个程序

一个用于生成加密后的数据并保存
另一个时包含解密函数的应用程序

这样第一个程序烧完后,等0.5s再烧主程序即可

(貌似以前还听说用串口之类的来完成类似操作)

出0入0汤圆

发表于 2013-7-2 15:06:18 | 显示全部楼层
我的STM8系列中用到了自毁方式,不用两个程序就行,程序写入后调用该函数,前面部分是加密算法,执行后得到加密数据,后面是自毁代码,将加密部分改和本身写为NOP,最后是解密部分,就是除了第一次以外调用这个函数都是执行的解密部分,加密部分首次上电后n毫秒就不见了

出0入0汤圆

发表于 2013-7-2 15:16:26 | 显示全部楼层
楼上的方法也不错

出0入0汤圆

发表于 2013-7-2 15:24:58 | 显示全部楼层
基本没用!
听说人家有种烧录器,你想要什么ID都可以做成一样.
所以,只要把你的代码和ID号读出来,他们照考进去就行了.

出110入0汤圆

发表于 2013-7-2 16:10:54 | 显示全部楼层
zgxcom123 发表于 2013-7-2 14:51
是否可以准备两个程序

一个用于生成加密后的数据并保存

现在在测试的一个表,先下载程序1做自动测试加上校准,老化之后再写出厂程序2

出0入0汤圆

发表于 2013-7-2 16:13:14 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2013-7-2 17:22:42 | 显示全部楼层
学习了

出0入213汤圆

发表于 2013-7-2 17:58:28 | 显示全部楼层
马克一下。以备后用。

出0入0汤圆

发表于 2013-7-2 19:42:33 | 显示全部楼层
学习了~~

出0入0汤圆

发表于 2013-7-2 19:44:35 | 显示全部楼层
mark!                                                                 

出0入0汤圆

发表于 2013-7-2 19:47:14 来自手机 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2013-7-2 20:00:33 | 显示全部楼层



      

出0入0汤圆

发表于 2013-7-2 20:10:16 | 显示全部楼层
mark 好思路

出0入0汤圆

发表于 2013-7-2 20:21:18 | 显示全部楼层
不错学习一下

出0入0汤圆

发表于 2013-7-2 20:47:22 | 显示全部楼层
wangqing_gxu 发表于 2013-7-2 15:24
基本没用!
听说人家有种烧录器,你想要什么ID都可以做成一样.
所以,只要把你的代码和ID号读出来,他们照考进 ...

这个是真的吗?
如果真是这样的话,唯一ID就成摆设了。

出0入0汤圆

发表于 2013-7-2 20:49:26 | 显示全部楼层
wangqing_gxu 发表于 2013-7-2 15:24
基本没用!
听说人家有种烧录器,你想要什么ID都可以做成一样.
所以,只要把你的代码和ID号读出来,他们照考进 ...

UID 加密非常有用,目前STM8 不UID 加密,破解费用1.6W ,
如果有UID 加密,破解者需要反汇编,跟踪调试,工作量大大增加,解密费用5W 以上。
如果UID 埋雷,基本上很难解开。
所以各位使用STM8做产品 的同学,请一定要用UID 加密,目前多款烧录器支持UID加密、滚码加密。
可以选择这些烧录器,方便生产。

出0入0汤圆

发表于 2013-7-2 20:50:31 | 显示全部楼层
TANK99 发表于 2013-7-2 20:47
这个是真的吗?
如果真是这样的话,唯一ID就成摆设了。

STM8 的UID 是真UID ,他说的那个是STM32 ,STM8 的UID 目前还不能更改。

出0入0汤圆

发表于 2013-7-2 22:01:04 | 显示全部楼层
这个问题我也考虑了很久,尝试过很多种方法,不过自认为不是很理想。

出0入0汤圆

发表于 2013-7-2 22:38:57 | 显示全部楼层
kation122 发表于 2013-7-2 20:50
STM8 的UID 是真UID ,他说的那个是STM32 ,STM8 的UID 目前还不能更改。

我也认为不能更改,看DATASHEET也是这么说,
不过我有同事,做游戏机的,他的产品刚红,大街小巷都买他的板,可不是他生产的!
上W块的广告费每月,好不容易唱红一个产品,可通街都是别人的盗版货.

当然,这个行业,钱来得快,产品也很快过时.同时亏本也很快.

出0入0汤圆

发表于 2013-7-2 22:47:33 | 显示全部楼层
学习了         

出0入0汤圆

发表于 2013-10-25 17:01:20 | 显示全部楼层
mark











!

出0入0汤圆

发表于 2014-1-7 19:21:37 | 显示全部楼层
mark。。。。。。。

出0入4汤圆

发表于 2014-1-7 21:30:03 | 显示全部楼层
这个要mark一下,有用的。

出0入14汤圆

发表于 2014-1-7 22:14:07 来自手机 | 显示全部楼层
没看懂,读出id号那些和产品的程序都是在一个程序里面?

出0入0汤圆

发表于 2014-1-10 23:08:44 | 显示全部楼层
好方法,学习了!

出0入0汤圆

发表于 2014-1-11 00:04:58 | 显示全部楼层
标记,学习了

出0入0汤圆

发表于 2014-2-21 17:26:36 | 显示全部楼层
感谢热情的坛友!

出0入0汤圆

发表于 2014-3-20 08:29:41 | 显示全部楼层
mark 好好研究

出0入0汤圆

发表于 2014-4-18 10:46:37 | 显示全部楼层
mark         

出0入0汤圆

发表于 2014-6-6 19:27:33 | 显示全部楼层
不错,学习了!

出0入0汤圆

发表于 2014-6-6 20:03:53 | 显示全部楼层
Mark一下

出0入0汤圆

发表于 2014-7-20 00:55:19 | 显示全部楼层
只要代码能读,
8位机反汇编其实没那么难。

出0入0汤圆

发表于 2014-10-15 15:26:30 | 显示全部楼层
mcu5i51 发表于 2013-7-2 15:06
我的STM8系列中用到了自毁方式,不用两个程序就行,程序写入后调用该函数,前面部分是加密算法,执行后得到加密 ...

你好,自毁部分是怎么实现的呢,谢谢

出0入0汤圆

发表于 2014-10-15 15:47:10 | 显示全部楼层
一个循环,慢慢的填充自身NOP,到最后会剩余部分返回判断的代码,没有办法全擦掉

出0入0汤圆

发表于 2014-10-15 17:41:37 | 显示全部楼层
MARK下,STM加密

出0入0汤圆

发表于 2014-10-15 20:58:23 | 显示全部楼层
加密,解密,新思路。学习。

出0入0汤圆

发表于 2014-10-15 22:34:23 | 显示全部楼层
很好,学习了                                   

出0入0汤圆

发表于 2014-10-15 23:01:28 | 显示全部楼层
mark 学习一下!

出0入95汤圆

发表于 2014-10-15 23:05:18 | 显示全部楼层
不错,学习了

出0入4汤圆

发表于 2014-11-22 14:05:32 | 显示全部楼层
学习了,谢谢!

出0入0汤圆

发表于 2014-11-22 23:04:09 | 显示全部楼层
没用的  华强北7000~10000可以解密STM8

出0入0汤圆

发表于 2014-11-22 23:04:31 | 显示全部楼层
软加密的一样可以破解的

出0入0汤圆

 楼主| 发表于 2014-11-23 11:09:44 | 显示全部楼层
beijisnow 发表于 2014-11-22 23:04
没用的  华强北7000~10000可以解密STM8

这个价格只是把HEX读出来而已
这个HEX可以写到新的芯片上.但是.新芯片的ID号根本和解密数据不配对!所以只有用跟踪方式.找到解密程序
但是跟踪!1W能搞得定???
我要在程序设了3个解密点.每个都有半个钟怎么解?
你那个价格只是读出HEX罢了.唯一ID的作用还请细心理解

出0入0汤圆

发表于 2014-11-23 14:14:59 | 显示全部楼层
很好的地址码

出0入0汤圆

发表于 2014-11-23 18:04:18 | 显示全部楼层
好资料,学习了!

出0入0汤圆

发表于 2014-11-24 08:42:35 | 显示全部楼层
很好的方法,值得借鉴

出0入0汤圆

发表于 2014-11-24 09:55:11 | 显示全部楼层
好方法,储存备用了

出0入0汤圆

发表于 2014-11-24 11:24:25 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2014-11-24 16:19:37 | 显示全部楼层
lazyboyp 发表于 2014-10-15 15:26
你好,自毁部分是怎么实现的呢,谢谢

就是使能读保护,当有人试图去读取你的FALHS时,芯片会恢复成出厂前的状态,擦拭掉所有信息

出0入0汤圆

发表于 2014-11-25 10:31:05 | 显示全部楼层
谢谢,正在研究

出0入0汤圆

发表于 2014-12-17 17:38:31 | 显示全部楼层
楼主知道  STM8S003F3的ID的地址是多少吗,跟STM8S103的一样是0x4865吗,哪里可以查得到啊

出0入0汤圆

发表于 2014-12-17 18:03:14 | 显示全部楼层
MARK,也经常遇到加密的问题,实验一下

出0入0汤圆

发表于 2014-12-17 19:34:09 | 显示全部楼层
加密问题真是搞到头都大了,搞得太复杂容易隐藏BUG,简单了又怕别人破解,MARK

出0入0汤圆

发表于 2014-12-17 20:04:37 | 显示全部楼层
总结一下,首次上电读取UID,加密函数用UID生成加密数据,保存加密数据后程序擦除加密函数,主程序里定时(时间比较长)校验加密数据,数据与定义的加密规则不相符则执行随机的擦除FLASH程序区操作,使盗版程序发生无规律的故障。

出0入0汤圆

发表于 2014-12-20 12:15:39 | 显示全部楼层
MARK! 学习了

出0入0汤圆

发表于 2014-12-20 16:50:10 | 显示全部楼层
Mark,学习了

出0入0汤圆

发表于 2014-12-21 10:56:29 | 显示全部楼层
国人太聪明了,反向工程很NB,老美都怕。我等的产品就不要指望破解不了了。时间长短而已。

出0入0汤圆

发表于 2015-1-18 00:16:16 | 显示全部楼层

不错,学习了!

出0入0汤圆

发表于 2015-1-18 15:29:16 | 显示全部楼层
记号。以后研究。

出0入0汤圆

发表于 2015-1-18 16:45:59 | 显示全部楼层
无衣师伊 发表于 2014-11-23 11:09
这个价格只是把HEX读出来而已
这个HEX可以写到新的芯片上.但是.新芯片的ID号根本和解密数据不配对!所以 ...

程序反汇编出来,听说还有静态分析,所有即使加密也得做得隐蔽一点

出0入0汤圆

发表于 2015-1-18 16:56:27 | 显示全部楼层
再也不用担心程序被别人偷窥了,学习下

出0入0汤圆

发表于 2015-1-18 19:19:03 | 显示全部楼层
UID如何被修改,这才是关键的问题

出0入0汤圆

发表于 2015-1-19 16:33:34 | 显示全部楼层
好东西,学习了。现在做产品多用STM8,刚好用上

出0入0汤圆

发表于 2015-1-19 16:42:03 | 显示全部楼层
挺好的,后续也试一试

出0入0汤圆

发表于 2015-1-19 16:58:48 | 显示全部楼层
学习了,很有用

出0入0汤圆

发表于 2015-1-19 17:08:11 | 显示全部楼层
鼓励一下,版主很热心啊

出0入0汤圆

发表于 2015-1-19 18:27:10 | 显示全部楼层
知道现在单机版游戏很少,网游多了,增加网络模块,联网认证。

出0入0汤圆

发表于 2015-1-19 18:31:32 | 显示全部楼层
不错的东西

出0入0汤圆

发表于 2015-1-19 18:42:09 | 显示全部楼层
zgxcom123 发表于 2013-7-2 14:51
是否可以准备两个程序

一个用于生成加密后的数据并保存

我stm32 做了个简单的加密

用的就是 串口发一个授权指令来写入EEPROM 加密信息。

出0入0汤圆

发表于 2015-3-26 21:18:21 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2015-3-26 22:25:14 | 显示全部楼层
算了,我的小产品根本不加密,爱抄抄去吧

出0入0汤圆

发表于 2015-3-31 11:23:02 | 显示全部楼层
不明觉厉啊

出0入0汤圆

发表于 2015-3-31 11:30:40 | 显示全部楼层
是个好方法,学习中

出0入0汤圆

发表于 2015-3-31 11:46:10 | 显示全部楼层
,这要消耗不少空间吧,而且也扛不住反编译了做静态分析

出0入0汤圆

发表于 2015-3-31 11:46:38 | 显示全部楼层
mark stm8 唯一ID号加密方法.思路

出0入0汤圆

发表于 2015-6-12 17:14:23 | 显示全部楼层
skyxjh 发表于 2014-12-17 20:04
总结一下,首次上电读取UID,加密函数用UID生成加密数据,保存加密数据后程序擦除加密函数,主程序里定时( ...

请问程序擦除加密程序是怎么实现的?

出0入0汤圆

发表于 2015-6-14 12:54:19 | 显示全部楼层
在系统编程,查看芯片编程手册

出0入0汤圆

发表于 2015-9-15 09:39:25 | 显示全部楼层
学习了

出0入0汤圆

发表于 2015-9-17 09:36:51 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2016-5-8 21:16:49 | 显示全部楼层
学习下,看看效果如何

出0入0汤圆

发表于 2016-5-8 21:50:34 | 显示全部楼层
唉, 做技术的就不能把语文学好点吗?

内容不错,但是看起来怎么就那么费劲呢!

出0入0汤圆

发表于 2016-5-9 17:22:10 | 显示全部楼层
烦这事,看看

出0入0汤圆

发表于 2016-5-26 16:21:53 | 显示全部楼层
我的做法是将UID进行加密之后放于FLASH中而非EEPROM的多处地方,程序中多处放置陷阱使得程序不完全失效,而是部分出现Bug
或自毁部分程序

出0入0汤圆

发表于 2016-5-26 17:23:49 | 显示全部楼层
马克,感谢分享

出0入0汤圆

发表于 2016-5-27 23:51:03 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2016-5-28 14:02:43 | 显示全部楼层
没有加过密....毕竟技术不到家

出0入0汤圆

发表于 2016-7-20 16:46:45 | 显示全部楼层
学习了,平时都没有注意这一块,我们做工控装置的

出0入0汤圆

发表于 2016-7-22 08:30:32 来自手机 | 显示全部楼层
Mark!!

出0入0汤圆

发表于 2016-7-22 08:48:40 | 显示全部楼层
嗯。不错,谢谢分享

出0入0汤圆

发表于 2016-7-22 13:21:54 | 显示全部楼层
学习学习学习

出0入0汤圆

发表于 2018-4-28 17:39:59 | 显示全部楼层
我们也是的 使用des加密的  没有密匙根本不想想

出0入0汤圆

发表于 2018-5-3 16:27:46 | 显示全部楼层
有很多种算法的,有很多下载器也提供算法的

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-27 06:58

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

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