本發(fā)明涉及應(yīng)用加固領(lǐng)域,尤其涉及一種防止android應(yīng)用被反編譯的應(yīng)用加固方法及系統(tǒng)。
背景技術(shù):
android(安卓)平臺(tái)在登陸市場(chǎng)幾年間,發(fā)展迅速,占據(jù)了大量的移動(dòng)終端市場(chǎng),已經(jīng)逐漸成為了移動(dòng)終端的最普及的操作系統(tǒng),同時(shí)基于其中的軟件應(yīng)用數(shù)目也相當(dāng)驚人,然而與之并生的安全問(wèn)題卻始終沒(méi)有得到良好的解決,安全威脅越來(lái)越多,并且威脅程度也在逐步加深。特別是開(kāi)發(fā)者發(fā)布的android應(yīng)用會(huì)被其他人惡意反編譯,從而獲取到app(應(yīng)用的英文縮寫(xiě))中的重要信息,這樣無(wú)論對(duì)開(kāi)發(fā)者還是用戶(hù)都帶來(lái)了很不好的影響。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種防止android應(yīng)用被反編譯的應(yīng)用加固方法及系統(tǒng),目的在于防止app被惡意反編譯獲取到重要數(shù)據(jù),保護(hù)使用者和開(kāi)發(fā)者的權(quán)益。
本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:
一種防止android應(yīng)用被反編譯的應(yīng)用加固方法,包括以下步驟:
s1,將android應(yīng)用的源apk文件采用加密算法加密成解殼數(shù)據(jù),將得到的解殼數(shù)據(jù)與預(yù)設(shè)的解殼程序的dex文件合并后得到新解殼程序的dex文件,并在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段;
s2,根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件后,用源apk文件的資源配置文件替換新解殼程序的資源配置文件,并用源apk文件的資源文件替換與新解殼程序相對(duì)應(yīng)的資源文件;
s3,讀取新解殼文件的dex文件末尾字段獲取解殼數(shù)據(jù)長(zhǎng)度,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù),用與s1中的加密算法對(duì)應(yīng)的解密算法解密得到解殼數(shù)據(jù)保存在內(nèi)存中,動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用。
本發(fā)明的有益效果是:在對(duì)android應(yīng)用進(jìn)行安全加固后,能夠防止app被惡意反編譯獲取到重要數(shù)據(jù),保護(hù)使用者和開(kāi)發(fā)者的權(quán)益;且在不影響合法應(yīng)用便利的前提下,能對(duì)任意應(yīng)用進(jìn)行安全加固,同時(shí)能夠保證應(yīng)用的安全性,從而保證android系統(tǒng)健康平穩(wěn)的發(fā)展。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn):
進(jìn)一步,所述s1還包括:在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段后,修改新解殼程序的dex文件的文件頭信息;所述文件頭信息包括:文件檢驗(yàn)碼、唯一性驗(yàn)證算法和dex文件尺寸信息;
所述s3還包括:根據(jù)文件頭信息驗(yàn)證新解殼程序dex文件后,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù)。
采用上述進(jìn)一步方案的有益效果是:使用解殼數(shù)據(jù)長(zhǎng)度字段標(biāo)記解殼數(shù)據(jù)的大小,方便的進(jìn)行解殼得到正確的apk文件,同時(shí)使用頭文件來(lái)驗(yàn)證文件的正確性和唯一性,保證了加固過(guò)程中的數(shù)據(jù)正確率并能保證文件的唯一性,提高安全性。
進(jìn)一步,所述s2中所述根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件的過(guò)程為:根據(jù)新解殼程序的dex文件修改用于權(quán)限申請(qǐng)和定義配置的androidmanifest.xml文件。
采用上述進(jìn)一步方案的有益效果是:使用全局配置文件給dex賦予系統(tǒng)權(quán)限并定義相應(yīng)的配置可以靈活設(shè)置加固過(guò)程所需要的權(quán)限和配置,在保證加固效率的前提下提高了加固過(guò)程的安全性。
進(jìn)一步,所述s3中所述動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用的過(guò)程為:使用dexclassloader類(lèi)加載器動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)中的dex文件運(yùn)行android應(yīng)用。
采用上述進(jìn)一步方案的有益效果是:使用專(zhuān)門(mén)的類(lèi)加載器來(lái)動(dòng)態(tài)加載dex文件,使android應(yīng)用的運(yùn)行的出錯(cuò)概率小,提高了android應(yīng)用運(yùn)行的穩(wěn)定性。
進(jìn)一步,所述s1中所述加密算法包括:對(duì)稱(chēng)加密算法和非對(duì)稱(chēng)加密算法。
采用上述進(jìn)一步方案的有益效果是:提供多種方式的加密算法可以根據(jù)不同的需求選擇使用,保證應(yīng)用加固目的的同時(shí)增加了適用范圍。
一種防止android應(yīng)用被反編譯的應(yīng)用加固系統(tǒng),所述系統(tǒng)包括:
加固模塊,用于將android應(yīng)用的源apk文件采用加密算法加密成解殼數(shù)據(jù),將得到的解殼數(shù)據(jù)與預(yù)設(shè)的解殼程序的dex文件合并后得到新解殼程序的dex文件,并在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段;
配置模塊,用于根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件后,用源apk文件的資源配置文件替換新解殼程序的資源配置文件,并用源apk文件的資源文件替換與新解殼程序相對(duì)應(yīng)的資源文件;
運(yùn)行模塊,用于讀取新解殼文件的dex文件末尾字段獲取解殼數(shù)據(jù)長(zhǎng)度,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù),用與加固模塊中的加密算法對(duì)應(yīng)的解密算法解密得到解殼數(shù)據(jù)保存在內(nèi)存中,動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用。
本發(fā)明的有益效果是:在對(duì)android應(yīng)用進(jìn)行安全加固后,能夠防止app被惡意反編譯獲取到重要數(shù)據(jù),保護(hù)使用者和開(kāi)發(fā)者的權(quán)益;且在不影響合法應(yīng)用便利的前提下,能對(duì)任意應(yīng)用進(jìn)行安全加固,同時(shí)能夠保證應(yīng)用的安全性,從而保證android系統(tǒng)健康平穩(wěn)的發(fā)展。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn):
進(jìn)一步,所述加固模塊還用于在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段后,修改新解殼程序的dex文件的文件頭信息;所述文件頭信息包括:文件檢驗(yàn)碼、唯一性驗(yàn)證算法和dex文件尺寸信息;
所述運(yùn)行模塊還用于根據(jù)文件頭信息驗(yàn)證新解殼程序dex文件后,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù)。
采用上述進(jìn)一步方案的有益效果是:使用解殼數(shù)據(jù)長(zhǎng)度字段標(biāo)記解殼數(shù)據(jù)的大小,方便的進(jìn)行解殼得到正確的apk文件,同時(shí)使用頭文件來(lái)驗(yàn)證文件的正確性和唯一性,保證了加固過(guò)程中的數(shù)據(jù)正確率并能保證文件的唯一性,提高安全性。
進(jìn)一步,所述配置模塊還用于根據(jù)新解殼程序的dex文件修改用于權(quán)限申請(qǐng)和定義配置的androidmanifest.xml文件。
采用上述進(jìn)一步方案的有益效果是:使用全局配置文件給dex賦予系統(tǒng)權(quán)限并定義相應(yīng)的配置可以靈活設(shè)置加固過(guò)程所需要的權(quán)限和配置,在保證加固效率的前提下提高了加固過(guò)程的安全性。
進(jìn)一步,所述運(yùn)行模塊還用于使用dexclassloader類(lèi)加載器動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)中的dex文件運(yùn)行android應(yīng)用。
采用上述進(jìn)一步方案的有益效果是:使用專(zhuān)門(mén)的類(lèi)加載器來(lái)動(dòng)態(tài)加載dex文件,使android應(yīng)用的運(yùn)行的出錯(cuò)概率小,提高了android應(yīng)用運(yùn)行的穩(wěn)定性。
進(jìn)一步,所述加固模塊中所述加密算法包括:對(duì)稱(chēng)加密算法和非對(duì)稱(chēng)加密算法。
采用上述進(jìn)一步方案的有益效果是:提供多種方式的加密算法可以根據(jù)不同的需求選擇使用,保證應(yīng)用加固目的的同時(shí)增加了適用范圍。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例1中一種防止android應(yīng)用被反編譯的應(yīng)用加固方法的流程圖;
圖2為本發(fā)明實(shí)施例2中一種防止android應(yīng)用被反編譯的應(yīng)用加固系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
實(shí)施例1
如圖1所述,一種防止android應(yīng)用被反編譯的應(yīng)用加固方法,包括以下步驟:
s1,將android應(yīng)用的源apk文件采用加密算法加密成解殼數(shù)據(jù),將得到的解殼數(shù)據(jù)與預(yù)設(shè)的解殼程序的dex文件合并后得到新解殼程序的dex文件,并在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段;
s2,根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件后,用源apk文件的資源配置文件替換新解殼程序的資源配置文件,并用源apk文件的資源文件替換與新解殼程序相對(duì)應(yīng)的資源文件;
s3,讀取新解殼文件的dex文件末尾字段獲取解殼數(shù)據(jù)長(zhǎng)度,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù),用與s1中的加密算法對(duì)應(yīng)的解密算法解密得到解殼數(shù)據(jù)保存在內(nèi)存中,動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用。
具體的,由于android系統(tǒng)支持的應(yīng)用格式主要以apk文件形式存在,應(yīng)用的主要邏輯實(shí)現(xiàn)在apk文件中的classes.dex文件中,因此,對(duì)classes.dex文件的保護(hù)是保護(hù)整個(gè)apk文件安全的關(guān)鍵所在。為此本發(fā)明采取相應(yīng)的加密方式隱藏源程序classes.dex文件中的實(shí)現(xiàn)邏輯,并且不影響程序的正常運(yùn)行,對(duì)用戶(hù)保證加固的透明性。
本發(fā)明中的android應(yīng)用進(jìn)行安全加固后,能夠防止app被惡意反編譯獲取到重要數(shù)據(jù),保護(hù)使用者和開(kāi)發(fā)者的權(quán)益;且在不影響合法應(yīng)用便利的前提下,能對(duì)任意應(yīng)用進(jìn)行安全加固,同時(shí)能夠保證應(yīng)用的安全性,從而保證android系統(tǒng)健康平穩(wěn)的發(fā)展。
進(jìn)一步,所述s1還包括:在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段后,修改新解殼程序的dex文件的文件頭信息;所述文件頭信息包括:文件檢驗(yàn)碼、唯一性驗(yàn)證算法和dex文件尺寸信息;
所述s3還包括:根據(jù)文件頭信息驗(yàn)證新解殼程序dex文件后,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù)。
具體的,文件頭信息中的文件檢驗(yàn)碼(字段名:checksum)用于檢查文件錯(cuò)誤;唯一性驗(yàn)證算法(字段名:signature)用于識(shí)別文件的唯一性;dex文件尺寸信息(字段名:file_size)表示dex文件的大小。
由于需要將一個(gè)文件(加密之后的源apk文件)寫(xiě)入到dex中,就需要修改文件校驗(yàn)碼(checksum)。因?yàn)樗糜跈z查文件是否有錯(cuò)誤。同理需要修改唯一性驗(yàn)證算法(字段名:signature)和dex文件的大小(字段名:file_size)。
由于在脫殼的時(shí)候,需要知道apk文件的大小,才能正確的得到apk文件,因此需要在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段。
該改進(jìn)中,使用解殼數(shù)據(jù)長(zhǎng)度字段標(biāo)記解殼數(shù)據(jù)的大小,方便的進(jìn)行解殼得到正確的apk文件,同時(shí)使用頭文件來(lái)驗(yàn)證文件的正確性和唯一性,保證了加固過(guò)程中的數(shù)據(jù)正確率并能保證文件的唯一性,提高安全性。
進(jìn)一步,所述s2中所述根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件的過(guò)程為:根據(jù)新解殼程序的dex文件修改用于權(quán)限申請(qǐng)和定義配置的androidmanifest.xml文件。
具體的,androidmanifest.xml文件是android系統(tǒng)中重要的權(quán)限申請(qǐng)和定義配置文件,在開(kāi)發(fā)時(shí)需要通過(guò)其來(lái)向系統(tǒng)預(yù)先定義和申請(qǐng)應(yīng)用程序運(yùn)行所需要的權(quán)限,是每個(gè)android程序中必須的文件,位于整個(gè)項(xiàng)目的根目錄,靈活、安全地使用該配置文件可以大大提高效率。本發(fā)明中需要根據(jù)新解殼程序的dex文件來(lái)修改該文件,申請(qǐng)dex文件所需要調(diào)用的各種服務(wù)的相關(guān)權(quán)限以及對(duì)應(yīng)的其它配置。
該改進(jìn)中,使用全局配置文件給dex賦予系統(tǒng)權(quán)限并定義相應(yīng)的配置可以靈活設(shè)置加固過(guò)程所需要的權(quán)限和配置,在保證加固效率的前提下提高了加固過(guò)程的安全性。
進(jìn)一步,所述s3中所述動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用的過(guò)程為:使用dexclassloader類(lèi)加載器動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)中的dex文件運(yùn)行android應(yīng)用。
具體的,對(duì)于android的應(yīng)用程序,本質(zhì)上雖然也是用java開(kāi)發(fā),并且使用標(biāo)準(zhǔn)的java編譯器編譯出class文件,但最終的apk文件中包含的卻是dex類(lèi)型的文件。dex文件是將所需的所有class文件重新打包,打包的規(guī)則不是簡(jiǎn)單的壓縮,而是完全對(duì)class文件內(nèi)部的各種函數(shù)表、變量表等進(jìn)行優(yōu)化,并產(chǎn)生一個(gè)新的文件,這就是dex文件。由于dex文件是一種經(jīng)過(guò)優(yōu)化的class文件,因此要加載這樣特殊的class文件就需要特殊的類(lèi)裝載器,dexclassloader類(lèi)就能很好的用于加載dex文件。
該改進(jìn)中,使用專(zhuān)門(mén)的類(lèi)加載器來(lái)動(dòng)態(tài)加載dex文件,使android應(yīng)用的運(yùn)行的出錯(cuò)概率小,提高了android應(yīng)用運(yùn)行的穩(wěn)定性。
進(jìn)一步,所述s1中所述加密算法包括:對(duì)稱(chēng)加密算法和非對(duì)稱(chēng)加密算法。
具體的,對(duì)稱(chēng)加密算法(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又叫傳統(tǒng)密碼算法,就是加密密鑰和解密密鑰是相同的,或者加密/解密密鑰能夠從解密/加密密鑰中推算出來(lái),所以也稱(chēng)這種加密算法為秘密密鑰算法或單密鑰算法。
對(duì)稱(chēng)加密算法的特點(diǎn)是算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。
非對(duì)稱(chēng)加密算法(asymmetriccryptographicalgorithm)又名“公開(kāi)密鑰加密算法”。非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。非對(duì)稱(chēng)加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開(kāi);得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專(zhuān)用密鑰對(duì)加密后的信息進(jìn)行解密。另一方面,甲方可以使用自己的私密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給乙方;乙方再用甲方的公鑰對(duì)加密后的信息進(jìn)行解密。
非對(duì)稱(chēng)密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴(lài)于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒(méi)有對(duì)稱(chēng)加密解密的速度快。對(duì)稱(chēng)密碼體制中只有一種密鑰,并且是非公開(kāi)的,如果要解密就得讓對(duì)方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對(duì)稱(chēng)密鑰體制有兩種密鑰,其中一個(gè)是公開(kāi)的,這樣就可以不需要像對(duì)稱(chēng)密碼那樣傳輸對(duì)方的密鑰了。這樣安全性就大了很多。
該改進(jìn)中,提供多種方式的加密算法可以根據(jù)不同的需求選擇使用,保證應(yīng)用加固目的的同時(shí)增加了適用范圍。
實(shí)施例2
如圖2所示,一種防止android應(yīng)用被反編譯的應(yīng)用加固系統(tǒng),所述系統(tǒng)包括:
加固模塊,用于將android應(yīng)用的源apk文件采用加密算法加密成解殼數(shù)據(jù),將得到的解殼數(shù)據(jù)與預(yù)設(shè)的解殼程序的dex文件合并后得到新解殼程序的dex文件,并在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段;
配置模塊,用于根據(jù)新解殼程序的dex文件修改源apk文件的資源配置文件后,用源apk文件的資源配置文件替換新解殼程序的資源配置文件,并用源apk文件的資源文件替換與新解殼程序相對(duì)應(yīng)的資源文件;
運(yùn)行模塊,用于讀取新解殼文件的dex文件末尾字段獲取解殼數(shù)據(jù)長(zhǎng)度,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù),用與加固模塊中的加密算法對(duì)應(yīng)的解密算法解密得到解殼數(shù)據(jù)保存在內(nèi)存中,動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)運(yùn)行android應(yīng)用。
具體的,由于android系統(tǒng)支持的應(yīng)用格式主要以apk文件形式存在,應(yīng)用的主要邏輯實(shí)現(xiàn)在apk文件中的classes.dex文件中,因此,對(duì)classes.dex文件的保護(hù)是保護(hù)整個(gè)apk文件安全的關(guān)鍵所在。為此本發(fā)明采取相應(yīng)的加密方式隱藏源程序classes.dex文件中的實(shí)現(xiàn)邏輯,并且不影響程序的正常運(yùn)行,對(duì)用戶(hù)保證加固的透明性。
本發(fā)明中的android應(yīng)用進(jìn)行安全加固后,能夠防止app被惡意反編譯獲取到重要數(shù)據(jù),保護(hù)使用者和開(kāi)發(fā)者的權(quán)益;且在不影響合法應(yīng)用便利的前提下,能對(duì)任意應(yīng)用進(jìn)行安全加固,同時(shí)能夠保證應(yīng)用的安全性,從而保證android系統(tǒng)健康平穩(wěn)的發(fā)展。
進(jìn)一步,所述加固模塊還用于在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段后,修改新解殼程序的dex文件的文件頭信息;所述文件頭信息包括:文件檢驗(yàn)碼、唯一性驗(yàn)證算法和dex文件尺寸信息;
所述運(yùn)行模塊還用于根據(jù)文件頭信息驗(yàn)證新解殼程序dex文件后,根據(jù)解殼數(shù)據(jù)長(zhǎng)度讀取解殼數(shù)據(jù)。
具體的,文件頭信息中的文件檢驗(yàn)碼(字段名:checksum)用于檢查文件錯(cuò)誤;唯一性驗(yàn)證算法(字段名:signature)用于識(shí)別文件的唯一性;dex文件尺寸信息(字段名:file_size)表示dex文件的大小。
由于需要將一個(gè)文件(加密之后的源apk文件)寫(xiě)入到dex中,就需要修改文件校驗(yàn)碼(checksum)。因?yàn)樗糜跈z查文件是否有錯(cuò)誤。同理需要修改唯一性驗(yàn)證算法(字段名:signature)和dex文件的大小(字段名:file_size)。
由于在脫殼的時(shí)候,需要知道apk文件的大小,才能正確的得到apk文件,因此需要在新解殼程序的dex文件末尾加入表示解殼數(shù)據(jù)長(zhǎng)度的字段。
該改進(jìn)中,使用解殼數(shù)據(jù)長(zhǎng)度字段標(biāo)記解殼數(shù)據(jù)的大小,方便的進(jìn)行解殼得到正確的apk文件,同時(shí)使用頭文件來(lái)驗(yàn)證文件的正確性和唯一性,保證了加固過(guò)程中的數(shù)據(jù)正確率并能保證文件的唯一性,提高安全性。
進(jìn)一步,所述配置模塊還用于根據(jù)新解殼程序的dex文件修改用于權(quán)限申請(qǐng)和定義配置的androidmanifest.xml文件。
具體的,androidmanifest.xml文件是android系統(tǒng)中重要的權(quán)限申請(qǐng)和定義配置文件,在開(kāi)發(fā)時(shí)需要通過(guò)其來(lái)向系統(tǒng)預(yù)先定義和申請(qǐng)應(yīng)用程序運(yùn)行所需要的權(quán)限,是每個(gè)android程序中必須的文件,位于整個(gè)項(xiàng)目的根目錄,靈活、安全地使用該配置文件可以大大提高效率。本發(fā)明中需要根據(jù)新解殼程序的dex文件來(lái)修改該文件,申請(qǐng)dex文件所需要調(diào)用的各種服務(wù)的相關(guān)權(quán)限以及對(duì)應(yīng)的其它配置。
該改進(jìn)中,使用全局配置文件給dex賦予系統(tǒng)權(quán)限并定義相應(yīng)的配置可以靈活設(shè)置加固過(guò)程所需要的權(quán)限和配置,在保證加固效率的前提下提高了加固過(guò)程的安全性。
進(jìn)一步,所述運(yùn)行模塊還用于使用dexclassloader類(lèi)加載器加載器動(dòng)態(tài)加載內(nèi)存中的解殼數(shù)據(jù)中的dex文件運(yùn)行android應(yīng)用。
具體的,對(duì)于android的應(yīng)用程序,本質(zhì)上雖然也是用java開(kāi)發(fā),并且使用標(biāo)準(zhǔn)的java編譯器編譯出class文件,但最終的apk文件中包含的卻是dex類(lèi)型的文件。dex文件是將所需的所有class文件重新打包,打包的規(guī)則不是簡(jiǎn)單的壓縮,而是完全對(duì)class文件內(nèi)部的各種函數(shù)表、變量表等進(jìn)行優(yōu)化,并產(chǎn)生一個(gè)新的文件,這就是dex文件。由于dex文件是一種經(jīng)過(guò)優(yōu)化的class文件,因此要加載這樣特殊的class文件就需要特殊的類(lèi)裝載器,dexclassloader類(lèi)就能很好的用于加載dex文件。
該改進(jìn)中,使用專(zhuān)門(mén)的類(lèi)加載器來(lái)動(dòng)態(tài)加載dex文件,使android應(yīng)用的運(yùn)行的出錯(cuò)概率小,提高了android應(yīng)用運(yùn)行的穩(wěn)定性。
進(jìn)一步,所述加固模塊中所述加密算法包括:對(duì)稱(chēng)加密算法和非對(duì)稱(chēng)加密算法。
具體的,對(duì)稱(chēng)加密算法(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又叫傳統(tǒng)密碼算法,就是加密密鑰和解密密鑰是相同的,或者加密/解密密鑰能夠從解密/加密密鑰中推算出來(lái),所以也稱(chēng)這種加密算法為秘密密鑰算法或單密鑰算法。
對(duì)稱(chēng)加密算法的特點(diǎn)是算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。
非對(duì)稱(chēng)加密算法(asymmetriccryptographicalgorithm)又名“公開(kāi)密鑰加密算法”。非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。非對(duì)稱(chēng)加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過(guò)程是:甲方生成一對(duì)密鑰并將其中的一把作為公用密鑰向其它方公開(kāi);得到該公用密鑰的乙方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專(zhuān)用密鑰對(duì)加密后的信息進(jìn)行解密。另一方面,甲方可以使用自己的私密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給乙方;乙方再用甲方的公鑰對(duì)加密后的信息進(jìn)行解密。
非對(duì)稱(chēng)密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴(lài)于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒(méi)有對(duì)稱(chēng)加密解密的速度快。對(duì)稱(chēng)密碼體制中只有一種密鑰,并且是非公開(kāi)的,如果要解密就得讓對(duì)方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對(duì)稱(chēng)密鑰體制有兩種密鑰,其中一個(gè)是公開(kāi)的,這樣就可以不需要像對(duì)稱(chēng)密碼那樣傳輸對(duì)方的密鑰了。這樣安全性就大了很多。
該改進(jìn)中,提供多種方式的加密算法可以根據(jù)不同的需求選擇使用,保證應(yīng)用加固目的的同時(shí)增加了適用范圍。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。