• 虽说加密代码保护不一定管用,想破解的人怎么也就破解了,但出于心里安慰,给破解增加点难度,还是加上吧。

使用

  • 我使用的是JTAG密码保护,操作起来很方便:
    (1)把代码复制到程序中,先不配置IAR JTAG的密码下载设置,刷程序,这样子就把JTAG的密码写到了芯片中。

    (2)断电重启,配置这个地方的密码,不配置仿真器连接不上芯片,配置上程序下载正常。

一、不同的MSP系列的JTAG锁定

1、物理 JTAG 保险丝 (熔丝)(F1xx/F2xx/F4xx)

  • 可通过物理 JTAG 安全保险丝保护 MSP430F1xx、F2xx 和 F4xx 系列器件的 JTAG。进行 JTAG 或 SBW编程之后,保险丝将由编程工具熔断。此工具会对 TEST 引脚(位于带有 TEST 引脚的器件)或 TDI 引脚 (位于带有 TEST 引脚的器件)施加保险丝熔断电压 (6.5V ±0.5V) [请参阅MSP430 Programming Via the JTAG Interface (SLAU320),了解更多详细信息]。保险丝熔断是一个不可逆的过程,会彻底禁用 JTAG 端 口,而且无法再访问 JTAG 或 SBW。当物理保险丝熔断后,将只能通过设置密码保护的引导加载程序(如 果支持并启用了此功能)来访问器件。

2、电子保险丝或无密码锁定

  • 大多数 MSP430 器件都有一个电子保险丝,此保险丝有时被称为 e-Fuse 或“JTAG 无密码锁定”。通过在内 存中将一个值设置为 2 个字(JTAG 签名),可以锁定 JTAG/SBW 接口。对 JTAG 锁定签名进行编程并复 位器件之后,将无法再通过 JTAG 或 SBW 来访问器件。在这种情况下,只能通过设置密码保护的引导加载 程序来访问器件。可以利用 BSL 来重新访问器件并清除 JTAG 签名,但这样需要输入正确的 BSL 密码或者 批量擦除器件(取决于器件系列)。MSP430 不同子系列的电子保险丝实施方式略有不同,以下部分将对此进行说明。

2.1 F5xx/F6xx 电子保险丝的实施方式

  • 在 MSP430 F5xx/F6xx 器件上,JTAG 签名位于引导加载程序的内存区域中(F5xx/F6xx 器件的闪存受保护 区域中包含一个基于闪存的 BSL),地址为 17FCh-17FFh。如果将除 00000000h 或 FFFFFFFFh 以外的任 何内容编程到这些地址,将会锁定 JTAG/SBW 接口。要对这些地址进行编程,必须先清除 SYSBSLC 寄存 器中的 SYSBSLPE 位,以解锁 BSL 闪存的受保护区域。对签名编程之后,应重新启用 BSL 保护。
  • 要清除 JTAG/SBW 锁定保护,可以使用 BSL 将 JTAG 签名清除为 00000000h。BSL 由中断矢量表的最后32 个字节 FFE0h-FFFFh 提供密码保护(请参见4 节)。由于 JTAG 签名位于受保护的 BSL 区域中,因此BSL 必须先清除 SYSBSLC 寄存器中的 SYSBSLPE 位(向地址 0182h 写入 0003h),才能向 JTAG 签名 写入 00000000h。

2.2 FR5xx/FR6xx 电子保险丝的实施方式(无密码锁定)

  • 在 MSP430FR5xx/FR6xx 器件上,JTAG 签名位于 FRAM 的主区域中,地址为 FF80h-FF83h。通过向JTAG 签名写入 55555555h,可以对 JTAG/SBW 接口执行无密码锁定。
  • 要清除 JTAG/SBW 锁定保护,可以使用引导加载程序将 JTAG 签名清除为除 5555h 和 AAAAh 以外的任何 值。BSL 受密码保护,中断矢量表的最后 32 个字节 (FFE0h-FFFFh) 用作 BSL 密码(请参见4 节)。通过 在这些 FRAM 器件上使用 BSL 批量擦除命令,可轻松解锁 JTAG/SBW 访问,因为 JTAG 签名位于主存储 器中(而不是像 F5xx/F6xx 那样位于受保护的 BSL 区域中)。

