欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種dex文件的存儲方法和裝置與流程

文檔序號:12669708閱讀:381來源:國知局
一種dex文件的存儲方法和裝置與流程

本發(fā)明涉及應(yīng)用程序安全防護(hù)技術(shù)領(lǐng)域,具體涉及一種dex文件的存儲方法和裝置。



背景技術(shù):

隨著Android系統(tǒng)的快速發(fā)展和及設(shè)備的高速增長,基于Android的平臺應(yīng)用需求也越來越復(fù)雜。形形色色的應(yīng)用軟件壯大了Android市場,也豐富了我們的生活,越來越多的人從起初的嘗試到享受再到依賴,Android應(yīng)用越來越廣泛。與其它操作系統(tǒng)相比,Android系統(tǒng)的開源性為應(yīng)用開發(fā)者提供了更多的功能接口,但這些功能接口在提高系統(tǒng)可擴展性的同時也為惡意軟件提供了遍歷,非法拷貝、反編譯、內(nèi)存截取等手段不斷威脅著安卓系統(tǒng)的安全,不僅危害了使用者,也給正常應(yīng)用開發(fā)者造成了嚴(yán)重的損害。因此,Android應(yīng)用安全性一直是開發(fā)者所關(guān)注的重點問題。

對Android應(yīng)用進(jìn)行加固防護(hù)的主要目的均是為了防止其java字節(jié)碼文件classes.dex文件被獲取,在Android平臺安裝運行APK文件時,都必須將dex文件釋放到內(nèi)存中,在dex文件完成加載時,根據(jù)文件頭header中定義的其它結(jié)構(gòu)的偏移地址和長度信息進(jìn)行尋址解析,將其它結(jié)構(gòu)中的數(shù)據(jù)加載分別加載到內(nèi)存中。由于dex文件的內(nèi)容是存放在內(nèi)存中的一端連續(xù)的內(nèi)存空間中,因此,破解者通過dex文件內(nèi)存提取工具即dexdump工具只需要掃描到內(nèi)存中的文件頭的起始地址位置的字符串,就相當(dāng)于找到了找到了dex文件,就能把它從內(nèi)存中提取即dump出來,使得應(yīng)用程序很容易被篡改,為開發(fā)者和用戶造成損害。



技術(shù)實現(xiàn)要素:

針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明實施例的目的在于提供一種能夠克服上述問題或者至少能夠部分地解決上述問題的一種dex文件的存儲方法和裝置。

為實現(xiàn)上述目的,本發(fā)明的一個實施例中提供一種dex文件的存儲方法,該方法包括:

解析待加載的dex文件,將解析后的dex文件加載到內(nèi)存中;

刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù)。

優(yōu)選的,如上所述的一種dex文件的存儲方法,還包括:

根據(jù)解析后的dex文件所在的內(nèi)存地址,完成dex文件的動態(tài)加載。

優(yōu)選的,如上所述的一種dex文件的存儲方法,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic。

優(yōu)選的,如上所述的一種dex文件的存儲方法,所述刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù),包括:刪除內(nèi)存中的“dex\0035”字符串。

優(yōu)選的,如上所述的一種dex文件的存儲方法,所述指定數(shù)據(jù)包括以下數(shù)據(jù)中的至少一種:

校驗碼字段checksum、簽名字段signature、文件總長度字段fileSize、文件頭長度字段headerSize、字節(jié)順序常量標(biāo)識字段endianTag、連接段開始位置字段link Off、各基地址字段。

本發(fā)明的一個實施例中還公開了一種dex文件的存儲裝置,該裝置包括:

dex解析加載模塊,用于解析待加載的dex文件,將解析后的dex文件加載到內(nèi)存中;

指定數(shù)據(jù)刪除模塊,用于刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù)。

優(yōu)選的,如上所述的一種dex文件的存儲裝置,還包括:

dex動態(tài)加載模塊,用于根據(jù)解析后的dex文件所在的內(nèi)存地址,完成dex文件的動態(tài)加載。

優(yōu)選的,如上所述的一種dex文件的存儲裝置,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic。

優(yōu)選的,如上所述的一種dex文件的存儲裝置,所述指定數(shù)據(jù)刪除模塊用于刪除內(nèi)存中的“dex\0035”字符串。

優(yōu)選的,如上所述的一種dex文件的存儲裝置,所述指定數(shù)據(jù)包括以下數(shù)據(jù)中的至少一種:

