打印
[信息]

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

[复制链接]
881|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2021-2-20 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发人员一般设计软件加密方法:读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);//和算法结果不正确,进行错误分支
        }
}

使用特权

评论回复
沙发
ColeYao| | 2021-2-20 13:48 | 只看该作者
本帖最后由 ColeYao 于 2021-2-20 13:52 编辑

   还有一个办法提高盗板和抄程序难度,半年内运行正常,半年后判断ID号不一致则按ID号的末位数字随机再延时一段时间(0-15个月)运行正常后程序出错或死机,在死机之前找一个带掉电保存保护的外设(如RTC、EEPROM、Flash)写入已Fail信息,下次开机即使重新写过单片机程序也能通过外设判断试用已过期。  另外,如果程序里面带MQTT通讯的,可以留个后门指令,直接操作后门关闭机器,也可以随时通过Mqtt解锁,这个就更方便了!
  防盗版要多管齐下,不能只指望某一种方法!

使用特权

评论回复
板凳
yjmwxwx| | 2021-2-20 15:29 | 只看该作者
本帖最后由 yjmwxwx 于 2021-2-20 15:35 编辑

https://bbs.pediy.com/thread-265660-1.htm
前些日子免费帮俄国人检测了固件序列号保护的安全,这种简单ID号保护谁都能改很简单,那些搞P解的根本不出来演示用的什么方法,搞开发可能不知道自己的加蜜程序不安全,国内盗版卖家P解了一个注册号卖300元,很多人都被骗了还以为自己买的正版。我P解后免费把方法都演示出来了,而且还反馈 到俄国那里,作者很快在新固件里面改了保护方法,这样每次升级就需要改固件,这样那些卖盗版的继续盗版和维护的成本就高了,而买到盗版被骗的不改固件是没办法用新固件的,我等于帮作者打击了盗版和免费提供了安全漏洞。

使用特权

评论回复
地板
阳光的掌控者| | 2021-2-26 17:51 | 只看该作者
感谢分享,正好看到自己代码没有加 volatile,导致计算被优化掉了

使用特权

评论回复
5
wakayi| | 2021-3-3 09:46 | 只看该作者
有专用的工具?

使用特权

评论回复
6
木木guainv| | 2021-3-3 09:46 | 只看该作者
呵呵 我的软件不需要加密

使用特权

评论回复
7
aoyi| | 2021-3-3 09:49 | 只看该作者
一种取巧的做法

使用特权

评论回复
8
drer| | 2021-3-3 09:51 | 只看该作者
需要多长时间进行解密

使用特权

评论回复
9
gwsan| | 2021-3-3 09:55 | 只看该作者
可以进行id的动态修改吗

使用特权

评论回复
10
kxsi| | 2021-3-3 09:56 | 只看该作者
**id和**代码原理一样吗

使用特权

评论回复
11
nawu| | 2021-3-3 09:59 | 只看该作者
这算是一种暴力**吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1890

主题

6587

帖子

8

粉丝