2.3 FR2xx/FR4xx 电子保险丝的实施方式

  • 在 MSP430FR2xx/FR4xx 器件上,JTAG 签名位于 FRAM 的主区域中,地址为 FF80h-FF83h(与其他FRxx 器件相同)。通过向 JTAG 签名写入除 00000000h 或 FFFFFFFFh 以外的任何内容,可以对JTAG/SBW 接口执行无密码锁(这不同于其他的 FRxx 器件)。

  • 要清除 JTAG/SBW 锁定保护,可以使用引导加载程序将 JTAG 签名清除为 00000000h 或 FFFFFFFFh。BSL 受密码保护,中断矢量表的最后 32 个字节 (FFE0h-FFFFh) 用作 BSL 密码(请参见4 节)。通过在这 些 FRAM 器件上使用 BSL 批量擦除命令,可轻松解锁 JTAG/SBW 访问,因为 JTAG 签名位于主存储器中 (而不是像 F5xx/F6xx 那样位于某个受保护的 BSL 区域中)。

2.4 MSP430i2xx 电子保险丝的实施方式 - 启动代码 (SUC)

  • 在 MSP430i2xx 器件上,JTAG/SBW 器件安全性由启动代码 (SUC) 控制。在执行 BOR 或 POR 复位之 后,SUC 必须在前 64 个 MCLK 时钟周期内将器件设置为安全或不安全状态。SUC 会检查地址 0xFFDC-0xFFDF 的签名,以确定应当启用还是禁用 JTAG/SBW 访问。
  • 通过向地址 FFDCh-FFDFh 写入除 00000000h 或 FFFFFFFFh 以外的任何值,可以禁用 JTAG/SBW 接 口。在执行 POR 或 BOR 复位之后,SUC 会检查这些地址中的值。如果此值并非 00000000h 或FFFFFFFFh,则 SUC 会向 SYSJTAGDIS 寄存器写入 A5A5h,以禁用 JTAG/SBW 接口并保护器件。在执 行 BOR 或 POR 复位之后,SUC 必须在前 64 个 MCLK 周期内完成此操作。
  • 由于 MSP430i2xx 器件没有引导加载程序,因此无法清除地址 0xFFDC-0xFFDF 以重新启用 JTAG/SBW 访 问。如果用户在主存储器中实施了定制的引导加载程序,他们可以使用此程序向地址 FFDCh-FFDFh 写入00000000h。在执行 POR 或 BOR 复位之后,SUC 会检查这些地址中的值。如果此值为 00000000h 或FFFFFFFFh,SUC 将不执行任何操作,并继续执行校准例程 - 在 64 个 MCLK 周期之后,会启用 JTAG, 器件将自动处于不安全状态。
    请参阅 MSP430i2xx Family User’s Guide (SLAU335) 和器件代码示例,了解更多有关 SUC 的信息。

二、JTAG 密码锁定 (FR5xx/FR6xx)

  • 有些 MSP430 FRAM 器件还允许使用 JTAG 密码锁定选项。这不同于电子保险丝/JTAG 无密码锁定,因为 使用这种机制时,无需使用引导加载程序,只需通过工具链提供用户定义的密码即可重新访问。
  • 在 MSP430FR5xx/FR6xx 器件上,JTAG 签名位于 FRAM 的主区域中,地址为 FF80h-FF83h。通过向JTAG 签名 1 (FF80h) 写入 AAAAh,并向 JTAG 签名 2 (FF82h) 写入除 5555h 以外的任何内容,即可使用 密码锁定 JTAG/SBW。写入到 JTAG 签名 2 的值用来定义所需密码的文字长度。密码从地址 FF88h 开始, 并持续 JTAG 签名 2 所设置的字数。请注意,如果密码足够长,可能会与中断矢量表所使用的地址重叠。这 些地址的密码值应是中断矢量表值,只有这样才能正确处理中断和执行代码。密码保护会对下一个 BOR 事 件生效。
  • 当使用 JTAG 密码锁定功能保护器件时,工具链必须提供正确的密码才能访问器件。提供了正确的密码之 后,器件会解锁,直到发生下一个 BOR 事件为止。

