TMS320F2812是TI C2000系列里非常经典的一款DSP,工控、逆变、电机驱动这些场合用得特别多。做产品维修或者二次开发的时候,经常会碰到芯片被加密、程序读不出来的情况。所谓"解密",本质上就是把片内Flash里的程序读出来,反汇编后看懂逻辑。今天聊聊这个过程大概是怎么回事。
先搞清楚F2812的加密机制。它有个CSM(Code Security Module)模块,用128位的密码保护Flash和OTP区域。密码烧进去之后,没有正确密码的话,JTAG只能访问安全区以外的东西,Flash里的代码读不出来。所以解密的关键就是拿到或者绕过这个CSM密码。
最常见的解密方式分两种。一种是硬件法,通过探针或者修改电路,在芯片上电初始化时干扰CSM的校验流程,让它误以为密码正确。这种方法对操作要求高,而且不同批次的芯片可能有差异,不是每次都成功。另一种是软件漏洞法,利用早期Bootloader或者外设初始化的一些bug,在CSM锁定前把Flash内容读出来。老版本的芯片漏洞多一点,新版本基本都堵上了。
读出来的程序是汇编代码,F2812用的是C28x内核指令集。反汇编的话,TI官方的反汇编工具或者IDA Pro配C28x插件都能用。反汇编出来是一堆助记符,要慢慢看才能还原出原来的逻辑。有经验的工程师看代码结构能大概猜出来哪部分是初始化、哪部分是中断服务、哪部分是主循环算法。
这里得提醒一句,解密别人的产品涉及知识产权问题,自己项目里用的芯片或者获得授权的维修才合法。要是纯为了学习,建议拿自己的板子练手,烧个简单程序进去试试读出来的流程。另外,解密行业水很深,网上号称能解的人不少,靠谱的不多,先小批量试再决定。