校驗碼字段checksum、簽名字段signature、文件總長度字段fileSize、文件頭長度字段headerSize、字節(jié)順序常量標(biāo)識字段endianTag、基地址字段。

本發(fā)明的有益效果在于:本發(fā)明實施例中所提供的dex文件的存儲方法和裝置,通過抹除已加載到內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù),使得反編譯者無法從內(nèi)存中找到dex文件或者無法提取到完整的dex文件,解決了可以從內(nèi)存中提取dex文件的問題,有效避免了dex文件的動態(tài)反編譯,提高了dex文件動態(tài)加載及運行的安全性。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,附圖僅限于示出優(yōu)選實施方式的目的,而并不認(rèn)為是本發(fā)明的限制,且對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明一個實施例中的一種dex文件的存儲方法的流程示意圖;

圖2為現(xiàn)有dex文件的文件頭部分在內(nèi)存中的結(jié)構(gòu)示意圖;

圖3為本發(fā)明一個實施例中將dex文件中的指定數(shù)據(jù)刪除后的內(nèi)存中的dex文件的文件頭部分的結(jié)構(gòu)示意圖;

圖4為本發(fā)明一個實施例中的一種dex文件的存儲方法的流程示意圖

圖5為本發(fā)明一個實施例中一種dex文件的存儲裝置的結(jié)構(gòu)示意圖;

圖6為本發(fā)明一個實施例中一種dex文件的存儲裝置的結(jié)構(gòu)示意圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,均屬于本發(fā)明保護(hù)的范圍。

圖1示出了本發(fā)明的一個實施例中提供的一種dex文件的存儲方法的流程示意圖,由圖中可以看出,該方法可以包括以下步驟:

步驟S110:解析待加載的dex文件,將解析后的dex文件加載到內(nèi)存中;

步驟S120:刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù)。

為了實現(xiàn)安卓可執(zhí)行文件classes.dex文件的動態(tài)加載,首先需要將dex文件進(jìn)行底層解析與加載,根據(jù)dex文件的文件頭中各部分的偏移地址和數(shù)據(jù)長度信息等,將dex文件的各部分內(nèi)容加載到內(nèi)存中,再通過底層與上層之間的通信調(diào)用,由dex類加載器完成上層的dex文件的動態(tài)加載。

本實施例中所提供的存儲方法,正是在完成待加載的dex文件的底層解析與加載后進(jìn)行的,因此,首先需要解析待加載的dex文件,在將解析后的dex文件加載到內(nèi)存中后,刪除內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù)。通過該方法,抹除了內(nèi)存中已加載的dex文件的文件頭header中的指定數(shù)據(jù),從而避免了反編譯工具(如dexdump等)能夠從內(nèi)存中提取完整的dex文件的問題,避免對dex文件的動態(tài)反編譯。

在本發(fā)明的一個實施例中,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic。此時,所述刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù),包括:刪除內(nèi)存中的“dex\0035”字符串。

魔數(shù)字段magic,即Dex文件的標(biāo)識符,其格式為“dex\0035”,其中,035表示結(jié)構(gòu)的版本,將dex文件解析加載到內(nèi)存后,魔數(shù)字段magic的字符串“dex\0035”即標(biāo)識了dex文件在內(nèi)存中的起始地址位置,dexdump等反編譯工具能夠通過查找內(nèi)存中的“dex\0035”字符串找到dex文件,因此,通過刪除文件頭中的數(shù)字段magic,使反編譯工具無法在內(nèi)存中找到dex文件的起始地址位置,從而無法從內(nèi)存中提取到dex文件。

在本發(fā)明的一個實施例中,所述指定數(shù)據(jù)還可以包括以下數(shù)據(jù)中的至少一種:

校驗碼字段checksum、簽名字段signature、文件總長度字段fileSize、文件頭長度字段headerSize、字節(jié)順序常量標(biāo)識字段endianTag、連接段開始位置字段link Off、各基地址字段。

其中,所述基地址字段包括連接段開始位置字段link Off、數(shù)據(jù)基地址字段mapOff、字符串列表基地址字段stringIds Off、類型列表基地址字段typeIds Off、原型列表基地址字段protoIds Off、字段列表基地址fieldIds Off、方法列表基地址字段methodIds Off、類定義列表基地址字段classDefs Off和數(shù)據(jù)段基地址字段data Off。

本實施例中,通過刪除dex文件的文件頭中的上述任一指定數(shù)據(jù),使得反編譯工具即使能夠通過魔數(shù)字段magic的字符串“dex\0035”找到dex文件的起始位置,但也無法提取到完整的dex文件。

