一種Android平臺應(yīng)用程序保護(hù)的加脫殼方法
【專利摘要】本發(fā)明揭示了一種Android平臺應(yīng)用程序保護(hù)的加脫殼方法,面向Android平臺應(yīng)用程序原可執(zhí)行文件的加殼步驟和脫殼步驟兩部分,其中加殼步驟為利用外置的加殼工具對原可執(zhí)行文件的文件格式結(jié)構(gòu)進(jìn)行分析并加密源程序?yàn)閹?shù)據(jù);脫殼步驟為應(yīng)用程序運(yùn)行前在移動終端的內(nèi)存中優(yōu)先加載并運(yùn)行脫殼程序,對帶殼數(shù)據(jù)進(jìn)行源程序解密后將原可執(zhí)行文件加載至內(nèi)存中正常運(yùn)行。應(yīng)用本發(fā)明加脫殼的技術(shù)方案,為Android平臺下的應(yīng)用加脫殼提出了創(chuàng)新的思路和可行的技術(shù)解決途徑,可用于對移動平臺可執(zhí)行文件進(jìn)行保護(hù),防止程序被反編譯等黑客手段攻擊,保護(hù)商業(yè)軟件的機(jī)密性、保護(hù)用戶應(yīng)用安全。
【專利說明】—種Android平臺應(yīng)用程序保護(hù)的加脫殼方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種移動平臺特別是Android平臺應(yīng)用程序加殼脫殼方法設(shè)計(jì),綜合利用軟件編程技術(shù)、程序分析技術(shù)、網(wǎng)絡(luò)服務(wù)技術(shù)加密解密技術(shù)及移動通訊技術(shù)實(shí)現(xiàn)。
【背景技術(shù)】
[0002]在一些計(jì)算機(jī)軟件里有一段專門負(fù)責(zé)保護(hù)軟件不被非法修改或反編譯的程序。它們一般都是先于程序運(yùn)行拿到控制權(quán),然后完成它們保護(hù)軟件的任務(wù)。就像動植物的殼一般都是在身體外面一樣理所當(dāng)然(但后來也出現(xiàn)了所謂的“殼中帶籽”的殼)。由于這段程序和自然界的殼在功能上有很多相同的地方,基于命名的規(guī)則,大家就把這樣的程序稱為“殼”了。就像計(jì)算機(jī)病毒和自然界的病毒一樣,其實(shí)都是命名上的方法罷了。從功能上抽象,軟件的殼和自然界中的殼相差無幾。無非是保護(hù)、隱蔽殼內(nèi)的東西。
[0003]從技術(shù)的角度出發(fā),殼是一段執(zhí)行于原始程序前的代碼。原始程序的代碼在加殼的過程中可能被壓縮、加密。當(dāng)加殼后的文件執(zhí)行時,這段代碼先于原始程序運(yùn)行,它把壓縮、加密后的代碼還原成原始程序代碼,然后再把執(zhí)行權(quán)交還給原始代碼。軟件的殼分為加密殼、壓縮殼、偽裝殼、多層殼等類,目的都是為了隱藏程序真正的OEP (入口點(diǎn),防止被破解)。
[0004]程序員編好軟件后,編譯成可執(zhí)行文件。1.有一些版權(quán)信息需要保護(hù)起來,不想讓別人隨便改動,如作者的姓名,即為了保護(hù)軟件不被破解,通常都是采用加殼來進(jìn)行保護(hù)。
2.需要把程序搞的小一點(diǎn),從而方便使用。于是,需要用到一些軟件,它們能將可執(zhí)行文件壓縮。3.在黑客界給木馬等軟件加殼脫殼以躲避殺毒軟件。實(shí)現(xiàn)上述功能,這些軟件稱為加殼軟件。
[0005]加殼的程序可以有效阻止對程序的反匯編分析,以保護(hù)軟件版權(quán),防止被軟件破解。
[0006]PC平臺現(xiàn)在已存在大量標(biāo)準(zhǔn)化的加殼和解殼工具,加殼一般屬于軟件加密,脫殼一般分手動和自動兩種,手動就是用TRW2000、TR、S0FTICE等調(diào)試工具對付,對脫殼者有一定水平要求,涉及到很多匯編語言和軟件調(diào)試方面的知識。而自動就是用專門的脫殼工具來脫,最常用某種壓縮軟件都有他人寫的反壓縮工具對應(yīng),有些壓縮工具自身能解壓,如UPX ;有些不提供這功能,如:ASPACK,就需要UNASPACK對付。好處是簡單,缺點(diǎn)是版本更新了就沒用了。另外脫殼就是用專門的脫殼工具來對付,最流行的是PROCDUMP vl.62,可對付目前各種壓縮軟件的壓縮檔。通常,只要知道文件的加密方式,就可以使用不同的工具、不同的方法進(jìn)行脫殼。以下是業(yè)界常常會碰到的加殼方式及簡單的脫殼措施,僅供參考:脫殼的基本原則就是單步跟蹤,只能往前,不能往后。脫殼的一般流程是:查殼一尋找OEP — Dump —修復(fù),找OEP的一般思路如下:先看殼是加密殼還是壓縮殼,壓縮殼相對來說容易些,一般是沒有異常,找到對應(yīng)的popad后就能到入口。當(dāng)知道文件被一些壓縮加殼軟件加密,下一步就要分析加密軟件的名稱、版本。因?yàn)椴煌浖踔敛煌姹炯拥臍ぃ摎ぬ幚淼姆椒ǘ疾幌嗤?。[0007]但是Android作為新興移動平臺還未出現(xiàn)apk加殼工具。Android的Dex文件大量應(yīng)用推廣給加殼帶來了 一定的難度,但是從技術(shù)角度來看,Android apk加殼脫殼也是可行的,并且隨著應(yīng)用的不斷延伸必要性不斷體現(xiàn)。
【發(fā)明內(nèi)容】
[0008]針對當(dāng)前Android平臺應(yīng)用程序保護(hù)方面的不足,本發(fā)明的目的旨在提出一種Android平臺應(yīng)用程序保護(hù)的加脫殼方法,安全推進(jìn)該平臺應(yīng)用的發(fā)展。
[0009]本發(fā)明的上述目的,其得以實(shí)現(xiàn)的技術(shù)解決方案為:一種Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述加脫殼方法包括面向Android平臺應(yīng)用程序原可執(zhí)行文件的加殼步驟和脫殼步驟兩部分,其中所述加殼步驟為利用外置的加殼工具對原可執(zhí)行文件的文件格式結(jié)構(gòu)進(jìn)行分析并加密源程序?yàn)閹?shù)據(jù);所述脫殼步驟為應(yīng)用程序運(yùn)行前在移動終端的內(nèi)存中優(yōu)先加載并運(yùn)行脫殼程序,對帶殼數(shù)據(jù)進(jìn)行源程序解密后將原可執(zhí)行文件加載至內(nèi)存中正常運(yùn)行。
[0010]進(jìn)一步地,所述脫殼程序與帶殼數(shù)據(jù)相分離且脫殼程序存儲于云端服務(wù)器,在移動終端運(yùn)行應(yīng)用程序前直接動態(tài)加載脫殼程序至內(nèi)存并運(yùn)行,對帶殼數(shù)據(jù)進(jìn)行源程序解
LU O
[0011]進(jìn)一步地,所述脫殼程序與帶殼數(shù)據(jù)通過外置的加殼工具組裝成脫殼程序dex文件,在移動終端運(yùn)行應(yīng)用程序前先在內(nèi)存中運(yùn)行脫殼程序部分,對帶殼數(shù)據(jù)進(jìn)行源程序解
LU O
[0012]更進(jìn)一步地,所述脫殼程序與帶殼數(shù)據(jù)的一種組裝方式為,將帶殼數(shù)據(jù)寫入脫殼程序dex文件末尾,并再在文件尾部添加帶殼數(shù)據(jù)的長度,根據(jù)所組裝的帶殼數(shù)據(jù)修改脫殼程序dex文件頭中checksum、signature和file_size的信息,最后修改源程序中AndroidMainfest.xml文件并覆蓋脫殼程序的同名文件。
[0013]更進(jìn)一步地,所述脫殼程序與帶殼數(shù)據(jù)的一種組裝方式為,先計(jì)算帶殼數(shù)據(jù)長度,在脫殼程序dex文件對應(yīng)位置0X70處添加帶殼數(shù)據(jù)長度,并繼續(xù)添加帶殼數(shù)據(jù)至文件尾部;根據(jù)所組裝的帶殼數(shù)據(jù)修改脫殼程序dex文件頭中checksum、signature、file_size、header_size、string_ids_off> type_ids_off> proto_ids_off> fiele_ids_off> method_ids_off> class_ids_off和data_off的信息,分析map_ofT數(shù)據(jù)并修改數(shù)據(jù)偏移量,最后修改源程序中AndroidMainfest.xml文件并覆蓋脫殼程序的同名文件。
[0014]應(yīng)用本發(fā)明加脫殼的技術(shù)方案,為Android平臺下的應(yīng)用加脫殼提出了創(chuàng)新的思路和可行的技術(shù)解決途徑,可用于對移動平臺可執(zhí)行文件進(jìn)行保護(hù),防止程序被反編譯等黑客手段攻擊,保護(hù)商業(yè)軟件的機(jī)密性、保護(hù)用戶應(yīng)用安全。
【專利附圖】
【附圖說明】
[0015]圖1為本發(fā)明加脫殼方法一種脫殼程序外載實(shí)施方式的流程框圖。
[0016]圖2為本發(fā)明加脫殼方法脫殼程序內(nèi)載實(shí)施的一種方式流程框圖。
[0017]圖3為本發(fā)明加脫殼方法脫殼程序內(nèi)載實(shí)施的另一種方式流程框圖。
【具體實(shí)施方式】[0018]本發(fā)明針對移動平臺應(yīng)用程序的安全問題,提出了一種對應(yīng)用程序動態(tài)加脫殼的方法,完善面向移動平臺應(yīng)用程序加殼脫殼的方案集。
[0019]從本發(fā)明的概括方案來看,該加脫殼方法包括面向Android平臺應(yīng)用程序原可執(zhí)行文件的加殼步驟和脫殼步驟兩部分,其中加殼步驟為利用外置的加殼工具對原可執(zhí)行文件的文件格式結(jié)構(gòu)進(jìn)行分析并加密源程序?yàn)閹?shù)據(jù);脫殼步驟為應(yīng)用程序運(yùn)行前在移動終端的內(nèi)存中優(yōu)先加載并運(yùn)行脫殼程序,對帶殼數(shù)據(jù)進(jìn)行源程序解密后將原可執(zhí)行文件加載至內(nèi)存中正常運(yùn)行。雖然從形式上看與前述傳統(tǒng)加脫殼技術(shù)相近似,但實(shí)質(zhì)上本發(fā)明加脫殼方法所針對的是Android平臺下的應(yīng)用程序,即.apk文件所做的加殼與脫殼,其過程方法和代碼編譯方面是全新的探索與突破,而且所加的殼為一種自定義加密算法的加密殼。
[0020]而且,上述本發(fā)明加脫殼方法對該方法過程中加殼器、脫殼器的具體方式提供了多方面、完善的技術(shù)解決方案。要理解本發(fā)明的上述方案,首先需要分析Android可執(zhí)行文件dex的文件結(jié)構(gòu)。Dex文件頭(File Header)主要包括校驗(yàn)和以及其它結(jié)構(gòu)的偏移地址和長度信息,如下表所示
【權(quán)利要求】
1.一種Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述加脫殼方法包括面向Android平臺應(yīng)用程序原可執(zhí)行文件的加殼步驟和脫殼步驟兩部分,其中所述加殼步驟為利用外置的加殼工具對原可執(zhí)行文件的文件格式結(jié)構(gòu)進(jìn)行分析并加密源程序?yàn)閹?shù)據(jù);所述脫殼步驟為應(yīng)用程序運(yùn)行前在移動終端的內(nèi)存中優(yōu)先加載并運(yùn)行脫殼程序,對帶殼數(shù)據(jù)進(jìn)行源程序解密后將原可執(zhí)行文件加載至內(nèi)存中正常運(yùn)行。
2.根據(jù)權(quán)利要求1所述Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述脫殼程序與帶殼數(shù)據(jù)相分離且脫殼程序存儲于云端服務(wù)器,在移動終端運(yùn)行應(yīng)用程序前直接動態(tài)加載脫殼程序至內(nèi)存并運(yùn)行,對帶殼數(shù)據(jù)進(jìn)行源程序解密。
3.根據(jù)權(quán)利要求1所述Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述脫殼程序與帶殼數(shù)據(jù)通過外置的加殼工具組裝成脫殼程序dex文件,在移動終端運(yùn)行應(yīng)用程序前先在內(nèi)存中運(yùn)行脫殼程序部分,對帶殼數(shù)據(jù)進(jìn)行源程序解密。
4.根據(jù)權(quán)利要求3所述Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述脫殼程序與帶殼數(shù)據(jù)的一種組裝方式為,將帶殼數(shù)據(jù)寫入脫殼程序dex文件末尾,并再在文件尾部添加帶殼數(shù)據(jù)的長度,根據(jù)所組裝的帶殼數(shù)據(jù)修改脫殼程序dex文件頭中checksum、signature 和 file_size 的信息,最后修改源程序中 AndroidMainfest.xml 文件并覆蓋脫殼程序的同名文件。
5.根據(jù)權(quán)利要求3所述Android平臺應(yīng)用程序保護(hù)的加脫殼方法,其特征在于:所述脫殼程序與帶殼數(shù)據(jù)的一種組裝方式為,先計(jì)算帶殼數(shù)據(jù)長度,在脫殼程序dex文件對應(yīng)位置0X70處添加帶殼數(shù)據(jù)長度,并繼續(xù)添加帶殼數(shù)據(jù)至文件尾部;根據(jù)所組裝的帶殼數(shù)據(jù)修改脫殼程序 dex 文件頭中 checksum、signature、file_size、header_size、string_ids_off>type_ids_off>proto_ids_off> fiele_ids_off>method_ids_off> class_ids_off和data_off的信息,分析map_off數(shù)據(jù)并修改數(shù)據(jù)偏移量,最后修改源程序中AndroidMainfest.xml文件并覆蓋脫殼程序的同名文件。
【文檔編號】G06F21/14GK103530535SQ201310511607
【公開日】2014年1月22日 申請日期:2013年10月25日 優(yōu)先權(quán)日:2013年10月25日
【發(fā)明者】汪德嘉, 宋超 申請人:蘇州通付盾信息技術(shù)有限公司