1、在 CCS 中使用 JTAG 密码锁定

  • 相关 zip 文件 (http://www.ti.com/cn/lit/zip/slaa685) 中的代码示例 JTAG_lock_FR5xx_with_password.c 显示 了如何在 Code Composer Studio™IDE (CCS) 中为 MSP430FR5969 器件设置 JTAG 密码锁定。但请注意,有些生产编程工具可能还提供了一个选项,以便从 GUI 界面设置密码,而不必将密码硬编码到项目中。
  • 对于 MSP430 TI C/C++ 编译器,使用 #pragma DATA_SECTION 将正确的签名放到链接器文件的.jtagsignature 部分,并将密码放到 .jtagpassword 部分。使用 #pragma RETAIN 防止编译器优化数据(因为程序不会使用这些数据)。
#pragma RETAIN(JTAG_signatures)
#pragma DATA_SECTION(JTAG_signatures, ".jtagsignature")
const uint16_t JTAG_signatures[] = {0xAAAA, 0x0002};#pragma RETAIN(JTAG_password)
#pragma DATA_SECTION(JTAG_password, ".jtagpassword")
const uint8_t JTAG_password[] = {0x12, 0x34, 0x56, 0x78};

如下示例显示了使用 2 字密码 12h 34h 56h 78h 锁定的器件的 TI-txt 二进制文件的一部分:

  • 当器件由密码锁定并完成 BOR 复位(此时设置将会生效)之后,必须提供密码,才能重新访问器件以进行 重新编程。在 CCS 中提供密码,然后在 targetConfigs 文件夹中打开器件的 .ccxml 文件。在“AdvancedSetup”下方,单击链接“Target Configuration”。然后单击器件型号下方的“MSP430”,并在“Password: (HEX format)”框中输入要在解锁器件时提供的密码。对于上述示例,密码为 12h 34h 56h 78h。应以文字形式写入 密码,先写入最低有效文字,因此对于此示例,输入 0x34127856。要找到为工具链提供密码的正确顺序, 一种简单的方法是使用内存浏览器并将视图设置为“16-Bit Hex – TI Style”,然后在首次加载时查看编程到器 件中的密码。
  • 注: 当加载不同的用户项目时,如果在器件此前加载的代码中启用了 JTAG 密码锁定,则首次进入 器件时,必须在项目设置中提供正确的密码并擦除器件。擦除器件之后,如果没有在新项目中 启用 JTAG 密码锁定,则会解锁器件并能够正常对其进行调试。

2、在 IAR 中使用 JTAG 密码锁定

  • 相关 zip 文件中的代码示例 JTAG_lock_FR5xx_with_password.c 显示了如何在 IAR 中的 MSP430FR5969
    器件上设置 JTAG 密码锁定。但请注意,有些生产编程工具可能还提供了一个选项,以便从 GUI 界面设置 密码,而不必将密码硬编码到项目中。
  • 对于 IAR C/C++ 编译器,使用 #pragma 位置从地址 FF80h 开始放置正确的签名,从地址 FF88h 开始放置 密码。使用 __root 关键字防止编译器优化数据(因为程序不会使用这些数据)。
#pragma location = 0xFF80
__root const uint16_t JTAG_signatures[] = {0xAAAA, 0x0002};#pragma location = 0xFF88
__root const uint8_t JTAG_password[] = {0x12, 0x34, 0x56, 0x78};

如下示例显示了使用 2 字密码 12h 34h 56h 78h 锁定的器件的 TI-txt 二进制文件的一部分

  • 要在 IAR 中提供密码,请在Project > Options 菜单中转到 “Debugger” > “FET Debugger”,然后选择"
    Download" 选项卡。在"JTAG password"框中,输入要在解锁器件时提供的密码。对于上述示例,密码为
    12h 34h 56h 78h。应以文字形式写入密码,先写入最低有效文字,因此对于此示例,输入 0x34127856。要 找到为工具链提供密码的正确顺序,一种简单的方法是使用“内存”视图并将格式设置为“2x Units”,然后在首 次加载时查看编程到器件中的密码。
  • 注: 当加载不同的用户项目时,如果在器件此前加载的代码中启用了 JTAG 密码锁定,则首次进入 器件时,必须在项目设置中提供正确的密码并擦除器件。擦除器件之后,如果没有在新项目中 启用 JTAG 密码锁定,则会解锁器件并能够正常对其进行调试。

三、IP 封装 (IPE)

  • IP 封装 (IPE) 是诸如 MSP430FR59xx/69xx 系列 MSP430 FRAM 微控制器上提供的一种功能。(注意:对 于 MSP432 器件上的 IP 保护安全区特性,请参阅应用报告Software IP Protection on MSP432P4xxMicrocontrollers (SLAA660)。)
  • IP 封装允许用户封装 FRAM 存储器的某个区域以防止他人读取。当 IPE 激活时,即使使用 JTAG,也无法 从 IP 封装区域以外的任何位置对 IP 封装区域中的任何代码或数据进行读取或写入访问。要去除 IPE 保护, 需要执行由工具链提供支持的特殊批量擦除序列。任何形式的代码保护都不是无懈可击的,但此功能会为JTAG/SBW 或引导加载程序的安全性提供额外一层保护,适用于密钥等敏感数据或者被用户视为知识产权(IP) 的专有代码。
  • IP 封装的安全性和存储在其内的代码的安全性是一样的 - 即使代码位于封装区域内,糟糕的代码安全性措施 也会让代码变得更容易受到攻击。需要特别注意可以读取/写入地址的代码或者不遵循可靠编码实践的代码。 当封装执行结束时,如果需要隐藏代码对所使用的任何硬件模块和外设寄存器或者 RAM 执行的操作,则还 必须将这些模块清除为它们的原始状态。

更多IPE具体操作参照:https://download.csdn.net/download/Davidysw/14040153

MSP430加密代码保护相关推荐

  1. PHP代码加密/代码保护php-beast

    参考网址: GitHub - liexusong/php-beast: PHP source code encrypt module (PHP源码加密扩展) php-beast 加密 和 解密 详解_ ...

  2. 代码保护(二) 通过Java反编译工具测试加密效果

    上节介绍了当下几款代码保护工具,本节介绍反编译工具对加密的软件进行破解. 反编译工具:jd-gui 打包工具:exe4j 脱壳工具:PEID 调试工具:OllyICE 一.未加密状态 测试过程: 1. ...

  3. 如何保护swf文件,加密代码(译)

    在我的培训课程中我常常被问到有关保护SWF影片的问题.这里有两种方法:一种是加密代码,让它难以被别人反编译和使用:另一种方法是限制SWF文件在哪些地方可用,这样别人就不能随意将你的SWF影片放在他们的 ...

  4. PHP代码保护——Zend Guard

    Zend Guard的作用,就是用编译处理的方式来保护PHP源代码免于被反编译查看.未经授权的定制修改.未经许可的使用和重新发布等.而且,它是PHP的东家Zend公司开发的,是完全为PHP量身定做的保 ...

  5. 前端技术周刊 2019-02-26:前端代码保护

    2019-02-26 前端代码保护 前端快爆 Vue 2.6 正式发布,带来了全新的 Slots(插槽)语法.异步错误处理.动态指令参数.编译警告位置信息.显式创建响应式对象.SSR 数据预抓取.可直 ...

  6. 光盘压制:八种加密方法保护光盘数据安全

    为了防止盗版软件对软件市场的侵害,越来越多的软件商使用加密方法来保护自己的软件.尽管目前加密光盘的方法有很多种,但其主要原理是利用特殊的光盘母盘上的某些特征信息是不可再现的,而且这些特征信息大多是光盘 ...

  7. python 源码保护_Python代码保护

    Python等解释性脚本语言都需要源码明文存储,所以有两种情况需要考虑代码保护的问题: 代码逻辑的保护:代码本身有版权或者不能公开源代码 涉及用户名.密码等关键信息的配置 代码保护方法 Python代 ...

  8. 如何避免黑客攻击?国内首个云端加密代码库来帮忙

    近日,英伟达证实遭遇黑客攻击,核心源代码惨遭泄露,40多万个文件,75GB机密数据被公开.那么企业和个人开发者如何保护源码安全不泄漏呢? 首先,我们看下代码的不安全有哪些因素导致? 第一种,编码中自引 ...

  9. 软件加密时保护软件著作权要注意避免的思路误区

    软件加密时保护软件著作权要注意避免的思路误区 一.问题的提出 首先引用有关"ECC加密算法"介绍的原文结尾部分内容: "七.椭圆曲线在软件注册保护的应用 ....... ...

  10. 端游代码保护:从原生代码到游戏引擎

    近几年,移动端游戏发展迅速.在碎片化的时间争夺战中,手游因其好玩.易玩的优势,收获了大量玩家. 在此之上,部分硬核玩家为了追求更好的游戏体验,会在PC上使用模拟器来操作手游,虽然相比于原生的PC端游戏 ...

最新文章

  1. Linux 下 MediaWiki 的安装使用
  2. SAP Marketing 和SAP marketing Cloud的区别
  3. linux的sh文件怎么执行,linux下执行sh文件的四种做法
  4. Spark基础学习笔记09:Scala变量与数据类型
  5. 在php里面找出有用的代码,如何在多个源代码文件中 找到某段代码?
  6. 1000道Python题库系列分享17(17道判断题)
  7. Android handler.obtainMessage()传字符串用法
  8. Redhat 6.5安装JDK和Tomcat小记
  9. 器械传递的方法_天津304不锈钢传递窗报价_碧海云天
  10. excel最常用的八个函数
  11. android gui工具,搞机助手简约易用的安卓ADB GUI玩机工具箱
  12. JAVA 换行输出的五种方法
  13. 以“掌上东航”为例,论混合开发在企业级项目中的实践
  14. 学python可以改善思维_基于培养思维能力的Python语言程序设计教学
  15. 手把手教你六类网线水晶头接法,超详细教程
  16. 什么是软件模块化,为什么要模块化?
  17. yqsc是什么意思_qsc的含义,qsc是什么的缩写,qsc的词语,qsc代表的意思
  18. ebs开发入门 oracle 知乎_知乎日报
  19. 2021网易互联网秋招内推批前端笔试
  20. Vue全家桶(一)之常用特性

热门文章

  1. 文献笔记:Plasmonic metagratings for simultaneous determination of Stokes parameters
  2. 打开caj文件显示服务器忙,欢迎使用CAJViewer-常见问题
  3. Android防止启动页面闪白问题
  4. 无线路由器dns服务器是什么意思,无线路由器dns是什么
  5. 解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
  6. C语言-编写函数isprime(int a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0。
  7. “神舟八号”飞船将瞄准11月1日5时58分发射
  8. python爬虫,用scrapy爬取天天基金
  9. 没有自制力的人有什么资格谈努力
  10. 地球经纬度转换为unity球面坐标