你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

你辛苦做出来的id软件加密就这么轻松被改了  

[复制链接]
meifan119 发布时间:2019-11-5 08:47
开发人员一般设计软件加密方法:读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法。由于读id时很多人直接用id起始地址,例如0x1FFFF7E8,破解的人只要把这个数据改成0x8000020,并且0x8000020程序区域填上母片的id,不管你的算法有多复杂,这时你的程序就被破解了,改这种软件加密一分钟就改好了。所以千万注意程序里面不要
出现id起始地址。
用以下方法相对比较难了
//STM32F10X软加密方法及实例代码

#define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x0800F000)
#define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x0800F004)
volatile uint32 gU32IdAdressVar;//这里一定要定义此变量,否则会被优化器优化掉
void Stm32F10xEncryptDemo(void)
{
        uint32 *u32IdAddress;
  uint32 u32EorRslt, u32AddRslt;
        #IF 0
        //如果直接赋值0X1FFFF7E8,则程序编译结果里会有0X1FFFF7E8,这样破解人员会很轻松
        //的找到这个内容,然后非常容易进行修改,去掉软加密
        u32IdAddress = (uint32*)0x1ffff7e8;
        #else
        //千万别显式的读取ID,即要把0X1FFFF7E8运算成隐式的,例如此例中0x1FFFF7E8 = (0x455873a * 4) + 0xEA9DB00;
        //这样,别人就算破解出了你的程序,也查找不到0X1FFFF7E8,这样就不能轻易的软解密,这样处理后如果要软解密,
        //一定要反汇编出来进行复杂逆向分析,难度极大,代价极高,很难搞定软加密了,达到保护产品的目的。
        gU32IdAdressVar = 0x455873a;
        gU32IdAdressVar <<= 2;//0x11561CE8
        u32IdAddress = (uint32*)(gU32IdAdressVar + 0xEA9DB00);//0x1ffff7e8
        #endif
        //读取单片机的ID,并进行运算,具体算法可以自己定,这里只用到简单的异或及和运算
        u32EorRslt = (*u32IdAddress) ^ (*(u32IdAddress + 1)) ^ (*(u32IdAddress + 2));
        u32AddRslt = (*u32IdAddress) + (*(u32IdAddress + 1)) + (*(u32IdAddress + 2));
        //进行对比,如果运算结果与FLASH保存的结果不一样,说明非法,运行错误代码
        if(u32EorRslt != *((uint32*)ID_ENCRYPT_EOR_RESULT_ADDRESS))
        {
                while(1);//异或算法结果不正确,进行错误分支
        }
        if(u32AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))
        {
                while(1);//和算法结果不正确,进行错误分支
        }
}
//QQ9272078

收藏 10 评论25 发布时间:2019-11-5 08:47

举报

25个回答
edmundlee 回答时间:2019-11-7 22:12:39
meifan119 发表于 2019-11-7 11:33
level2不能轻易用啊,自己想升级程序都不行了,软件加密本来就是加一点难度,如果直接出现id地址,1分钟 ...

Level2可以升级, 只不过要你自己做IAP而已, 两个月前我问过Level2解不了, 要解就要肢解芯片, 价格不菲, 不知道你从哪儿了解的, 我也想弄清楚是否已经破了
实话告诉你, 追踪ID不是你想像的方法, 不管你是常量加变量再加再减再异或都是一个结果, 都不会增加破解的难度及时间。

meifan119 回答时间:2019-11-7 11:33:59
edmundlee 发表于 2019-11-7 10:15
原理不能明说, 否则会有更多人轻易的偷取别人的成果, 这方法没用的,信不信随便。
现在最后一度防线是lev ...

level2不能轻易用啊,自己想升级程序都不行了,软件加密本来就是加一点难度,如果直接出现id地址,1分钟就被破解了。另外据我了解,level2也能解密
meifan119 回答时间:2019-11-8 14:21:19
edmundlee 发表于 2019-11-8 12:47
能, 只要地址线出现uid的地址他就能检测出来, 所以隐不隐藏不影响破解的时间, 时间都是浪费在等你的程 ...

你可以做到吗,不需要反汇编吗,怎么监测地址线,应该连机仿真吧,仿真需要反汇编的啊
李康1202 回答时间:2019-11-5 09:11:47
厉害
meifan119 回答时间:2019-11-5 10:10:49
还以为自己算法多牛,实际这么破解太容易了,1分钟就被人家改了
MrJiu 回答时间:2019-11-5 10:57:24
加密确实有点难做的。。。本质还是只需要加大破解成本就可以了!!!
kylongmu 回答时间:2019-11-5 11:21:09
不要只读1个ID,我的经验是板子上所有能读ID的都读回来,按位打乱组合,让盗版的换一颗外围芯片都傻眼。
STM1024 回答时间:2019-11-5 11:35:18
用ID这个只是最原始的加密方式
Kevin_G 回答时间:2019-11-5 11:50:32
收藏
meifan119 回答时间:2019-11-5 13:40:41
0x1FFFF7E8改成0x8000020,并且0x8000020程序区域填上母片的id,不管你的算法有多复杂,这时你的程序就被破解了,连反汇编都不需要,1分钟都嫌多
橡皮筋儿 回答时间:2019-11-6 12:47:18
提示: 作者被禁止或删除 内容自动屏蔽
飞之天之飞 回答时间:2019-11-6 15:09:11
写的不错
edmundlee 回答时间:2019-11-7 10:15:42
原理不能明说, 否则会有更多人轻易的偷取别人的成果, 这方法没用的,信不信随便。
现在最后一度防线是level2, 真想保护你的财产就用Level2
aiherong 回答时间:2019-11-8 05:23:00
支持加密这一做法
meifan119 回答时间:2019-11-8 09:42:03
edmundlee 发表于 2019-11-7 22:12
Level2可以升级, 只不过要你自己做IAP而已, 两个月前我问过Level2解不了, 要解就要肢解芯片, 价格不 ...

id地址隐藏了,破解1分钟也能搞定?
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版