|
发表于 2010-11-15 21:45:53
|
显示全部楼层
STM32自己擦除自己的所有程序不是没可能的。。。我曾试过先把擦除程序通过STM32搬到他自己的内存里然后用汇编跳转到内存运行。。。能成功擦除整片芯片。。。内存拷贝并运行的代码如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "LCM202.h"
#define loadRamFilesize 2196 //在内存里运行的文件大小
extern unsigned char const Runbinfile[loadRamFilesize]; //
__asm void RunRAMgoto()//运行RAM映像(内嵌汇编方式)
{
nop //;先休息一下等待稳定
LDR R0, =0x200000ED //;把内存映像地址加载到R0寄存器
BX R0 //;运行内存映像(执行这句后就只能以反汇编窗口调试程序了。。。因为没有源码)
}
int main(void)
{
unsigned char *RunbinPoin;
unsigned int count;
unsigned char MagicC0[20] = {" Copy Image to RAM "};
unsigned char MagicC1[20] = {"Ready Run RAM Image "};
Stm32_Clock_Init(9);//初始化系统时钟
delay_init(72);
LCM202Init();
Showascii(0x80,20,MagicC0);
RunbinPoin = (unsigned char *)0x20000000; //内存映像开始地址
for(count=0;count<loadRamFilesize;count++)//拷贝映像到RAM
*(RunbinPoin + count) = Runbinfile[count];
delay_ms(500);
Showascii(0x80,20,MagicC1);
delay_ms(500);
RunRAMgoto();//调用RunRAMgoto函数
}
偶也没期望STM32的加密有多强。。。所以偶现在是利用STM32的ID和一段1k的音频数据做密钥产生一堆密码子,然后扔到DSP里让DSP解密运行。。。因为DSP的用户群体比较小,反汇编可能性不大。。。就算反也得2种芯片慢慢反。。。 |
|