本發明屬于信息安全及數據恢復領域,涉及西數硬盤的rom文件中數據體壓縮,尤其涉及一種將解壓縮的數據體壓縮的方法。
背景技術:
::1、硬盤是高度復雜尖端的裝置,它結合了電磁、機械和電子方面的技術,以非常高的密度存儲信息。硬盤技術使個人電腦、電影點播、數字錄像機(dvr)和數字音樂點唱機的開發成為可能,并大大促進了數字相機和攝像機的普及。此外,互聯網上的所有的信息都可以存在硬盤上。2、西數是數據存儲業的排頭兵,硬盤業的領頭羊。西數硬盤的市場占有量也相當大。其中,采用marvell一直是主控領域的佼佼者,sata時代的王者,性能和穩定性都很好。而采用marvell主控的西數硬盤的占有率也很高。3、但是,由于marvell主控的西數硬盤在出現故障后不能讀寫數據。因此,如果不能對故障硬盤進行恢復,則會造成用戶數據的丟失。但要修復故障硬盤,必須獲取硬盤的rom文件,而rom文件中有效的數據部分是管理頭及數據體,其中,部分rom文件是加鎖的rom文件,如果不能解鎖,即使獲取到rom文件中管理頭及數據體,也不能修復故障硬盤。4、題為《一種獲取rom文件中管理頭及數據體的方法》、申請號為202311580695.0、申請日期為2023年11月24日的發明申請公開了獲取rom文件中管理頭及數據體的方法。但是,在獲取管理頭及數據體后,需要對解壓縮的數據體重新進行壓縮,否則,就不能更新并重構用以修復故障硬盤所需的rom文件,因而不能恢復marvell主控的西數硬盤。5、現有技術中,針對marvell主控的西數硬盤,目前尚無一種將解壓縮的數據體壓縮的方法。技術實現思路1、本技術針對現有的技術問題,提供一種將解壓縮的數據體壓縮的方法,用以修復故障硬盤所需的rom文件,從而達到恢復marvell主控的西數硬盤的目的。2、本技術將題為《一種獲取rom文件中管理頭及數據體的方法》、申請號為202311580695.0、申請日期為2023年11月24日的發明申請,以及題為《一種獲取西數marvell硬盤中rom文件的解密數據體集合的方法》、申請號為202410475841.1、申請日期為2024年04月19日的發明申請的全部內容通過引用納入本發明申請中。3、本技術所提供的方法包括以下步驟:4、s100:初始化數據、設置數據、輸入源數據及源數據字節長度,其中,5、源數據是采用獲取西數marvell硬盤中rom文件的解密數據體集合的方法而獲取的數據;6、初始化數據包括:初始化目標數據,目標索引作為目標數據的偏移量并賦初值為0;7、以目標索引作為偏移量,以目標數據的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為源數據字節長度,目標索引自加4;8、初始化數據還包括對如下數據初始化:9、數據i、數據h、數據l、數據m、數據n、數據j、數據k、數據x、10、數據y;11、設置數據包括對如下數據設置:12、數據a、數據b、數據c、數據d、數據e、數據f、數據g;13、s200:將源數據0x00字節至0x3c字節的內容,拷貝至起始地址為0xfc4的數據d中;14、0x1001加源數據0x00字節的內容的和,再乘以4的積,作為偏移量,以數據b的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為0xfc4;15、以數據c的起始地址為首地址,向后偏移0x3f10字節并將尋址的連續4字節內容賦值為0x1001加源數據0x00字節的內容的和;16、s300:判斷數據m是否大于數據i,如果是,執行步驟s400,否則,執行步驟s500;17、s400:數據i的值賦給數據m;18、s500:判斷數據m是否大于2,如果是,執行步驟s600,否則,執行步驟s700;19、s600:采用第一方法且輸入數據i-a等于數據n,執行步驟s800;20、采用第二方法且輸入數據ii-a賦值為數據m加0xfd;21、s700:以數據j作為偏移量,以數據d的起始地址為首地址,向后偏移并將尋址的1字節的內容賦值給輸入數據i-a,再采用第一方法;22、s800:判斷是否滿足數據h小于數據m且數據k大于0,如果是,執行步驟s900,否則,執行步驟sc00;23、s900:數據k自減1;24、以數據l作為偏移量,以源數據的起始地址為首地址,向后偏移并將尋址的1字節內容賦值給數據p;25、以數據o作為偏移量,以數據d的起始地址為首地址,向后偏移并將尋址的1字節內容賦值為數據p;26、數據l自加1;27、sa00:判斷數據o是否小于0x3b,如果是,執行步驟sb00,否則,執行步驟sc00;28、sb00:以數據o加0x1000的和作為偏移量,以數據d的起始地址為首地址,向后偏移并將尋址的1字節內容賦值為數據p;29、數據o加1之和,與0xfff進行與運算,其結果賦值給數據o;30、數據j加1之和,與0xfff進行與運算,其結果賦值給數據j;31、采用第三方法且輸入數據iii-a賦值為數據j;32、數據h自加1;33、sc00:判斷數據h是否小于數據m,如果是,執行步驟sd00,否則,執行步驟sh00;34、sd00:數據o加1之和,與0xfff進行與運算,其結果賦值給數據o;35、數據j加1之和,與0xfff進行與運算,其結果賦值給數據j;36、數據i自減1;37、se00:判斷數據i是否不等于0,如果是,執行步驟sf00,否則,執行步驟sg00;38、sf00:采用第三方法且輸入數據iii-a賦值為數據j;39、sg00:數據h自加1;40、sh00:判斷數據i是否等于0,如果是,執行步驟sj00,否則,執行步驟s800;41、sj00:判斷數據x是否等于0x80000000,如果是,執行步驟sl00,否則,執行步驟sk00;42、sk00:以目標索引為偏移量,以目標數據的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為數據y;43、目標索引自加4;44、數據x賦值為0x80000000,數據y賦值為0;45、sl00:輸出目標索引作為壓縮數據體的字節長度;輸出目標數據作為壓縮數據體。46、優選地,初始化數據包括如下步驟:47、數據i賦值為0x3c;48、數據h、數據o、數據m、數據n、數據y均賦值為0;49、數據l賦值為0x3c;50、數據j賦值為0xfc4;51、數據k賦值為源數據字節長度減去0x3c;52、數據x賦值為0x80000000。53、優選地,設置數據包括以下步驟:54、a.設置數據a,用以生成加密數據的輔助運算,包括以下步驟:55、a0:下標a、下標b均賦初值為0;56、a1:以下標a乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為1;57、以0x1884加下標a的和乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為下標a加上0x273的和;58、以0x139c加下標a的和乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為下標a;59、a2:下標a自加1;60、a3:判斷下標a是否不等于0x13a,如果是,執行步驟a1,否則,執行步驟a4;61、a4:下標a賦值為0x13a;62、a5:設置數據a:63、以下標b乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將獲取尋址的連續4字節內容作為被加數;64、以下標b加1的和再乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將獲取尋址的連續4字節內容作為加數;65、以下標a乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為被加數加加數的和;66、以0x1884加下標a的和再乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為下標b;67、以0x9d0加下標b的和再乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為下標a;68、以0x9d4加下標b的和再乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為下標a;69、a6:下標a自加1,下標b自加2;70、a7:判斷下標a是否小于或等于0x272,如果是,執行步驟a5,否則,執行步驟a8;71、a8:以數據a的起始地址為首地址,向后偏移0x9cc字節并將尋址的連續4字節內容賦值為0x7fffffff;72、以數據a的起始地址為首地址,向后偏移0x1398字節并將尋址的連續4字節內容賦值為0x0;73、輸出數據a;74、b.設置數據b,用以生成加密數據的輔助運算,包括以下步驟:75、b0:下標a賦初值為0x1001;76、b1:以下標a乘以4的積為偏移量,以數據b的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為0x1000;77、b2:下標a自加1;78、b3:判斷下標a是否不等于0x1101,如果是,執行步驟a1,否則,結束數據b的設置流程并輸出數據b;79、c.設置數據c,用以生成加密數據的輔助運算,包括以下步驟:80、c0:下標a賦初值為0x0;81、c1:以下標a乘以4的積為偏移量,以數據c的起始地址為首地址,向后偏移并將尋址的連續4字節內容賦值為0x1000;82、c2:下標a自加1;83、c3:判斷下標a是否不等于0x1000,如果是,執行步驟c1,否則,結束數據c的設置流程并輸出數據c;84、d.設置數據d,用以臨時存放數據,當計算加密數據時從該數據中取值,包括以下步驟:85、設置數據d的字節長度為0x103c字節,從首地址起連續填入0xfc4個0x20;86、e.設置數據f、數據g:從pc-3000portable-iii?003396軟件中獲取數據f、數據g,用以生成加密數據的輔助運算。87、優選地,第一方法包括以下步驟:88、i-1:輸入數據并賦初值:89、輸入數據i-a,數據i-b、數據i-c均賦初值為0;90、i-2:以i-a乘以4的積加0x139c的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續4字節內容并賦值給數據i-d;91、i-3:數據i-b右移1bit位;92、i-4:判斷數據i-d與0x01進行與運算的結果是否等于0x01,如果是,執行步驟i-5,否則,執行步驟i-6;93、i-5:數據i-b自加0x80000000;94、i-6:數據i-c自加1;95、i-7:以i-d乘以4的積加0x9d0的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續4字節內容并賦值給數據i-d;96、i-8:判斷數據i-d是否等于0x272,如果是,執行步驟i-9,否則,執行步驟i-7;97、i-9:采用第四方法且輸入數據iv-a賦值為數據i-d、輸入值數據iv-b賦值為數據i-b;98、i-a:采用第五方法且輸入數據v-a賦值為數據i-a。99、優選地,第二方法包括以下步驟:100、ii-1:輸入數據ii-a;101、ii-2:生成數據iv-a:將數據ii-a的值右移6bit位所生成的值作為偏移量,以數據f的起始地址為首地址,向后偏移并將獲取尋址的1字節的內容賦值給數據iv-a;102、ii-3:生成數據iv-b:將數據ii-a的值右移6bit位所生成的值作為偏移量,以數據g的起始地址為首地址,向后偏移并將獲取尋址的1字節的內容,所獲取的1字節的內容左移24bit位所生成的值賦值給數據iv-b;103、ii-4:采用當前的數據iv-a及數據iv-b并執行第四方法;104、ii-5:再次生成數據iv-a:數據iv-a賦值為0x06;105、ii-6:再次生成數據iv-b:數據ii-a與0x3f進行與運算后的結果,再左移0x1a?bit位所生成的值,將所生成的值賦值給數據iv-b;106、ii-7:采用當前的數據iv-a及數據iv-b,執行第四方法。107、優選地,第三方法包括以下步驟:108、iii-1:輸入數據iii-a;109、iii-2:以數據iii-a為偏移量,以數據d的起始地址為首地址,向后偏移并獲取尋址的1字節內容,所獲取1字節內容加0x1001之和賦值給數據iii-b;110、iii-3:數據iii-c賦初值為1;111、iii-4:以數據iii-a加數據iii-c的和為偏移量,以數據d的起始地址為首地址,向后偏移并獲取尋址的1字節內容并賦值給數據iii-d;112、以數據iii-b加數據iii-c的和為偏移量,以數據d的起始地址為首地址,向后偏移并獲取尋址的1字節內容并賦值給數據iii-e;113、iii-5:判斷數據iii-d是否等于數據iii-e,如果是,執行步驟iii-6,否則,執行步驟iii-8;114、iii-6:數據iii-c自加1;115、iii-7:判斷數據iii-c是否等于0x3b,如果是,執行步驟iii-8,否則,執行步驟iii-4;116、iii-8:判斷數據iii-d是否等于數據iii-e,如果是,執行步驟iii-9,否則,執行步驟iii-a;117、iii-9:數據iii-c賦值為0x3c;118、iii-a:判斷數據iii-c是否大于數據m,如果是,執行步驟iii-b,119、否則,結束第三方法的流程;120、iii-b:數據iii-a減數據iii-b的差,與0xfff進行與運算后的結果,再減0x01的差,賦值給數據n,并將當前數據iii-c賦值給數據m。121、優選地,第四方法包括以下步驟:122、iv-1:輸入數據iv-a、數據iv-b,數據iv-c賦值為0x80000000;123、iv-2:數據iv-c與數據iv-b進行與運算,判斷與運算結果是否等于0,如果是,執行步驟iv-4,否則,執行步驟iv-3;124、iv-3:數據x與數據y進行或運算的結果賦值給數據y;125、iv-4:數據iv-c右移1bit位,數據x右移1bit位;126、iv-5:判斷數據x是否等于0,如果是,執行步驟iv-6,否則,執行步驟iv-7;127、iv-6:以目標索引為偏移量,以目標數據的起始地址為首地址,向后偏移并尋址連續的4字節內容,將所尋址的4字節內容賦值為數據y;128、數據x賦值為0x80000000,數據y賦值為0;129、iv-7:數據iv-a自減1;130、iv-8:判斷數據iv-a是否等于0,如果是,執行步驟iv-9,否則,執行步驟iv-2;131、iv-9:結束第四方法的流程。132、優選地,第五方法包括以下步驟:133、v-0:輸入數據v-a;134、v-1:以數據v-a乘以4的積再加0x139c的和,作為偏移量,以數據a的起始地址為首地址,向后偏移并獲取連續的4字節內容,將所獲取的4字節內容賦值給數據v-a;135、v-2:以數據v-a乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并將連續的4字節內容加1,并將連續的4字節內容加1后的結果賦值給數據v-b;136、v-3:以數據v-a加1的和再乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;137、v-4:判斷數據v-b是否大于步驟v-3所獲取的4字節內容,如果是,執行步驟v-5,否則,執行步驟v-9;138、v-5:數據v-a加2的和賦值給數據v-c;139、v-6:以數據v-c乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;140、v-7:判斷數據v-b是否大于步驟v-6所獲取的4字節內容,如果是,執行步驟v-8,否則,執行步驟v-9;141、v-8:數據v-c自加1,執行步驟v-6;142、v-9:數據v-c自減1;143、v-a:執行第一互換:144、v-a-1:以數據v-a乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;145、v-a-2:以數據v-c乘以4的積為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;146、v-a-3:針對數據a,將步驟v-a-1及步驟v-a-2所獲取的連續的4字節內容互換;147、v-b:執行第二互換:148、v-b-1:以數據v-a乘以4的積再加0x139c的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;149、v-b-2:以數據v-c乘以4的積再加0x139c的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;150、v-b-3:針對數據a,將步驟v-b-1及步驟v-b-2所獲取的連續的4字節內容互換;151、v-c:執行第三互換:152、v-c-1:以數據v-a乘以4的積再加0x1884的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;153、v-c-2:以數據v-c乘以4的積再加0x1884的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容;154、v-c-3:針對數據a,將步驟v-c-1及步驟v-c-2所獲取的連續的4字節內容互換;155、v-d:將數據v-a賦值為數據v-c;156、v-e:以數據v-a乘以4的積再加0x9d0的和為偏移量,以數據a的起始地址為首地址,向后偏移并獲取尋址的連續的4字節內容,將所獲取的4字節內容賦值給數據v-a;157、v-f:判斷數據v-a是否不等于0,如果是,執行步驟v-2,否則,執行步驟v-g;158、v-g:結束第五方法的流程。159、本發明具有以下有益效果:160、1、無需額外的硬件設備,恢復故障硬盤的成本低廉。161、2、解決了現有技術中尚無一種將解壓縮的數據體壓縮的方法的技術問題。當前第1頁12當前第1頁12