本发明涉及信息安全技术领域,特别涉及一种解除西数硬盘固件锁并提取数据的方法。
背景技术:
西数硬盘是市面上使用最多、最广泛的品牌厂家硬盘之一。西数硬盘厂家为了保证数据的安全性,在硬盘固件区增加了固件锁,防止固件被串改,保证只能访问数据区;但是如果此种加密硬盘出现了故障,数据区的数据就无法正常访问,硬盘家族无法识别,不能对硬盘进行分头。
目前还没有一种技术可以实现针对加密硬盘发生故障后的数据恢复。
技术实现要素:
本发明针对现有技术的缺陷,提供了一种解除西数硬盘固件锁并提取数据的方法,能有效的解决上述现有技术存在的问题。
一种解除西数硬盘固件锁并提取数据的方法,包括以下步骤:
S1:单接西数硬盘电路板,通电待电路板状态就绪;
S2:提取硬盘PCB板上的ROM芯片数据,大小为256KB;
S3:在ROM芯片数据中检索检索并提取0B模块数据体;
S4:找到0B模块中的所有UBA开始位置,并阻塞服务区;
S5:加载硬盘ROM微码一致的ATA;使硬盘可以正常工作,从而读取硬盘固件区,从固件区地图中找到02模块的存放位置;
S6:在02模块中解锁固件锁,步骤如下:
S61:获取固件锁偏移位置,固件锁的处理标记在02模块的偏移“0xAE”处,2字节所指位置,则为0x7A1,长度为7;
S62:清除固件锁,固件锁处理标记偏移到0x7A1,向后第7字节所在位置,找到固件锁标;若找到固件锁标为锁定状态则解锁;
S7:还原S4中OB模块阻塞的服务区,将固件区磁头地址分配信息表中4个磁头的UBA开始地址还原成原始的值;
S8:断电起电,恢复数据,可以对硬盘进行镜像处理。
作为优选,S3的详细步骤如下:
S31:在256KB的信息中检索“0x524F594C”4个字节的内容;
S32:检索到“0x524F594C”后,向后偏移4个字节,取2字节数据,这2字节就代表ROM模块号;并判断该模块号是否为“0x0B00”,如果是则执行S33,如果不是则以该位置为起始执行S31;
S33:得到模块的大小;模块号后面2字节代表模块所占扇区数;
S34:提取整个0B模块,从头部“0x524F594C”标记向后,到下一个标记“0x524F594C”的数据都为0B模块的数据体;在此数据体后添加0x00直至填充为一个完整的扇区数据即可。
作为优选,S4的详细步骤如下:
S41:计算出固件区磁头地址分配表起始偏移位置,执行以下公式:
OB模块数据起始位置+ROM模块条目数*条目所占字节数=固件区磁头地址分配表起始偏移位置;
S42:偏移至固件区磁头地址分配表起始偏移位置得到固件区磁头地图分配信息表占用总大小;
S43:根据地图分配信息表占用总大小扫描整个分配表,得到0头UBA结束位置;
S44:找到0、1、2、3头的UBA开始位置;
S45:阻塞服务区;将0、1、2、3头的UBA开始位置都做加1处理;
S46:修改完成后,校验回写OB模块,断电起电。
与现有技术相比本发明的优点在于:通过阻塞服务区,解锁固件锁,达到读取故障加密西数硬盘固件,修复固件区从而恢复数据的目的,降低因硬盘故障到时数据丢失的损失。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。
一种解除西数硬盘固件锁并提取数据的方法,包括以下步骤:
S1:单接西数硬盘电路板,通电待电路板状态就绪;
S2:提取硬盘PCB板上的ROM芯片数据,大小为256KB;
S3:在ROM芯片数据中检索检索并提取0B模块数据体,详细步骤如下:
S31:在256KB的信息中检索“0x524F594C”4个字节的内容;
S32:检索到“0x524F594C”后,向后偏移4个字节,取2字节数据,这2字节就代表ROM模块号;并判断该模块号是否为“0x0B00”,如果是则执行S33,如果不是则以该位置为起始执行S31;
S33:得到模块的大小;模块号后面2字节代表模块所占扇区数;
S34:提取整个0B模块,从头部“0x524F594C”标记向后,到下一个标记“0x524F594C”的数据都为0B模块的数据体;在此数据体后添加0x00直至填充为一个完整的扇区数据即可。
S4:找到0B模块中的所有UBA开始位置,并阻塞服务区,详细步骤如下:
S41:计算出固件区磁头地址分配表起始偏移位置,执行以下公式:
OB模块数据起始位置+ROM模块条目数*条目所占字节数=固件区磁头地址分配表起始偏移位置,本例中为1E+0A*1A=0x122;
S42:偏移至“0x122”(固件区磁头地址分配表起始偏移位置)得到固件区磁头地图分配信息表占用总大小,本例中为“0x46”;
S43:根据地图分配信息表占用总大小“0x46”扫描整个分配表,得到0头UBA结束位置;
S44:找到0、1、2、3头的UBA开始位置;
“0x46”后4个字节表示固件区磁头位图,本例中为“0x04FF 0F 0F”;
固件区磁头位图后一个字节为占位符;
占位符向后偏移4个字节表示0头实际使用的UBA长度,本例为“0x00 56 04 00”;
向后偏移4个字节表示0头UBA开始位置,本例为“00 00 00 00”;
向后偏移4个字节表示1头实际使用的UBA长度,本例为“00 56 04 00”;
向后偏移4个字节表示1头UBA开始位置,本例为“FB C7 05 00”;
向后偏移4个字节表示2头实际使用的UBA长度,本例为“0x00 56 04 00”;
向后偏移4个字节表示2头UBA开始位置,本例为“FB 8F 0B 00”;
向后偏移4个字节表示3头实际使用的UBA长度,本例为“0x00 56 04 00”;
向后偏移4个字节表示3头UBA开始位置,本例为“FB 57 11 00”;
S45:阻塞服务区;将0、1、2、3头的UBA开始位置都做加1处理;
00 00 00 00表示0头UBA开始位置修改为01 00 00 00;
FB C7 05 00表示1头UBA开始位置修改为FC C7 05 00;
FB 8F 0B 00表示2头UBA开始位置修改为FC 8F 0B 00;
FB 57 11 00表示3头UBA开始位置修改为FC 57 11 00;
S46:修改完成后,校验回写OB模块,断电起电。
S5:加载硬盘ROM微码一致的ATA;使硬盘可以正常工作,从而读取硬盘固件区,从固件区地图中找到02模块的存放位置。
S6:在02模块中解锁固件锁,具体步骤如下:
S61:获取固件锁偏移位置,固件锁的处理标记在02模块的偏移“0xAE”处,2字节所指位置,则为0x7A1,长度为7;
S62:清除固件锁,固件锁偏移到0x7A1,向后第7字节所在位置,即为固件锁标记位;0x00表示没有固件锁,0x01表示有固件锁;将01改为00,即可去掉固件锁,解锁固件区。
S7:还原S4中OB模块阻塞的服务区,将固件区磁头地址分配信息表中4个磁头的UBA开始地址还原成原始的值。
S8:断电起电,恢复数据,可以对硬盘进行镜像处理。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。