大家好!我的程序需要烧录两次,第一次烧录的加密程序,然后将结果存入FLASH ,第二次是应用程序+解密 ,将解密结果与存入FLASH的结果比较是否成功。
uint32_t m_ui32AdressVar = 0XEA60;
static void board_get_uniid(uint32_t *IntDeviceSerial)
{
//不直接通过0x1FFFF7E8 地址读取UID,而是先通过数据算出UID地址,0x1FFFF7E8 = (((m_ui32AdressVar<<10) + 0x567EFD)<<3)
uint32_t *UniIdAdress;
UniIdAdress = (uint32_t*)(((m_ui32AdressVar<<10) + 0x567EFD)<<3);//0x1FFFF7E8 指针UniIdAdress
IntDeviceSerial[0] = *(__IO uint32_t*)(UniIdAdress) + 0x4321;
IntDeviceSerial[1] = *(__IO uint32_t*)(UniIdAdress+0x04) + 0x1234;//+0x04
IntDeviceSerial[2] = *(__IO uint32_t*)(UniIdAdress+0x08) + 0x5555;//+0x08
// IntDeviceSerial[0] = *(__IO uint32_t*)(0x1FFFF7E8);
// IntDeviceSerial[1] = *(__IO uint32_t*)(0x1FFFF7EC);//+0x04
// IntDeviceSerial[2] = *(__IO uint32_t*)(0x1FFFF7F0);//+0x08
}
通过上面这样处理意义大吗?如果直接读取UID,网友说反汇编很快就找到唯一ID地址并直接跳过了,我不知道通过上面这样转换一下,是不是没有那么容易破解。
希望各位探头,指教一个有效的、防止破解的方法。。。
先谢过大家了!