本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種加解密功能的實現(xiàn)方法、裝置及服務(wù)器。
背景技術(shù):
目前企業(yè)的IT建設(shè)向移動終端發(fā)展,企業(yè)移動應(yīng)用在企業(yè)的日常工作中占據(jù)越來越重要的位置,其中移動辦公等需求越來越普遍。企業(yè)移動應(yīng)用不同于普通的手機應(yīng)用程序(App),首先企業(yè)應(yīng)用的多樣化和個性化需求較強,比如對于核心系統(tǒng)的訪問控制等,另外企業(yè)用戶更加的趨向于全價值鏈的解決方案。由于企業(yè)移動應(yīng)用發(fā)展之初沒有統(tǒng)一標(biāo)準(zhǔn)的規(guī)劃,很多的企業(yè)存在大量孤立遺留的移動應(yīng)用,怎樣靈活方便的為移動應(yīng)用增加新的能力以適應(yīng)企業(yè)多變的需求變的更加困難。
企業(yè)很多的移動應(yīng)用相關(guān)的開發(fā)人員已經(jīng)很難找到,代碼維護也很少。如果重新修改源碼來增加某些能力,如為原來的應(yīng)用增加讀寫加解密文件的功能等,不僅對不熟悉代碼的人來說比較困難,而且會給企業(yè)帶來更大的成本。
目前很多的移動應(yīng)用加解密是直接在應(yīng)用的源代碼級采用各種加密算法來保證數(shù)據(jù)的安全,對于沒有源代碼的應(yīng)用無能為力。
針對相關(guān)技術(shù)中對于沒有源代碼的應(yīng)用無法再新增加解密功能的問題,目前尚未提出有效的解決方案。
技術(shù)實現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明提供了一種加解密功能的實現(xiàn)方法、裝置及服務(wù)器。
根據(jù)本發(fā)明的一個方面,提供了一種加解密功能的實現(xiàn)方法,包括:對安卓安裝包(Android Package,簡稱為APK)文件進行反編譯,得到smali(一種安卓系統(tǒng)的JAVA虛擬機Dalvik所使用的寄存器語言)文件;將所述smali文件中用于執(zhí)行輸入/輸出(I/O)操作的代碼替換為自定義的代碼,其中,所述自定義的代碼用于執(zhí)行I/O操作以及對I/O的數(shù)據(jù)進行加解密操作;對替換過的所述smali文件進行編譯并簽名,得到新的APK文件。
優(yōu)選地,將所述smali文件中用于執(zhí)行I/O操作的代碼替換為自定義的代碼包括:將所述smali文件中用于執(zhí)行I/O操作的類替換為自定義的類,其中,所述用于執(zhí)行I/O 操作的類包括以下至少之一:FileOutputStream、FileInputStream、FileReader、FileWriter、RandomAccessFile等。
優(yōu)選地,將所述smali文件中用于執(zhí)行I/O操作的類替換為自定義的類包括:確定所述smali文件中所使用到的用于執(zhí)行I/O操作的類;將所述smali文件所使用到的用于執(zhí)行I/O操作的類替換為自定義的類。
優(yōu)選地,在將所述smali文件中用于執(zhí)行I/O操作的類替換為自定義的類之前,所述方法還包括:解析所述APK文件的AndroidManifest.xml文件,得到原始包名,其中,所述原始包名用于在進行注入替換時smali文件位置的定位。
優(yōu)選地,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法還包括:獲取所述APK文件的Application的信息;在所述APK文件有繼承自Application類的子類的情況下,將自定義的Application子類smali代碼注入到所述smali文件本身的Application子類代碼中;在所述APK文件沒有繼承自Application子類的情況下,在AndroidManifes.xml中添加android:name的屬性,其中,所述屬性的值是自定義的Application子類的完整名稱。
優(yōu)選地,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法還包括:將所述smali文件中的繼承自Activity子類的父類替換成自定義的Activity子類BaseActivity。
優(yōu)選地,在將所述smali文件中用于執(zhí)行I/O操作的代碼替換為自定義的代碼之后,所述方法還包括:在AndroidManifest.xml中增加用于指示進行過代碼注入替換操作的標(biāo)記。
根據(jù)本發(fā)明的另一個方面,還提供了一種加解密功能的實現(xiàn)裝置,包括:反編譯模塊,用于對APK文件進行反編譯,得到smali文件;替換模塊,用于將所述smali文件中用于執(zhí)行輸入/輸出I/O操作的代碼替換為自定義的代碼,其中,所述自定義的代碼用于執(zhí)行I/O操作以及對I/O的數(shù)據(jù)進行加解密操作;編譯模塊,用于對替換過的所述smali文件進行編譯并簽名,得到新的APK文件。
根據(jù)本發(fā)明的另一個方面,還提供了一種服務(wù)器,包括:上述的加解密功能的實現(xiàn)裝置;其中,所述服務(wù)器還包括:第一獲取裝置,用于獲取所述APK文件;提供裝置,用于提供所述新的APK文件。
優(yōu)選地,所述服務(wù)器還包括:第二獲取裝置,用于獲取簽名所述新的APK文件的keystore。
通過本發(fā)明,采用對APK文件進行反編譯,得到smali文件;將smali文件中用于執(zhí)行輸入/輸出I/O操作的代碼替換為自定義的代碼,其中,自定義的代碼用于執(zhí)行I/O操作以及對I/O的數(shù)據(jù)進行加解密操作;對替換過的smali文件進行編譯并簽名,得到 新的APK文件的方式,解決了對于沒有源代碼的應(yīng)用無法再新增加解密功能的問題,減少了應(yīng)用的維護成本。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實施例的加解密功能的實現(xiàn)方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的加解密功能的實現(xiàn)裝置的結(jié)構(gòu)示意圖;
圖3是根據(jù)本發(fā)明實施例的服務(wù)器的結(jié)構(gòu)示意圖;
圖4是根據(jù)本發(fā)明優(yōu)選實施例的打包注入代碼的流程圖一;
圖5是根據(jù)本發(fā)明優(yōu)選實施例的打包注入代碼的流程圖二。
具體實施方式
下文中將參考附圖并結(jié)合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供了一種加解密功能的實現(xiàn)方法,圖1是根據(jù)本發(fā)明實施例的加解密功能的實現(xiàn)方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟S102,對APK文件進行反編譯,得到smali文件;
步驟S104,將smali文件中用于執(zhí)行I/O操作的代碼替換為自定義的代碼,其中,自定義的代碼用于執(zhí)行I/O操作以及對I/O的數(shù)據(jù)進行加解密操作;
步驟S106,對替換過的smali文件進行編譯并簽名,得到新的APK文件。
通過上述步驟,將smali文件中用于I/O操作的代碼替換為還可以進行加解密操作的自定義的代碼,從而在沒有APK文件源碼的情況下,實現(xiàn)了APK文件的I/O數(shù)據(jù)的 加解密,解決了對于沒有源代碼的應(yīng)用無法再新增加解密功能的問題,減少了應(yīng)用的維護成本,同時也提升了應(yīng)用的安全性。
其中,smali是指安卓系統(tǒng)里的Java虛擬機(Dalvik)所使用的一種.dex格式文件的匯編語言;smali文件即為經(jīng)由反匯編器(例如Baksmali)對APK文件進行反編譯而得到的文件,smali文件的內(nèi)容由smali語言描述。
優(yōu)選地,在實施過程中,在步驟S104中,可以將反編譯得到的smali文件中用于執(zhí)行I/O操作的類替換為自定義的類,其中,用于執(zhí)行I/O操作的類包括但不限于以下至少之一:FileOutputStream、FileInputStream、、FileReader、FileWriter、RandomAccessFile等。此外,在進行類替換時,對于相關(guān)的文件可以進行適應(yīng)性修改,例如Application子類和Activity子類等。
優(yōu)選地,對于一個應(yīng)用而言,所使用到得I/O操作可能是全部I/O操作,也可能是其中的某一個I/O操作,為了避免不必要的類替換以及避免替換了不必要的類導(dǎo)致的APK文件增大的問題,在將smali文件中用于執(zhí)行I/O操作的類替換為自定義的類時,可以先確定反編譯所得到的smali文件所使用到的用于執(zhí)行I/O操作的類及代碼;然后將smali文件所使用到的用于執(zhí)行I/O操作的類替換為自定義的類。對于APK文件中沒有使用的類,可以不進行替換。
優(yōu)選地,在步驟S104之前,方法還可以包括:解析對APK文件進行反編譯得到的AndroidManifest.xml文件,得到原始包名,其中,原始包名用于在進行類替換時類文件位置的定位。
優(yōu)選地,在解析反編譯得到的AndroidManifest.xml文件之后,上述方法還可以包括:獲取APK文件的Application的信息;在APK文件有繼承自Application的子類的情況下,將自定義的Application子類代碼注入到smali文件的Application子類代碼中;在APK文件沒有繼承自Application的子類的情況下,在AndroidManifes.xml中添加android:name的屬性,其中,屬性的值是自定義的Application子類的完整名稱。
優(yōu)選地,在解析反編譯得到的AndroidManifest.xml文件之后,上述方法還可以包括:將smali文件中的Activity子類的父類替換成自定義的Activity子類BaseActivity。其中,在Activity子類可以擴展需要執(zhí)行的服務(wù)或者功能,例如,可以在Activity子類中啟動自定義的服務(wù),或者從服務(wù)器獲取加解密密鑰的功能等。
優(yōu)選地,為了能對進行過代碼注入的APK文件進行標(biāo)識,在將smali文件中用于執(zhí)行I/O操作的代碼替換為自定義的代碼之后,可以在AndroidManifest.xml中增加用于指示進行過代碼替換操作的標(biāo)記。
在本實施例中還提供了一種加解密功能的實現(xiàn)裝置,用于實現(xiàn)上述實施例及優(yōu)選實施方式,已經(jīng)進行過說明的不再贅述,下面對該裝置中涉及到的模塊進行說明。如以下 所使用的,術(shù)語“模塊”可以實現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構(gòu)想的。
圖2是根據(jù)本發(fā)明實施例的加解密功能的實現(xiàn)裝置的結(jié)構(gòu)示意圖,如圖2所示,該裝置包括:反編譯模塊22、替換模塊24和編譯模塊26,其中,反編譯模塊22,用于對APK文件進行反編譯,得到smali文件;替換模塊24,耦合至反編譯模塊22,用于將smali文件中用于執(zhí)行I/O操作的代碼替換為自定義的代碼,其中,自定義的代碼用于執(zhí)行I/O操作以及對I/O的數(shù)據(jù)進行加解密操作;編譯模塊26,耦合至替換模塊24,用于對替換過的smali文件進行編譯并簽名,得到新的APK文件。
優(yōu)選地,替換模塊24用于將smali文件中用于執(zhí)行I/O操作的類替換為自定義的類,其中,用于執(zhí)行I/O操作的類包括但不限于以下至少之一:FileOutputStream、FileInputStream、、FileReader、FileWriter、RandomAccessFile等。
優(yōu)選地,替換模塊24包括:確定單元242,用于確定smali文件所使用到的用于執(zhí)行I/O操作的類;替換單元244,耦合至確定單元242,用于將smali文件所使用到的用于執(zhí)行I/O操作的類替換為自定義的類。
優(yōu)選地,所述裝置還包括:解析模塊,耦合至反編譯模塊22和替換模塊24之間,用于解析反編譯APK文件得到的AndroidManifest.xml文件,得到原始包名,其中,原始包名用于在進行類替換時類文件位置的定位。
優(yōu)選地,所述裝置還包括:獲取模塊,耦合至解析模塊,用于獲取反編譯得到的APK文件的Application的信息;處理模塊,耦合至獲取模塊,用于在APK文件有繼承自Application類的子類情況下,將自定義的Application子類代碼注入到APK文件的Application子類smali代碼中;和/或,在APK文件沒有繼承自Application的子類的情況下,在AndroidManifes.xml中添加android:name的屬性,其中,屬性的值是自定義的Application子類的完整名稱。
優(yōu)選地,所述裝置還包括第二替換模塊,耦合至解析模塊,用于將反編譯得到的smali文件中的Activity子類的父類替換成自定義的Activity子類。
優(yōu)選地,所述裝置還包括:注入模塊,耦合至替換模塊24和編譯模塊26之間,用于在AndroidManifest.xml中增加用于指示進行過代碼替換操作的標(biāo)記。
本發(fā)明實施例還提供了一種服務(wù)器。為了向用戶提供APK文件處理的服務(wù),用戶可以通過服務(wù)器提供的接口(例如門戶網(wǎng)站)上傳APK文件,在APK文件經(jīng)過服務(wù)器處理后,再由用戶下載新的APK文件。
圖3是根據(jù)本發(fā)明實施例的服務(wù)器的結(jié)構(gòu)示意圖,如圖3所示,該服務(wù)器包括上述的加解密功能的實現(xiàn)裝置32;其中,服務(wù)器還包括:第一獲取裝置34,耦合至加解密 功能的實現(xiàn)裝置32,用于獲取APK文件;提供裝置36,耦合至加解密功能的實現(xiàn)裝置32,用于提供新的APK文件,以供用戶下載。
優(yōu)選地,第一獲取裝置34是通過國際互聯(lián)網(wǎng)絡(luò)或者局域網(wǎng)絡(luò)獲取該APK文件的。
優(yōu)選地,服務(wù)器還包括:第二獲取裝置,用于獲取簽名新的APK文件的keystore。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
為了使本發(fā)明實施例的描述更加清楚,下面結(jié)合優(yōu)選實施例進行描述和說明。
本發(fā)明優(yōu)選實施例提供了一種企業(yè)移動應(yīng)用文件加解密的方法和裝置,該優(yōu)選實施例涉及例如安卓(Android)應(yīng)用的smali代碼注入技術(shù)和終端應(yīng)用的開發(fā)領(lǐng)域。
為了提供簡單靈活的工具,在沒有企業(yè)移動應(yīng)用源碼的情形下,通過smali代碼注入的方式為企業(yè)移動應(yīng)用增加讀寫加解密文件的能力,在本發(fā)明優(yōu)選實施例中采用以下技術(shù)方案:
用戶使用用戶名和密碼登錄門戶網(wǎng)站,上傳所要打包的應(yīng)用,選擇加解密打包項進行相關(guān)的配置,后臺自動打包注入,打包成功后下載,安裝到手機上即可使用有讀寫加解密文件功能的應(yīng)用。
其中的打包流程包括如下過程:判斷上傳的應(yīng)用是不是APK文件,以及該應(yīng)用是否已經(jīng)增加過加解密功能,如果不是合法的APK文件或者已經(jīng)增加過加解密功能,則退出打包流程。通過檢查后,反編譯上傳的應(yīng)用。分析反編譯得到的AndroidManifest.xml文件,記錄啟動Activity、包名等信息,分析反編譯得到的smali代碼,看是否有注入的地方,如有注入的地方,修改原APK文件的smali代碼進行注入,并拷貝加解密使用的相關(guān)文件到相應(yīng)的文件夾,如.so文件,注入的smali文件等,并修改AndroidManifest.xml文件相關(guān)的項,最后重新編譯并簽名得到注入過讀寫加解密代碼的應(yīng)用。
被注入過加解密代碼的APK文件具有讀寫加解密文件功能的原理如下:
1、由于修改了AndroidManifest.xml文件,注入了新的Application代碼,應(yīng)用剛啟動會執(zhí)行指定的Application子類中的代碼,完成初始化等操作。
2、使用應(yīng)用的過程中,代碼運行到需要寫文件的地方,如調(diào)用FileOutputStream類的相關(guān)方法,由于注入了代碼,F(xiàn)ileOutputStream類被替換成自定義的具有加密功能的類(在本實施例中記為MyFileOutputStream),實際上調(diào)用的是MyFileOutputStream中相關(guān)的方法,完成寫入密文的操作。
3、應(yīng)用運行到需要讀文件的地方,與寫文件類似,實際上運行的代碼是注入后的具有讀密文功能的代碼。
4、實際上所有讀寫文件的I/O操作的代碼都被替換成注入的代碼,而注入的代碼是繼承原先java類庫提供I/O的代碼,加入了加解密的部分,這樣原先只能讀寫明文的APK文件就具有了讀寫密文的功能。
另外,在一些優(yōu)選的實施例中,由于java的I/O操作的類比較多,在注入的時候,可以根據(jù)原APK smali代碼的解析,動態(tài)的選擇所需要注入的類,而不會把所有重寫的具有加解密功能的類都拷貝到其中去。比如,原APK文件只使用了FileOutputStream和FileInputStream,系統(tǒng)只需注入自定義的FileOutputStream和自定義的FileInputStream類,而不用把自定義的FileReader等注入進去,這樣不僅可以提高注入的性能,還能防止注入后APK文件過大。
下面結(jié)合附圖對smali代碼注入實現(xiàn)增加讀寫加解密功能的技術(shù)方案的實施進行描述。
在瀏覽器中輸入門戶網(wǎng)站的網(wǎng)頁地址(URL),輸入用戶名和密碼,點擊登錄。從本地選擇要上傳打包的應(yīng)用。上傳成功后在應(yīng)用列表中可以看到。選擇應(yīng)用,點擊打包在彈出的頁面中輸入打包信息,描述,選擇文件加解密打包項,點擊打包,即可開始打包,打包過程可能會持續(xù)一段時間。打包成功后可以查看日志,并可以將打包后的應(yīng)用下載到本地安裝到手機終端上。
打包的流程如圖4所示,先將原始的APK文件反編譯到一個目錄,再將反編譯后的文件拷貝到一個目標(biāo)目錄,接著解析原APK文件的smali代碼,記錄注入點,并將注入所需要的smali文件拷入到目標(biāo)目錄,修改原APK文件的smali以實現(xiàn)注入,包括處理AndroidManifetste.xml,最后運行apktool將目標(biāo)目錄打成APK文件,最后對重新生成的APK文件進行簽名即可得到注入了加解密代碼的APK文件。
打包注入的優(yōu)選流程如圖5所示,描述如下:
步驟S501:判斷要打包的APK文件是否已經(jīng)注入過相同的代碼,在這個過程中可還可以判斷出APK文件是否是真正的APK文件,如果是真正的APK文件而且沒有注入過相同的代碼,則進行步驟S502,否則退出。
步驟S502:反編譯待注入的APK文件到指定目錄,若成功則執(zhí)行步驟S503,否則退出。
步驟S503:檢測目標(biāo)目錄是否含有.so文件,若有.so文件給出提示“該應(yīng)用含有so庫,文件加解密加固存在不可預(yù)知風(fēng)險,是否繼續(xù)”,若選擇是則繼續(xù)步驟S504,否則退出。
步驟S504:解析并分析原APK文件的smali代碼,查找是否有文件I/O操作,若有則繼續(xù)步驟S505,否則表示原APK文件沒有注入點,不需要注入,退出。
步驟S505:拷貝反編譯得到的文件和注入所需要的文件到目標(biāo)文件夾。
步驟S506:解析原始APK文件的AndroidManifest.xml文件,得到原始包名。
步驟S507:獲取原始APK文件的Application的信息。若原始APK文件有繼承自Application的子類,則將自定義的類代碼注入到原始的Application子類smali代碼中,若沒有繼承自Application的子類,則修改AndroidManifes.xml加入android:name的屬性,值是自定義的Application子類的完整名稱。
步驟S508:注入自定義的BaseActivity,將所有原APK文件中的Activity子類的父類替換成BaseActivity。
步驟S509:注入讀寫加解密的smali代碼,將原始I/O操作的代碼替換成加解密的代碼。
步驟S510:處理原始APK文件的圖標(biāo),加上打過包的標(biāo)記,作為和原始APK文件的區(qū)別。
步驟S511:處理AndroidManifest.xml的其它內(nèi)容,如加上注入過加解密代碼的標(biāo)記,增加缺少的權(quán)限(permission)等。
步驟S512:調(diào)用APK工具(apktool)編譯目標(biāo)文件夾,若成功構(gòu)建則生成注入代碼后未簽名的APK文件,如果失敗則退出。
步驟S513:調(diào)用jar簽名器(jarsigner)簽名上一步生成的APK文件。
步驟S514:將已簽名的APK文件拷貝到指定目錄,流程結(jié)束。
其中,反編譯的過程用到了apktool,步驟S505到步驟S509是在處理AndroidManifest.xml的內(nèi)容,注入相關(guān)smali代碼。最后打包生成的APK文件用到了jarsigner簽名,簽名的密鑰庫(keystore)可以通過門戶上傳。原始APK文件如果沒有Application,則使用注入的代碼,如果有,則會在原始Application末尾注入關(guān)于加解密的smali代碼,這樣在打過包的APK文件啟動時會先執(zhí)行原始的代碼再執(zhí)行注入的代碼完成初始化的工作。
此外,注入使用的smali文件,可以采用不同的加密方式實現(xiàn),每一種算法表示一種加解密方案。并且由上述描述可知,本發(fā)明優(yōu)選實施例中可以靈活的替換加解密方案,不需要更改原有架構(gòu)。
綜上所述,通過本發(fā)明的上述實施例和優(yōu)選實施例,可以在無需獲得原來APK文件源碼的前提下通過代碼注入的方式賦予移動應(yīng)用讀寫文件加解密的能力,從而可以靈活方便的定制和改造原有的企業(yè)移動應(yīng)用,增加應(yīng)用數(shù)據(jù)的安全性。
在另外一個實施例中,還提供了一種軟件,該軟件用于執(zhí)行上述實施例及優(yōu)選實施方式中描述的技術(shù)方案。
在另外一個實施例中,還提供了一種存儲介質(zhì),該存儲介質(zhì)中存儲有上述軟件,該存儲介質(zhì)包括但不限于:光盤、軟盤、硬盤、可擦寫存儲器等。
需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的對象在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送?,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。