防軟件反編譯的方法、防反編譯軟件啟動(dòng)的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種防軟件反編譯的方法、一種防軟件反編譯的裝置、一種防反編譯軟件啟動(dòng)的方法和一種防反編譯軟件啟動(dòng)的裝置。
【背景技術(shù)】
[0002]安卓平臺(tái)發(fā)展迅速,已經(jīng)逐漸成為了移動(dòng)終端的最普及的操作系統(tǒng),與其他終端操作系統(tǒng)相比,開(kāi)放式的安卓系統(tǒng)為應(yīng)用開(kāi)發(fā)者提供了更多的功能接口,這些功能接口提高了系統(tǒng)的可擴(kuò)展性。
[0003]目前安卓系統(tǒng)的應(yīng)用的構(gòu)建都采用java,而java編譯得到的文件很容易被反編譯。因此存在應(yīng)用更改者通過(guò)非法拷貝、逆向工程、反編譯等手段來(lái)添加其自己的邏輯,比如在應(yīng)用中加入自己廣告等內(nèi)容,對(duì)于用戶來(lái)說(shuō)多了很多無(wú)用的功能,存在不小危害,并且對(duì)于應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō),該種方式損害了開(kāi)發(fā)者的權(quán)益。
【發(fā)明內(nèi)容】
[0004]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的一種防軟件反編譯的裝置和相應(yīng)的一種防軟件反編譯的方法。
[0005]依據(jù)本發(fā)明的一個(gè)方面,提供了本發(fā)明公開(kāi)了一種防軟件反編譯的方法,包括:
[0006]針對(duì)安卓系統(tǒng)的應(yīng)用的配置文件,將所述配置文件中的入口 activity聲明為nativeActivity ;
[0007]通過(guò)JAVA本地調(diào)用接口構(gòu)建針對(duì)所述nativeActivity的執(zhí)行文件;其中,針對(duì)所述nativeActivity的執(zhí)行文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0008]優(yōu)選地,所述執(zhí)行文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),包括:
[0009]在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,執(zhí)行安卓主界面函數(shù),通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)。
[0010]優(yōu)選地,通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),包括:
[0011]在主界面函數(shù)中,調(diào)用natve方法在系統(tǒng)內(nèi)存中指定位置申請(qǐng)一塊內(nèi)存,存放預(yù)置的第一簽名信息;
[0012]獲取當(dāng)前應(yīng)用的第二簽名信息,判斷所述第一簽名信息與第二簽名信息是否匹配;所述第一簽名信息與第二簽名信息不匹配,則確定所述應(yīng)用的簽名校驗(yàn)不通過(guò)。
[0013]優(yōu)選地,所述第一簽名信息為應(yīng)用初始狀態(tài)下的第一 MD5值,所述第二簽名信息為應(yīng)用啟動(dòng)時(shí)的第二 MD5值。
[0014]優(yōu)選地,所述第一簽名信息為所述應(yīng)用初始狀態(tài)下的第一證書文件,所述第二簽名信息為所述應(yīng)用啟動(dòng)時(shí)的第二證書文件。
[0015]優(yōu)選地,所述通過(guò)JAVA本地調(diào)用接口構(gòu)建針對(duì)所述nativeActivity的執(zhí)行文件包括:
[0016]構(gòu)建針對(duì)所述nativeActivity的SO文件;所述SO文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0017]依據(jù)本發(fā)明的另外一個(gè)發(fā)明,本發(fā)明還公開(kāi)了一種防反編譯軟件啟動(dòng)的方法,包括:
[0018]在安卓系統(tǒng)的應(yīng)用啟動(dòng)時(shí),讀取所述應(yīng)用的配置文件中聲明的nativeActivity ;
[0019]通過(guò)所述配置文件中聲明的nativeActivity,調(diào)用JAVA本地調(diào)用接口,加載針對(duì)所述nativeActivity的執(zhí)行文件;
[0020]在加載針對(duì)所述nativeActivity的執(zhí)行文件后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0021]優(yōu)選地,加載針對(duì)所述nativeActivity的執(zhí)行文件后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)包括:
[0022]在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,執(zhí)行安卓主界面函數(shù),通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)。
[0023]優(yōu)選地,執(zhí)行安卓主界面函數(shù),通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)包括:
[0024]在主界面函數(shù)中,調(diào)用natve方法在系統(tǒng)內(nèi)存中指定位置申請(qǐng)一塊內(nèi)存,存放預(yù)置的第一簽名信息;
[0025]獲取當(dāng)前應(yīng)用的第二簽名信息,判斷所述第一簽名信息與第二簽名信息是否匹配;所述第一簽名信息與第二簽名信息不匹配,則確定所述應(yīng)用的簽名校驗(yàn)不通過(guò)。
[0026]優(yōu)選地,所述第一簽名信息為應(yīng)用初始狀態(tài)下的第一 MD5值,所述第二簽名信息為應(yīng)用啟動(dòng)時(shí)的第二 MD5值。
[0027]優(yōu)選地,所述第一簽名信息為所述應(yīng)用初始狀態(tài)下的第一證書文件,所述第二簽名信息為所述應(yīng)用啟動(dòng)時(shí)的第二證書文件。
[0028]優(yōu)選地,所述調(diào)用JAVA本地調(diào)用接口,加載針對(duì)所述nativeActivity的執(zhí)行文件包括:
[0029]調(diào)用本地調(diào)用接口,加載針對(duì)所述nativeActivity的SO文件;所述30文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0030]依據(jù)本發(fā)明的另外一個(gè)方面,本發(fā)明還公開(kāi)了一種防軟件反編譯的裝置,包括:
[0031]入口聲明模塊,適于針對(duì)安卓系統(tǒng)的應(yīng)用的配置文件,將所述配置文件中的入口activity 聲明為 nativeActivity ;
[0032]主界面驗(yàn)證構(gòu)建模塊,適于通過(guò)JAVA本地調(diào)用接口構(gòu)建針對(duì)所述nativeActivity的執(zhí)行文件;其中,針對(duì)所述nativeActivity的執(zhí)行文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0033]優(yōu)選地,所述執(zhí)行文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),包括:
[0034]在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,執(zhí)行安卓主界面函數(shù),通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)。
[0035]優(yōu)選地,通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),包括:
[0036]在主界面函數(shù)中,調(diào)用natve方法在系統(tǒng)內(nèi)存中指定位置申請(qǐng)一塊內(nèi)存,存放預(yù)置的第一簽名信息;
[0037]獲取當(dāng)前應(yīng)用的第二簽名信息,判斷所述第一簽名信息與第二簽名信息是否匹配;所述第一簽名信息與第二簽名信息不匹配,則確定所述應(yīng)用的簽名校驗(yàn)不通過(guò)。
[0038]優(yōu)選地,所述第一簽名信息為應(yīng)用初始狀態(tài)下的第一 MD5值,所述第二簽名信息為應(yīng)用啟動(dòng)時(shí)的第二 MD5值。
[0039]優(yōu)選地,所述第一簽名信息為所述應(yīng)用初始狀態(tài)下的第一證書文件,所述第二簽名信息為所述應(yīng)用啟動(dòng)時(shí)的第二證書文件。
[0040]優(yōu)選地,所述通過(guò)JAVA本地調(diào)用接口構(gòu)建針對(duì)所述nativeActivity的執(zhí)行文件包括:
[0041]構(gòu)建針對(duì)所述nativeActivity的SO文件;所述SO文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0042]依據(jù)本發(fā)明的另外一個(gè)方面,本發(fā)明還公開(kāi)了一種防反編譯軟件啟動(dòng)的裝置,包括:
[0043]配置文件讀取模塊,適于在安卓系統(tǒng)的應(yīng)用啟動(dòng)時(shí),讀取所述應(yīng)用的配置文件中聲明的 nativeActivity ;
[0044]主界面加載模塊,適于通過(guò)所述配置文件中聲明的nativeActivity,調(diào)用JAVA本地調(diào)用接口,加載針對(duì)所述nativeActivity的執(zhí)行文件;
[0045]主界面簽名驗(yàn)證模塊,適于在加載針對(duì)所述nativeActivity的執(zhí)行文件后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0046]優(yōu)選地,所述主界面簽名驗(yàn)證模塊包括:
[0047]主界面函數(shù)執(zhí)行模塊,適于在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,執(zhí)行安卓主界面函數(shù),通過(guò)所述主界面函數(shù),在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn)。
[0048]優(yōu)選地,所述主界面函數(shù)執(zhí)行模塊包括:
[0049]簽名信息存放模塊,適于針對(duì)所述nativeActivity的執(zhí)行文件在加載后,通過(guò)natve方法在系統(tǒng)內(nèi)存中指定位置申請(qǐng)一塊內(nèi)存,存放預(yù)置的第一簽名信息;
[0050]簽名信息驗(yàn)證模塊,適于獲取當(dāng)前應(yīng)用的第二簽名信息,判斷所述第一簽名信息與第二簽名信息是否匹配;所述第一簽名信息與第二簽名信息不匹配,則確定所述應(yīng)用的簽名校驗(yàn)不通過(guò)。
[0051]優(yōu)選地,所述第一簽名信息為應(yīng)用初始狀態(tài)下的MD5值,所述第二簽名信息為應(yīng)用啟動(dòng)時(shí)的MD5值。
[0052]優(yōu)選地,所述第一簽名信息為所述應(yīng)用初始狀態(tài)下的第一證書文件,所述第二簽名信息為所述應(yīng)用啟動(dòng)時(shí)的第二證書文件。
[0053]優(yōu)選地,所述主界面加載模塊包括:
[0054]30文件加載模塊,適于調(diào)用本地調(diào)用接口,加載針對(duì)所述11&1:;^64(31:;^;^7的SO文件;所述SO文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),則退出應(yīng)用。
[0055]根據(jù)本發(fā)明的一種防軟件反編譯的方法可以在安卓系統(tǒng)的應(yīng)用的,在所述應(yīng)用的配置文件Manifest文件中,將所述配置文件中的入口 activity聲明為nativeActivity,然后通過(guò) JNI (Java Native Interface,JAVA 本地調(diào)用接口)構(gòu)建針對(duì)所述 nativeActivity的執(zhí)行文件;其中,針對(duì)所述nativeActivity的執(zhí)行文件用于,在所述針對(duì)所述nativeActivity的執(zhí)行文件加載后,在所述應(yīng)用的主界面啟動(dòng)完成之前對(duì)所述應(yīng)用進(jìn)行簽名校驗(yàn),如果所述應(yīng)用的簽名校驗(yàn)不通過(guò),貝lJ退出應(yīng)用。由于通過(guò)JNI (Java NativeInterface,JAVA本地調(diào)用接口 )構(gòu)建針對(duì)所述nativeActivity的執(zhí)行文件,其可以通過(guò)采用C++實(shí)現(xiàn)進(jìn)行構(gòu)建android_main函數(shù)中的上述邏輯,那么對(duì)被反編譯的應(yīng)用,由于簽名不能通過(guò),可以使應(yīng)用無(wú)法啟動(dòng),由此解決了由安卓系統(tǒng)的應(yīng)用由于采用java構(gòu)建應(yīng)用的各種邏輯而導(dǎo)致應(yīng)用容易被反編譯,導(dǎo)致對(duì)于用戶來(lái)說(shuō)多了很多無(wú)用的功能,存在不小危害,并且對(duì)于應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō),該種方式損害了開(kāi)發(fā)者的權(quán)益問(wèn)題,取得了可避免應(yīng)用更改在應(yīng)用中添加其他邏輯,避免了未經(jīng)驗(yàn)證的信息對(duì)用戶的干擾,保護(hù)的應(yīng)用開(kāi)發(fā)者的權(quán)益的有益效果。
[0056]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其Mani