本發(fā)明涉及移動(dòng)互聯(lián)網(wǎng)應(yīng)用技術(shù)領(lǐng)域,尤指一種應(yīng)用程序優(yōu)化方法、裝置及系統(tǒng)。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的發(fā)展,帶動(dòng)了線上到線下(Online To Offline,O2O)市場的發(fā)展,從而引發(fā)了移動(dòng)應(yīng)用程序(APP)的開發(fā)熱潮。許多開發(fā)人員熱衷于APP逆向工程,他們希望從逆向的角度去優(yōu)化移動(dòng)終端的系統(tǒng)或應(yīng)用,比如,網(wǎng)際操作系統(tǒng)(iOS)或安卓(Android)操作系統(tǒng)。
現(xiàn)有技術(shù)中優(yōu)化應(yīng)用程序的方法有插件應(yīng)用(Logos Tweak,簡稱tweak)方法。其原理如圖1所示,該方法需要在終端設(shè)備的操作系統(tǒng)上安裝一個(gè)tweak插件,可以鉤子(hook)系統(tǒng)的函數(shù)并加入自定義代碼,達(dá)到優(yōu)化系統(tǒng)或應(yīng)用程序的目的。Tweak方式需要以一個(gè)允許第三方開發(fā)者在運(yùn)行時(shí)進(jìn)行代碼替換擴(kuò)展操作系統(tǒng)的框架為基礎(chǔ),比如:MobieSubstrate框架。
該方法需要配置好Logos Tweak的開發(fā)環(huán)境,然后編寫tweak的代碼,代碼的主要內(nèi)容是通過hook鉤住APP的某個(gè)函數(shù)方法,并向其中添加自定義代碼,當(dāng)APP執(zhí)行到這個(gè)方法時(shí),便能按照已添加的代碼來運(yùn)控制程序的運(yùn)行。為了獲得其他APP的函數(shù)入口,需要利用頭文件導(dǎo)出工具(比如class-dump)導(dǎo)出APP的頭文件(.h文件),通過分析并多次嘗試,確定要hook的函數(shù),才能實(shí)現(xiàn)對APP的優(yōu)化。
這種方式需要在操作系統(tǒng)上預(yù)安裝Logos Tweak,這相當(dāng)于是一個(gè)沒有圖標(biāo)的APP,安裝后才能編寫優(yōu)化其他APP,實(shí)現(xiàn)起來比較麻煩;而且這種方式需要對待優(yōu)化的APP進(jìn)行繁瑣的分析,由于目前的移動(dòng)應(yīng)用比較復(fù)雜,包含大量的頭文件從這些頭文件中分析出需要的函數(shù)是一個(gè)耗時(shí)的過程。
由此可見,現(xiàn)有技術(shù)中用于實(shí)現(xiàn)對操作系統(tǒng)中安裝的APP進(jìn)行優(yōu)化的方式,其操作復(fù)雜,需要預(yù)安裝用于優(yōu)化的APP,且優(yōu)化過程中的分析操作繁復(fù),費(fèi)時(shí)費(fèi)力。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種應(yīng)用程序優(yōu)化方法、裝置及系統(tǒng),用以解決現(xiàn)有技術(shù)中存在的應(yīng)用程序優(yōu)化時(shí)操作復(fù)雜,分析繁復(fù),費(fèi)時(shí)費(fèi)力的問題。
一方面,本發(fā)明實(shí)施例提供了一種應(yīng)用程序優(yōu)化方法,包括:
應(yīng)用程序優(yōu)化方法,其特征在于,包括:
獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包,從所述應(yīng)用程序安裝包中獲取用于應(yīng)用程序安裝的可執(zhí)行文件;
將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到所述可執(zhí)行文件中;
在所述可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件;
對包含所述動(dòng)態(tài)庫和所述新描述文件的可執(zhí)行文件進(jìn)行重新簽名;
將重新簽名后的可執(zhí)行文件進(jìn)行打包,得到優(yōu)化后的應(yīng)用程序安裝包;所述優(yōu)化后的應(yīng)用程序安裝包用于在移動(dòng)終端上安裝優(yōu)化后的應(yīng)用程序。
在一些可選的實(shí)施例中,所述將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到所述可執(zhí)行文件中,具體包括:
根據(jù)動(dòng)態(tài)庫的存儲(chǔ)路徑,獲取預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫;
根據(jù)可執(zhí)行文件的存儲(chǔ)路徑,使用命令庫中加載類的加載動(dòng)態(tài)庫命令,將獲取的所述動(dòng)態(tài)庫注入到可執(zhí)行文件的存儲(chǔ)路徑下的可執(zhí)行文件中。
在一些可選的實(shí)施例中,在所述可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件,具體包括:
創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)APPID的新描述文件;
用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件。
在一些可選的實(shí)施例中,對包含所述動(dòng)態(tài)庫和所述新描述文件的可執(zhí)行文件進(jìn)行重新簽名,具體包括:
讀取應(yīng)用程序信息文件,獲取應(yīng)用程序的唯一標(biāo)識(shí)串bundleID和新開發(fā)證書的組標(biāo)識(shí)taemID;
構(gòu)造一個(gè)以應(yīng)用唯一標(biāo)識(shí)application-identifier和開發(fā)團(tuán)隊(duì)標(biāo)識(shí)com.apple.developer.team-identifier為鍵,以bundleID和teamID為值的字典;
將構(gòu)造的字典寫入代碼簽名文件中;
使用簽名命令對代碼簽名文件進(jìn)行重新簽名,完成對可執(zhí)行文件的重新簽名。
在一些可選的實(shí)施例中,在個(gè)人計(jì)算機(jī)上使用集成開發(fā)工具Xcode創(chuàng)建所述動(dòng)態(tài)庫。
本發(fā)明實(shí)施例還提供一種應(yīng)用程序優(yōu)化裝置,包括:
獲取模塊,用于獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包,從所述應(yīng)用程序安裝包中獲取用于應(yīng)用程序安裝的可執(zhí)行文件;
注入模塊,用于將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到所述可執(zhí)行文件中;
替換模塊,用于在所述可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件;
簽名模塊,用于對包含所述動(dòng)態(tài)庫和所述新描述文件的可執(zhí)行文件進(jìn)行重新簽名;
打包模塊,用于將重新簽名后的可執(zhí)行文件進(jìn)行打包,得到優(yōu)化后的應(yīng)用程序安裝包;所述優(yōu)化后的應(yīng)用程序安裝包用于在移動(dòng)終端上安裝優(yōu)化后的應(yīng)用程序。
在一些可選的實(shí)施例中,所述注入模塊,具體用于:
根據(jù)動(dòng)態(tài)庫的存儲(chǔ)路徑,獲取預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫;
根據(jù)可執(zhí)行文件的存儲(chǔ)路徑,使用命令庫中加載類的加載動(dòng)態(tài)庫命令,將獲取的所述動(dòng)態(tài)庫注入到可執(zhí)行文件的存儲(chǔ)路徑下的可執(zhí)行文件中。
在一些可選的實(shí)施例中,所述替換模塊,具體用于:
創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)APPID的新描述文件;
用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件。
在一些可選的實(shí)施例中,所述簽名模塊,具體用于:
讀取應(yīng)用程序信息文件,獲取應(yīng)用程序的唯一標(biāo)識(shí)串bundleID和新開發(fā)證書的組標(biāo)識(shí)taemID;
構(gòu)造一個(gè)以應(yīng)用唯一標(biāo)識(shí)application-identifier和開發(fā)團(tuán)隊(duì)標(biāo)識(shí)com.apple.developer.team-identifier為鍵,以bundleID和teamID為值的字典;
將構(gòu)造的字典寫入代碼簽名文件中;
使用簽名命令對代碼簽名文件進(jìn)行重新簽名,完成對可執(zhí)行文件的重新簽名。
本發(fā)明實(shí)施例還提供一種應(yīng)用程序優(yōu)化系統(tǒng),包括:移動(dòng)終端和個(gè)人計(jì)算機(jī);
所述個(gè)人計(jì)算機(jī)中包括上述的應(yīng)用程序優(yōu)化裝置;
所述移動(dòng)終端,用于安裝所述優(yōu)化后的應(yīng)用程序安裝包。
上述技術(shù)方案具有如下有益效果:對應(yīng)用程序安裝包中的可執(zhí)行文件添加動(dòng)態(tài)庫,并重新嵌入描述文件,重新簽名打包,得到新的應(yīng)用程序安裝包,該方法在不需要在終端設(shè)備操作系統(tǒng)上安裝優(yōu)化APP的情況下,實(shí)現(xiàn)對所要安裝的APP的優(yōu)化,其實(shí)現(xiàn)過程簡單方便,無需對應(yīng)用程序進(jìn)行繁復(fù)的分析操作,省時(shí)省力,通用性強(qiáng)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有技術(shù)中應(yīng)用程序優(yōu)化方法的原理示意圖;
圖2是本發(fā)明實(shí)施例一中應(yīng)用程序優(yōu)化方法的流程圖;
圖3是本發(fā)明實(shí)施例二中應(yīng)用程序優(yōu)化方法的流程圖;
圖4是本發(fā)明實(shí)施例中應(yīng)用程序優(yōu)化系統(tǒng)的結(jié)構(gòu)示意圖;
圖5是本發(fā)明實(shí)施例中應(yīng)用程序優(yōu)化裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
為了解決現(xiàn)有技術(shù)中存在的應(yīng)用程序優(yōu)化時(shí),需要預(yù)安裝,分析繁復(fù),費(fèi)時(shí)費(fèi)力等問題,本發(fā)明實(shí)施例提供一種應(yīng)用程序優(yōu)化方法,能夠在不預(yù)安裝APP的情況下實(shí)現(xiàn)對應(yīng)用程序的優(yōu)化,且實(shí)現(xiàn)簡單、方便,通用性強(qiáng)。本發(fā)明方法主要包括生成動(dòng)態(tài)庫Dylib、動(dòng)態(tài)庫注入到APP中、在APP中嵌入描述文件(Moibleprovision)、對APP重新簽名和打包成新的安裝包,比如蘋果應(yīng)用程序文件(iPhoneApplication,IPA)等幾個(gè)處理步驟。下面通過具體的實(shí)施例進(jìn)行詳細(xì)描述。
實(shí)施例一
本發(fā)明實(shí)施例一提供的應(yīng)用程序優(yōu)化方法,其流程如圖2所示,包括如下步驟:
步驟S101:獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包。
獲取待優(yōu)化的應(yīng)用程序安裝包,對獲取的應(yīng)用程序安裝包進(jìn)行轉(zhuǎn)換或解壓,比如IPA包,是一個(gè)以ipa為后綴名的文件,實(shí)際上一個(gè)壓縮包(zip包),可以將其轉(zhuǎn)換成zip并解壓,以便得到其中包含的可執(zhí)行文件,轉(zhuǎn)換或解壓失敗流程將被終止。
步驟S102:從應(yīng)用程序安裝包中獲取用于應(yīng)用程序安裝的可執(zhí)行文件。
從應(yīng)用程序安裝包解壓后的文件夾中獲取出可執(zhí)行文件。
步驟S103:將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到可執(zhí)行文件中。
動(dòng)態(tài)庫可以在個(gè)人計(jì)算機(jī)上預(yù)先生成,動(dòng)態(tài)庫(Dylib)是用來承載自定義代碼的工具,需要在Mac OS X平臺(tái)的集成開發(fā)工具(Xcode)中編碼并生成。使用Xcode創(chuàng)建動(dòng)態(tài)庫Dylib,點(diǎn)擊文件新項(xiàng)目(File-new-Project)命令便能創(chuàng)建Dylib類型的程序文件。生成Dylib后,需要將Dylib注入到應(yīng)用程序的可執(zhí)行文件中,使得在應(yīng)用程序運(yùn)行過程中能夠調(diào)用Dylib。
在可執(zhí)行文件中注入動(dòng)態(tài)庫時(shí),從動(dòng)態(tài)庫的存儲(chǔ)路徑中獲取預(yù)先生成的動(dòng)態(tài)庫,將其注入到可執(zhí)行文件存儲(chǔ)路徑下存儲(chǔ)的可執(zhí)行文件中,可以使用命令庫中加載類的加載動(dòng)態(tài)庫命令實(shí)現(xiàn)。
步驟S104:在可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件。
為了能夠讓移動(dòng)終端安裝應(yīng)用程序,需要將新的描述文件嵌入到應(yīng)用程序中。此時(shí),創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)(APP ID)的新描述文件,用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件,實(shí)現(xiàn)將新的描述書文件嵌入到應(yīng)用程序中。
步驟S105:對包含動(dòng)態(tài)庫和新描述文件的可執(zhí)行文件進(jìn)行重新簽名。
為了與嵌入的描述文件相對應(yīng),應(yīng)該對應(yīng)用程序重新簽名,需要一份新的證書和生成新的代碼簽名文件(application-identifier entitlements)。若是企業(yè)版開發(fā)證書,則該應(yīng)用程序可在所有移動(dòng)終端上都能安裝。
步驟S106:將重新簽名后的可執(zhí)行文件進(jìn)行打包,得到優(yōu)化后的應(yīng)用程序安裝包。其中,優(yōu)化后的應(yīng)用程序安裝包用于在移動(dòng)終端上安裝優(yōu)化后的應(yīng)用程序。
使用文件壓縮(比如zip)命令,將應(yīng)用程序文件夾進(jìn)行壓縮,將其壓縮成新的安裝包,比如IPA格式的新的安裝包。應(yīng)用程序文件夾中可以包括新的執(zhí)行文件和從應(yīng)用程序安裝包中解壓出的其他文件。
實(shí)施例二
本發(fā)明實(shí)施例二提供上述應(yīng)用程序優(yōu)化的一種具體實(shí)現(xiàn)方法,其流程如圖3所示,包括如下步驟:
步驟S201:獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包。
步驟S202:對應(yīng)用程序安裝包進(jìn)行轉(zhuǎn)化和解壓。
應(yīng)用程序安裝包一般是一個(gè)壓縮后的文件,將壓縮文件進(jìn)行轉(zhuǎn)化和解壓后可以得到應(yīng)用程序的安裝文件。
步驟S203:獲取應(yīng)用程序安裝包中的可執(zhí)行文件。
從解壓后的應(yīng)用程序安裝文件夾中獲取其中的可執(zhí)行文件進(jìn)行后續(xù)優(yōu)化處理。
步驟S204:根據(jù)動(dòng)態(tài)庫的存儲(chǔ)路徑,獲取預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫。
步驟S205:根據(jù)可執(zhí)行文件的存儲(chǔ)路徑,使用命令庫中加載類的加載動(dòng)態(tài)庫命令,將獲取的動(dòng)態(tài)庫注入到可執(zhí)行文件的存儲(chǔ)路徑下的可執(zhí)行文件中。
將動(dòng)態(tài)庫Dylib注入到可執(zhí)行文件中,這個(gè)過程使用到命令庫(mach-o)框架中加載(loader)類的LC_LOAD_DYLIB和LC_LOAD_WEAK_DYLIB這兩個(gè)加載命令。注入成功之后,在個(gè)人計(jì)算機(jī)或移動(dòng)終端上進(jìn)入APP目錄中使用查看應(yīng)用程序安裝包動(dòng)態(tài)庫列表命令(otool-L)可以看到可執(zhí)行文件已經(jīng)包含了生成的Dylib文件。如果注入失敗,流程也會(huì)被終止。
其中,LC_LOAD_WEAK_DYLIB為加載指定動(dòng)態(tài)庫命令,如沒有找到,會(huì)立即停止程序;LC_LOAD_WEAK_DYLIB:加載指定動(dòng)態(tài)庫命令(可選),如沒有找到,也會(huì)繼續(xù)運(yùn)行。
步驟S204-步驟205實(shí)現(xiàn)將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到可執(zhí)行文件中。
步驟S206:創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)APPID的新描述文件。
描述文件是應(yīng)用程序開發(fā)必須具備的一個(gè)文件,其中包含對于開發(fā)證書、可安裝設(shè)備和APPID的描述。因此生成新的描述文件時(shí),也需要包含這些信息,生成的新的描述文件可以存儲(chǔ)在開發(fā)者中心或其他指定的存儲(chǔ)位置。
步驟S207:用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件。
從開發(fā)者中心或其他指定的存儲(chǔ)位置下載描述文件,然后將該描述文件替換APP目錄下的描述文件(比如embedded.mobileprovision文件)。
步驟S206-步驟207實(shí)現(xiàn)在可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件。
步驟S208:讀取應(yīng)用程序信息文件,獲取應(yīng)用程序的唯一標(biāo)識(shí)串(bundleID)和新開發(fā)證書的組標(biāo)識(shí)(taemID)。
對應(yīng)用程序進(jìn)行重新簽名也是優(yōu)化所必需的,通過讀取應(yīng)用程序信息文件,比如Info.plist文件,可以獲得APP的唯一標(biāo)識(shí)串(bundleID),獲取新證書的teamID,以便更新應(yīng)用程序的這些信息,使優(yōu)化的程序文件可用。
步驟S209:構(gòu)造一個(gè)以應(yīng)用唯一標(biāo)識(shí)(application-identifier)和開發(fā)團(tuán)隊(duì)標(biāo)識(shí)(com.apple.developer.team-identifier)為鍵,以bundleID和teamID為值的字典。
上述bundleID其實(shí)是應(yīng)用唯一標(biāo)識(shí)的一個(gè)具體的標(biāo)識(shí)符,teamID其實(shí)是是開發(fā)團(tuán)隊(duì)標(biāo)識(shí)的一個(gè)具體的標(biāo)識(shí)符。例如:在一個(gè)代碼簽名文件中,是這樣表示的:
application-identifier:bundleID
com.apple.developer.team-identifier:teamID
步驟S210:將構(gòu)造的字典寫入代碼簽名文件中。
步驟S211:使用簽名命令對代碼簽名文件進(jìn)行重新簽名,完成對可執(zhí)行文件的重新簽名。
通過對可執(zhí)行文件的重新簽名實(shí)現(xiàn)對應(yīng)用程序的重新簽名。使用簽名命令,比如codesign命令,對APP重新簽名。
步驟S212:將重新簽名后的可執(zhí)行文件與從應(yīng)用程序安裝包中解壓出的其他文件一起進(jìn)行轉(zhuǎn)化和壓縮,得到優(yōu)化后的應(yīng)用程序安裝包。
重新簽名應(yīng)用程序安裝文件中包含的可執(zhí)行文件后,將之前解壓得到的應(yīng)用程序文件夾壓縮成新的安裝包,比如IPA格式的安裝包。例如:可以通過輸入zip-qr命令來實(shí)現(xiàn)輸出新的應(yīng)用程序安裝包。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供一種應(yīng)用程序優(yōu)化系統(tǒng),其結(jié)構(gòu)如圖4所示,包括:移動(dòng)終端401和個(gè)人計(jì)算機(jī)402。移動(dòng)終端401和個(gè)人計(jì)算機(jī)403均可以設(shè)置不止一個(gè),可以根據(jù)需要設(shè)置多個(gè)。
移動(dòng)終端401,用于安裝優(yōu)化后的應(yīng)用程序安裝包。
個(gè)人計(jì)算機(jī)402中包括應(yīng)用程序優(yōu)化裝置403,用于獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包,從所述應(yīng)用程序安裝包中獲取用于應(yīng)用程序安裝的可執(zhí)行文件;將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到所述可執(zhí)行文件中;在所述可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件;對包含所述動(dòng)態(tài)庫和所述新描述文件的可執(zhí)行文件進(jìn)行重新簽名;將重新簽名后的可執(zhí)行文件進(jìn)行打包,得到優(yōu)化后的應(yīng)用程序安裝包;所述優(yōu)化后的應(yīng)用程序安裝包用于在移動(dòng)終端上安裝優(yōu)化后的應(yīng)用程序。
優(yōu)選的,上述個(gè)人計(jì)算機(jī)402,具體用于根據(jù)動(dòng)態(tài)庫的存儲(chǔ)路徑,獲取預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫;根據(jù)可執(zhí)行文件的存儲(chǔ)路徑,使用命令庫中加載類的加載動(dòng)態(tài)庫命令,將獲取的動(dòng)態(tài)庫注入到可執(zhí)行文件的存儲(chǔ)路徑下的可執(zhí)行文件中。
優(yōu)選的,上述個(gè)人計(jì)算機(jī)402,具體用于創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)APPID的新描述文件;用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件。
優(yōu)選的,上述個(gè)人計(jì)算機(jī)402,具體用于讀取應(yīng)用程序信息文件,獲取應(yīng)用程序的唯一標(biāo)識(shí)串bundleID和新開發(fā)證書的組標(biāo)識(shí)taemID;構(gòu)造一個(gè)以application-identifier和com.apple.developer.team-identifier為鍵,以bundleID和teamID為值的字典;將構(gòu)造的字典寫入代碼簽名文件中;使用簽名命令對代碼簽名文件進(jìn)行重新簽名,完成對可執(zhí)行文件的重新簽名。
優(yōu)選的,上述個(gè)人計(jì)算機(jī)402,具體用于使用Xcode創(chuàng)建所述動(dòng)態(tài)庫。
上述應(yīng)用程序優(yōu)化裝置,其結(jié)構(gòu)如圖5所示,包括:獲取模塊501、注入模塊502、替換模塊503、簽名模塊504和打包模塊505。
獲取模塊501,用于獲取待優(yōu)化的適用于移動(dòng)終端的應(yīng)用程序安裝包,從應(yīng)用程序安裝包中獲取用于應(yīng)用程序安裝的可執(zhí)行文件。
注入模塊502,用于將預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫,注入到可執(zhí)行文件中。
替換模塊503,用于在可執(zhí)行文件中嵌入用于替換原描述文件的新描述文件。
簽名模塊504,用于對包含所述動(dòng)態(tài)庫和所述新描述文件的可執(zhí)行文件進(jìn)行重新簽名。
打包模塊505,用于將重新簽名后的可執(zhí)行文件進(jìn)行打包,得到優(yōu)化后的應(yīng)用程序安裝包;其中,優(yōu)化后的應(yīng)用程序安裝包用于在移動(dòng)終端上安裝優(yōu)化后的應(yīng)用程序。
優(yōu)選的,上述注入模塊502,具體用于根據(jù)動(dòng)態(tài)庫的存儲(chǔ)路徑,獲取預(yù)先生成的用于承載自定義代碼工具的動(dòng)態(tài)庫;根據(jù)可執(zhí)行文件的存儲(chǔ)路徑,使用命令庫中加載類的加載動(dòng)態(tài)庫命令,將獲取的所述動(dòng)態(tài)庫注入到可執(zhí)行文件的存儲(chǔ)路徑下的可執(zhí)行文件中。
優(yōu)選的,上述替換模塊503,具體用于創(chuàng)建包括新開發(fā)證書、可安裝設(shè)備信息、應(yīng)用程序標(biāo)識(shí)APPID的新描述文件;用創(chuàng)建的新描述文件替換可執(zhí)行文件的存儲(chǔ)路徑下的原描述文件。
優(yōu)選的,上述簽名模504塊,具體用于讀取應(yīng)用程序信息文件,獲取應(yīng)用程序的唯一標(biāo)識(shí)串bundleID和新開發(fā)證書的組標(biāo)識(shí)taemID;構(gòu)造一個(gè)以application-identifier和com.apple.developer.team-identifier為鍵,以bundleID和teamID為值的字典;將構(gòu)造的字典寫入代碼簽名文件中;使用簽名命令對代碼簽名文件進(jìn)行重新簽名,完成對可執(zhí)行文件的重新簽名。
本發(fā)明實(shí)施例提供的上述應(yīng)用程序優(yōu)化方法、系統(tǒng)及裝置,對于適用于網(wǎng)際操作系統(tǒng)(IOS)系統(tǒng)的應(yīng)用程序優(yōu)化而言,通過自定義一個(gè)類似于小型APP的動(dòng)態(tài)庫,使用蘋果開發(fā)語言(Obiective-C)編寫,可以擴(kuò)展網(wǎng)際操作系統(tǒng)軟件開發(fā)工具包(iOS SDK)的控件來注入自定義代碼。除了需要手動(dòng)配置一些參數(shù),包括編寫動(dòng)態(tài)庫、導(dǎo)入、重新簽名、打包在內(nèi)的整個(gè)方法流程都可以在計(jì)算機(jī)操作系統(tǒng),比如蘋果電腦系統(tǒng)(MAC)環(huán)境下使用XCODE編譯后一鍵完成,無需依賴其他集成開發(fā)環(huán)境(IDE)和反編譯工具。
上述方法由于采用了動(dòng)態(tài)庫Dylib,自定義程度高;采用了命令庫(mach-o)框架中的加載動(dòng)態(tài)庫等命令,方便注入動(dòng)態(tài)庫;由于將動(dòng)態(tài)庫注入、嵌入新的描述證書、重新簽名和打包安裝包四大功能實(shí)現(xiàn)為計(jì)算機(jī)操作系統(tǒng),比如蘋果電腦系統(tǒng)(MAC OS X)下的一個(gè)自動(dòng)化工具,只要選擇好各文件即可一步生成新的安裝包,簡化了人工操作。該方法不需要在移動(dòng)終端上預(yù)安裝應(yīng)用程序,即可實(shí)現(xiàn)對移動(dòng)終端上的應(yīng)用程序優(yōu)化,也避免了繁瑣的分析步驟,簡化了操作,提高了速度和效率。
本領(lǐng)域技術(shù)人員還可以了解到本發(fā)明實(shí)施例列出的各種說明性邏輯塊(illustrative logical block),單元,和步驟可以通過電子硬件、電腦軟件,或兩者的結(jié)合進(jìn)行實(shí)現(xiàn)。為清楚展示硬件和軟件的可替換性(interchangeability),上述的各種說明性部件(illustrative components),單元和步驟已經(jīng)通用地描述了它們的功能。這樣的功能是通過硬件還是軟件來實(shí)現(xiàn)取決于特定的應(yīng)用和整個(gè)系統(tǒng)的設(shè)計(jì)要求。本領(lǐng)域技術(shù)人員可以對于每種特定的應(yīng)用,可以使用各種方法實(shí)現(xiàn)所述的功能,但這種實(shí)現(xiàn)不應(yīng)被理解為超出本發(fā)明實(shí)施例保護(hù)的范圍。
本發(fā)明實(shí)施例中所描述的各種說明性的邏輯塊,或單元都可以通過通用處理器,數(shù)字信號(hào)處理器,專用集成電路(ASIC),現(xiàn)場可編程門陣列或其它可編程邏輯裝置,離散門或晶體管邏輯,離散硬件部件,或上述任何組合的設(shè)計(jì)來實(shí)現(xiàn)或操作所描述的功能。通用處理器可以為微處理器,可選地,該通用處理器也可以為任何傳統(tǒng)的處理器、控制器、微控制器或狀態(tài)機(jī)。處理器也可以通過計(jì)算裝置的組合來實(shí)現(xiàn),例如數(shù)字信號(hào)處理器和微處理器,多個(gè)微處理器,一個(gè)或多個(gè)微處理器聯(lián)合一個(gè)數(shù)字信號(hào)處理器核,或任何其它類似的配置來實(shí)現(xiàn)。
本發(fā)明實(shí)施例中所描述的方法或算法的步驟可以直接嵌入硬件、處理器執(zhí)行的軟件模塊、或者這兩者的結(jié)合。軟件模塊可以存儲(chǔ)于RAM存儲(chǔ)器、閃存、ROM存儲(chǔ)器、EPROM存儲(chǔ)器、EEPROM存儲(chǔ)器、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM或本領(lǐng)域中其它任意形式的存儲(chǔ)媒介中。示例性地,存儲(chǔ)媒介可以與處理器連接,以使得處理器可以從存儲(chǔ)媒介中讀取信息,并可以向存儲(chǔ)媒介存寫信息。可選地,存儲(chǔ)媒介還可以集成到處理器中。處理器和存儲(chǔ)媒介可以設(shè)置于ASIC中,ASIC可以設(shè)置于用戶終端中??蛇x地,處理器和存儲(chǔ)媒介也可以設(shè)置于用戶終端中的不同的部件中。
在一個(gè)或多個(gè)示例性的設(shè)計(jì)中,本發(fā)明實(shí)施例所描述的上述功能可以在硬件、軟件、固件或這三者的任意組合來實(shí)現(xiàn)。如果在軟件中實(shí)現(xiàn),這些功能可以存儲(chǔ)與電腦可讀的媒介上,或以一個(gè)或多個(gè)指令或代碼形式傳輸于電腦可讀的媒介上。電腦可讀媒介包括電腦存儲(chǔ)媒介和便于使得讓電腦程序從一個(gè)地方轉(zhuǎn)移到其它地方的通信媒介。存儲(chǔ)媒介可以是任何通用或特殊電腦可以接入訪問的可用媒體。例如,這樣的電腦可讀媒體可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盤存儲(chǔ)、磁盤存儲(chǔ)或其它磁性存儲(chǔ)裝置,或其它任何可以用于承載或存儲(chǔ)以指令或數(shù)據(jù)結(jié)構(gòu)和其它可被通用或特殊電腦、或通用或特殊處理器讀取形式的程序代碼的媒介。此外,任何連接都可以被適當(dāng)?shù)囟x為電腦可讀媒介,例如,如果軟件是從一個(gè)網(wǎng)站站點(diǎn)、服務(wù)器或其它遠(yuǎn)程資源通過一個(gè)同軸電纜、光纖電纜、雙絞線、數(shù)字用戶線(DSL)或以例如紅外、無線和微波等無線方式傳輸?shù)囊脖话谒x的電腦可讀媒介中。所述的碟片(disk)和磁盤(disc)包括壓縮磁盤、鐳射盤、光盤、DVD、軟盤和藍(lán)光光盤,磁盤通常以磁性復(fù)制數(shù)據(jù),而碟片通常以激光進(jìn)行光學(xué)復(fù)制數(shù)據(jù)。上述的組合也可以包含在電腦可讀媒介中。
以上所述的具體實(shí)施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。