在本發(fā)明的一個優(yōu)選實施例中,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic,還可以包括上述各字段數(shù)據(jù)中的一種或多種。

圖2示出了現(xiàn)有技術(shù)中dex文件的文件頭部分在內(nèi)存中的結(jié)構(gòu)示意圖,圖3中示出了本發(fā)明一個實施例中dex文件的文件頭部分在內(nèi)存中的結(jié)構(gòu)示意圖,由圖中可以看出,本實施例中,所述指定數(shù)據(jù)包括了魔數(shù)字段magic和上述各字段中的所有字段,將dex文件解析加載到內(nèi)存中后,對于文件頭header,除了考慮到系統(tǒng)的兼容性問題,保留了文件頭中的size字段外,別的其它信息即上述指定數(shù)據(jù)均被抹除了,這樣在內(nèi)存中就無法搜索到classes.dex文件的起始地址位置的字符串“dex\0035”,也無法提取到上述各字段,達(dá)到了防止從內(nèi)存中暴力搜索“dex\0035”字符串來從內(nèi)存中提取dex文件的目的,避免了dex文件被動態(tài)反編譯。

在本發(fā)明的一個實施例中,所述dex文件的存儲方法還可以包括步驟S130,如圖4所示。

步驟S130:根據(jù)解析后的dex文件所在的內(nèi)存地址,完成dex文件的動態(tài)加載。

在完成dex文件的底層解析與加載后,通過dex類加載器Dexclassloader根據(jù)解析后的dex文件所在的內(nèi)存地址,完成dex文件的動態(tài)加載,實現(xiàn)對應(yīng)應(yīng)用程序的運行。

對應(yīng)于圖1中所示的方法,本發(fā)明的一個實施例中還提供了一種dex文件的存儲裝置,如圖5所示,該裝置包括dex解析加載模塊110和指定數(shù)據(jù)刪除模塊120。其中:

Dex解析加載模塊110,用于解析待加載的dex文件,將解析后的dex文件加載到內(nèi)存中;

指定數(shù)據(jù)刪除模塊120,用于刪除所述內(nèi)存中的dex文件的文件頭header中的指定數(shù)據(jù)。

本發(fā)明的另一個實施例中,該存儲裝置還可以包括dex動態(tài)加載模塊130,如圖6所示。其中:

dex動態(tài)加載模塊130,用于根據(jù)解析后的dex文件所在的內(nèi)存地址,完成dex文件的動態(tài)加載。

本發(fā)明的一個實施例中,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic。此時,所述指定數(shù)據(jù)刪除模塊120用于刪除內(nèi)存中的“dex\0035”字符串。

在本發(fā)明的另一個實施例中,所述指定數(shù)據(jù)可以包括以下數(shù)據(jù)中的至少一種:

校驗碼字段checksum、簽名字段signature、文件總長度字段fileSize、文件頭長度字段headerSize、字節(jié)順序常量標(biāo)識字段endianTag、基地址字段。

在本發(fā)明的一個優(yōu)選實施例中,所述指定數(shù)據(jù)包括文件頭header中的魔數(shù)字段magic和上述實施例中的一個或多個字段。

需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。

本說明書中的各個實施例均采用相關(guān)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。

本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述裝置實施方式中各部分的全部或部分可以以硬件實現(xiàn),或者以在一個或多個硬件上運行的軟件模塊來實現(xiàn),方法實施方式中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成。本領(lǐng)域技術(shù)人員應(yīng)該明白,本發(fā)明所述的方法和裝置并不限于具體實施方式中所述的實施例,上面的具體描述只是為了解釋本發(fā)明的目的,并非用于限制本發(fā)明。本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出其他的實施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍,本發(fā)明的保護(hù)范圍由權(quán)利要求及其等同物限定。

顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其同等技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
申扎县| 正阳县| 黑河市| 保德县| 积石山| 紫阳县| 茂名市| 牟定县| 河东区| 惠来县| 墨竹工卡县| 桦甸市| 炎陵县| 南部县| 盐亭县| 桃园县| 石狮市| 呈贡县| 蕲春县| 英超| 景宁| 洪湖市| 宁明县| 黎平县| 阿瓦提县| 南充市| 临城县| 平潭县| 闽清县| 黄陵县| 宁夏| 榕江县| 项城市| 揭东县| 吉林省| 宁武县| 时尚| 丹阳市| 水城县| 什邡市| 阳新县|