1.一種基于Dex加載器的Android應(yīng)用軟件加固保護方法,其特征在于,包括以下步驟:
S1:解包原應(yīng)用Apk文件,得到AndroidManifest.xml,classes.dex文件以及assets,META_INF,libs文件夾;
S2:生成隨機密鑰KEY,使用隨機密鑰KEY對Apk中的Dex文件使用128bit的AES算法加密,生成密文文件Reinforce.dex;
S3:將Reinforce.dex移動到在assets文件夾中保存,圖示刪除classes.dex明文文件;
S4:替換加密核心庫libcorn.so中Key密鑰區(qū)域,并將庫文件libcorn.so并保存在libs文件夾中;
S5:將殼源碼編譯成classes.dex文件,并將殼文件dex放在根目錄下替代原程序的classes.dex;
S6:將Manifest中程序入口修改為殼程序具體修改方法為:
a)<application>標簽下的android:name屬性值改為殼程序名稱;
b)建立標簽<meta-data>,在<meta-data>標簽下添加屬性android:name和android:value;
c)將android:name的值設(shè)置為APPLICATION_CLASS_NAME;后者的值設(shè)置為原<application>標簽下android:name屬性的值,若該原始值不存在,則取系統(tǒng)的缺省程序入口android.app.Application;若該原始值以“.”開頭,則在其前加上包名取完成路徑;
S7:刪除原apk簽名信息META-INF;
S8:用apktool打包文件夾,用自己的密鑰對新打包的apk進行簽名;
經(jīng)過以上的步驟,加固完畢,生成了一個全新的apk文件,加固后的應(yīng)用和加固前的應(yīng)用相比,asssts文件家中多了加密Dex文件,classes.dex是替換的殼文件,并且在lib庫中多了用于加載解密的核心so庫。
2.如權(quán)利要求1所述的基于Dex加載器的Android應(yīng)用軟件加固保護方法,其特征在于,還包括以下步驟:
S9:加固殼應(yīng)用啟動,殼程序中加載核心so庫文件libcorn.so;
S10:從libcorn.so的密鑰區(qū)域恢復出密鑰KEY。
S11:調(diào)用libcorn.so的解密函數(shù)解密assets文件夾中的Dex文件到內(nèi)存,得到一個字節(jié)數(shù)組byte[];
S12:使用自定義的Native層的DexClassLoader調(diào)用libdvm.so中接口Dalvik_dalvik_system_DexFile_openDexFile_bytearray()裝載上一步得到的byte數(shù)組并得到一個標記dex的cookie值;
S13:調(diào)用libdvm.so中接口
Dalvik_dalvik_system_DexFile_defineClassNative,根據(jù)上一步得到的cookie值加載原程序;
S14:將系統(tǒng)中運行的應(yīng)用信息狀態(tài)信息替換為原應(yīng)用,將程序的控制全交還給原應(yīng)用,實現(xiàn)原應(yīng)用程序的正常啟動。