实了解芯片解密方法之前先要知道什么是芯片解密,网络上对芯片解密的定义很多,其实芯片解密就是通过半导体反向开发技术手段,将已加密的芯片变为不加密的芯片,进而使用编程器读取程序出来。
芯片解密所要具备的条件是:
第一、你要有一定的知识,懂得如何将一个已加密的芯片变为不加密。
第二、必须有读取程序的工具,可能有人就会说,无非就是一个编程器。没错,就是一个编程器,但并非所有的编程器是具备读取的功能。这也就是为什么我们有时候为了解密一个芯片而会去开发一个可读编程器的原因。那我们就讲讲,芯片解密常有的一些方法。
1、软件攻击
该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。软件攻击取得成功的一个典型事例是对早期ATMELAT89C系列单片机的攻击。攻击者利用了该系列单片机擦除 *** 作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的 *** 作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。
至于在其他加密方法的基础上,可以研究出一些设备,配合一定的软件,来做软件攻击。近期国内出现了一种凯基迪科技51芯片解密设备(成都一位高手搞出来的),这种解密器主要针对SyncMosWinbond,在生产工艺上的漏洞,利用某些编程器定位插字节,通过一定的方法查找芯片中是否有连续空位,也就是说查找芯片中连续的FFFF字节,插入的字节能够执行把片内的程序送到片外的指令,然后用解密的设备进行截获,这样芯片内部的程序就被解密完成了。
2、电子探测攻击
该技术通常以高时间分辨率来监控处理器在正常 *** 作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。
这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。至于RF编程器可以直接读出老的型号的加密MCU中的程序,就是采用这个原理。
3、过错产生技术
该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误 *** 作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。
4、探针技术
该技术是直接暴露芯片内部连线,然后观察、 *** 控、干扰单片机以达到攻击目的。
5、紫外线攻击方法
紫外线攻击也称为UV攻击方法,就是利用紫外线照射芯片,让加密的芯片变成了不加密的芯片,然后用编程器直接读出程序。这种方法适合OTP的芯片,做单片机的工程师都知道OTP的芯片只能用紫外线才可以擦除。那么要擦出加密也是需要用到紫外线。
目前台湾生产的大部分OTP芯片都是可以使用这种方法解密的,感兴趣的可以试验或到去下载一些技术资料。OTP芯片的封装有陶瓷封装的一半会有石英窗口,这种事可以直接用紫外线照射的,如果是用塑料封装的,就需要先将芯片开盖,将晶圆暴露以后才可以采用紫外光照射。由于这种芯片的加密性比较差,解密基本不需要任何成本,所以市场上这种芯片解密的价格非常便宜,比如SONIX的SN8P2511解密,飞凌单片机解密等价格就非常便宜。
6、利用芯片漏洞
很多芯片在设计的时候有加密的漏洞,这类芯片就可以利用漏洞来攻击芯片读出存储器里的代码,比如我们以前的文章里提到的利用芯片代码的漏洞,如果能找到联系的FF这样的代码就可以插入字节,来达到解密。
还有的是搜索代码里是否含有某个特殊的字节,如果有这样的字节,就可以利用这个字节来将程序导出。这类芯片解密以华邦、新茂的单片为例的比较多,如W78E516解密,N79E825解密等,ATMEL的51系列的AT89C51解密是利用代码的字节漏洞来解密的。
另外有的芯片具有明显的漏洞的,比如在加密后某个管脚再加电信号的时候,会使加密的芯片变成不加密的芯片,由于涉及到国内某家单片机厂家,名称就不列出来了。目前市场上能看到的芯片解密器都是利用芯片或程序的漏洞来实现解密的。
不过外面能买到的解密其基本上是能解得型号很少,因为一般解密公司都不会将核心的东西对外公布或转让。而解密公司自己内部为了解密的方便,自己会使用自制的解密工具,如果致芯科技具有可以解密MS9S09AW32的解密器、能专门解密Lpc2119LPC2368等ARM的解密器,使用这样的解密器解密速度快,客户到公司基本上立等可取。
7、FIB恢复加密熔丝方法
这种方法适用于很多的具有熔丝加密的芯片,最具有代表性的芯片就是ti的msp430解密的方法,因为MSP430加密的时候要烧熔丝,那么只要能将熔丝恢复上,那就变成了不加密的芯片了,如MSP430F1101A解密、MSP430F149解密、MSP430F425解密等。
一般解密公司利用探针来实现,将熔丝位连上,也有的人因为自己没有太多的解密设备,需要交由其它半导体线路修改的公司来修改线路,一般可以使用FIB(聚焦离子束)设备来将线路连接上,或是用专用的激光修改的设备将线路恢复。这些设备目前在国内的二手设备很多,也价格很便宜,一些有实力的解密公司都配置了自己的设备。这种方法由于需要设备和耗材,不是好的方法,但是很多芯片如果没有更好的方法的时候,就需要这种方法来实现。
8、修改加密线路的方法
目前市场上的CPLD以及DSP芯片设计复杂,加密性能要高,采用上述方法是很难做到解密的,那么就需要对芯片结构作前面的分析,然后找到加密电路,然后利用芯片线路修改的设备将芯片的线路做一些修改,让加密电路失效,让加密的DSP或CPLD变成了不加密的芯片从而可以读出代码。如TMS320LF2407A解密,TMS320F28335解密、TMS320F2812解密就是采用这种方法。
了解了这些破解芯片的方法,相应的,我们在设计芯片时也要对这些漏洞尽量加以规避,使自己的芯片更加安全。对于新手来说,设计一款单片机不是容易的事,如果有现成的模块可以使用将会大大节省时间和精力,就有专门为电子工程师提供的电子设计模块,并且全部使用立创商城的正品元器件,质量可靠、售后有保障,可以帮助大家快速搭建产品原型,缩短制作周期
H1=1;H2=1;H3=1;是要完成置位?置位不是GpioDataRegsGPBDATbitGPIOx这个寄存器吧?
GpioDataRegsGPASETbitGPIOx=1, 置1
GpioDataRegsGPACLEARbitGPIOx=1,置0
不知道是不是这个原因,你在看看
您好,1 首先是接口的预定义
----------------------------------------------
#define LCD_DATA (((volatile Uint16 )0x0070E0)) // GPIOA7-A0对应DB7-DB0
#define RS GpioDataRegsGPBDATbitGPIOB0
#define RW GpioDataRegsGPBDATbitGPIOB1 //别弄错0 1 2
#define EN GpioDataRegsGPBDATbitGPIOB2 // 实际接线要对应
void InitGpio(void)
{
EALLOW;
GpioMuxRegsGPAMUXbitPWM1_GPIOA0 = 0; // 设置为普通GPIO使用
GpioMuxRegsGPADIRbitGPIOA0 = 1; // 设置为输出
GpioMuxRegsGPAMUXbitPWM2_GPIOA1 = 0;
GpioMuxRegsGPADIRbitGPIOA1 = 1;
GpioMuxRegsGPAMUXbitPWM3_GPIOA2 = 0;
GpioMuxRegsGPADIRbitGPIOA2 = 1;
GpioMuxRegsGPAMUXbitPWM4_GPIOA3 = 0;
GpioMuxRegsGPADIRbitGPIOA3 = 1;
GpioMuxRegsGPAMUXbitPWM5_GPIOA4 = 0;
GpioMuxRegsGPADIRbitGPIOA4 = 1;
GpioMuxRegsGPAMUXbitPWM6_GPIOA5 = 0;
GpioMuxRegsGPADIRbitGPIOA5 = 1;
GpioMuxRegsGPAMUXbitT1PWM_GPIOA6 = 0;
GpioMuxRegsGPADIRbitGPIOA6 = 1;
GpioMuxRegsGPAMUXbitT2PWM_GPIOA7 = 0;
GpioMuxRegsGPADIRbitGPIOA7 = 1;
GpioMuxRegsGPBMUXbitPWM7_GPIOB0 = 0;
GpioMuxRegsGPBDIRbitGPIOB0 = 1;
GpioMuxRegsGPBMUXbitPWM8_GPIOB1 = 0;
GpioMuxRegsGPBDIRbitGPIOB1 = 1;
GpioMuxRegsGPBMUXbitPWM9_GPIOB2 = 0;
GpioMuxRegsGPBDIRbitGPIOB2 = 1;
EDIS;
}
----------------------------------------------
一般液晶的控制线是直接对I/O口的位进行 *** 作,数据线是按字进行 *** 作。在这容易出错的是:(1)数据线地址的对应。DSP的GPIO数据地址一般为16位一个地址(F28335有的是32个GPIO一组,给出了一个地址,实际上是有两个地址的,给出的那一个地址是低16位的)。需要注意的是,液晶数据线一般为8位,那么把八位数据送出的时候,实际给的是DSP的16位数据的低八位,所以接线上要接低八位的GPIO;如果接高八位的GPIO,软件上要用下面一行程序进行移位 dat = dat << 8; //左移8位,向高位移动。(2)在进行GPIO初始化和预定义的时候,一般都会复制,但是别忘记改一些0 1 2 3等数,接线上也要一一对应,仔细检查。
2 51程序移植到DSP的时序问题
----------------------------------------------
void Display_Data_All(uchar hz)
{
while(hz != '\0')
{
WriteData12864(hz);
hz++;
delay(20);//2就不够!!!!!!
}
}
----------------------------------------------
由于51单片机的晶振一般为110592MHz,而DSP等控制器的晶振为30MHz,实际执行起来最高有150MHz,而液晶为低速外设,所以移植后可能会不显示,显示乱码等情况。我在调试12864液晶的时候就出现过只显示乱码数字不显示汉字的情况,这不是字库损坏,而是因为写汉字的时间要比写数字的时间长,而程序中延时过短。上面程序中把delay(2)改为delay(20)就解决问题了。
实际上,真正造成影响的是,程序执行过快。它认为显示完一个字之后,又很快进入下一个字的 *** 作;实际上液晶要一定的时间才能写完(见液晶 *** 作时序图),所以写数据的程序中要加长延时。至于RS、RW、EN等控制引脚,延时与否影响不大。
3 240128液晶的调试
240128液晶有busy和int返回信号,实际上不需要接即可。程序中也可以不测忙。。程序中写控制指令两者中间也要加长延时,更不用说写数据之间的延时。
----------------------------------------------
void lcd_regwrite(Uint16 regname,Uint16 regdata) // 写控制指令
{
lcd_regwr(regname);
delay(10); // 加长延时
lcd_regwr(regdata);
}
void lcd_character(uchar cha,int count) // 显示中文或字符
{
int i;
for(i=0;i<count;i++)
{
delay(10); // 加长延时
lcd_datawrite(cha);
++cha;
}
}
请在TI网站上搜索并下载最新controlSUITE,其中包含示例程序,安装后在以下目录中C:\ti\controlSUITE\device_support\f2833x\v141\DSP2833x_examples_ccsv5\ecan_a_to_b_xmit
以上就是关于能不能解析一块芯片的系统全部的内容,包括:能不能解析一块芯片的系统、关于DSP28335的3X3矩阵键盘扫描程序的问题!、DSP28335控制12864液晶,读取LCD数据,lcd_read_data程序应该怎么编写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)