檢測安裝包是否被二次打包的方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種檢測安裝包是否被二次打包的方法和裝置。方法包括:解析指定安裝包中的指定部分的二進制文件,得到二進制文件中的結(jié)構(gòu)體的第一排序;檢測第一排序與第二排序是否相同,其中,第二排序為二次打包工具對安裝包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排序;當(dāng)?shù)谝慌判蚺c第二排序相同時,判定指定安裝包為二次打包后的文件。通過本發(fā)明,可以待檢測出安裝包是否經(jīng)過該二次打包工具進行了二次打包,進而可以在用戶安裝程序時,提示用戶文件經(jīng)過二次打包,具有威脅性,或?qū)⑵浯嫒氩《緬呙韫ぞ叩奶卣鲙?,對這些被判定為二次打包的文件進行優(yōu)先掃描,提高病毒掃描工具的查殺效率和準確性。
【專利說明】檢測安裝包是否被二次打包的方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機領(lǐng)域,具體涉及一種檢測安裝包是否被二次打包的方法和裝 置。
【背景技術(shù)】
[0002] 目前,手機、平板電腦等移動終端應(yīng)用越來越廣,基于移動終端進行開發(fā)的 APP(Application,應(yīng)用程序)也越來越多。并且,現(xiàn)在互聯(lián)網(wǎng)上存在眾多的應(yīng)用市場,均能 夠提供APP的下載。
[0003] 由于眾多的應(yīng)用市場的存在,導(dǎo)致對于APP的管理很混亂。因此,一些惡意開發(fā)者 開始對APP的安裝包(例如apk文件)進行二次打包,并再次發(fā)布。
[0004] 具體地,二次打包也即惡意開發(fā)者拿到APP的正版安裝包,將其反編譯后,加入廣 告、惡意代碼等,再次打包為安裝包,并提供給網(wǎng)民下載,以達到其廣告宣傳等目的。
[0005] 而在現(xiàn)有技術(shù)中,網(wǎng)民在對安裝包進行安裝前無法判斷是否被二次打包,且目前 市面上具有成熟的二次打包工具,進行二次打包的技術(shù)門檻很低,導(dǎo)致了安裝包被二次打 包的現(xiàn)象泛濫。
【發(fā)明內(nèi)容】
[0006] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的一種檢測安裝包是否被二次打包的方法和相應(yīng)地裝置。
[0007] 依據(jù)本發(fā)明的一個方面,提供一種檢測安裝包是否被二次打包的方法,包括:
[0008] 解析指定安裝包中的指定部分的二進制文件,得到所述二進制文件中的結(jié)構(gòu)體的 第一排序;
[0009] 檢測所述第一排序與第二排序是否相同,其中,所述第二排序為二次打包工具對 安裝包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排序;
[0010] 當(dāng)所述第一排序與所述第二排序相同時,判定所述指定安裝包為二次打包后的文 件。
[0011] 可選地,所述解析指定安裝包中的指定部分的二進制文件,得到所述二進制文件 中的結(jié)構(gòu)體的第一排序,包括:
[0012] 根據(jù)所述指定安裝包的壓縮格式對所述安裝包進行解壓縮,得到其中的dex文件 和/或MF文件;
[0013] 查看所述dex文件和/或MF文件的二進制文件,對所述二進制文件進行解析得到 其中的多個結(jié)構(gòu)體,并獲得所述結(jié)構(gòu)體的第一排序。
[0014] 可選地,所述二進制文件中的結(jié)構(gòu)體至少包括:
[0015] 字符表或方法表。
[0016] 可選地,所述對所述二進制文件進行解析得到其中的多個結(jié)構(gòu)體,包括:
[0017] 根據(jù)操作系統(tǒng)廠商對每種類型的結(jié)構(gòu)體定義的格式在所述二進制文件中查找得 到其中的多個結(jié)構(gòu)體。
[0018] 可選地,在判定所述指定安裝包為二次打包后的文件之前,還包括:
[0019] 計算所述指定安裝包的簽名;
[0020] 確定所述指定安裝包的簽名是否在預(yù)設(shè)的白名單中;
[0021] 當(dāng)所述指定安裝包的簽名在所述預(yù)設(shè)的白名單中時,判定所述指定安裝包為非二 次打包文件。
[0022] 可選地,在判定所述指定安裝包為二次打包后的文件之后,還包括:
[0023] 將所述指定安裝包標(biāo)記為經(jīng)二次打包的文件,并記錄在指定的特征庫中;
[0024]和 / 或,
[0025] 提示用戶所述指定安裝包為二次打包的文件
[0026]和 / 或,
[0027] 提示用戶所述指定安裝包為山寨應(yīng)用,并推薦與所述指定安裝包對應(yīng)的正版應(yīng) 用。
[0028] 可選地,所述提示用戶所述指定安裝包為山寨應(yīng)用,包括:
[0029] 提取所述指定安裝包中的特征信息,并將所述特征信息上傳給云服務(wù)器,由所述 云服務(wù)器根據(jù)所述特征信息判斷所述指定安裝包是否為山寨應(yīng)用;
[0030] 當(dāng)接收到所述云服務(wù)器返回的確認結(jié)果為所述指定安裝包為山寨應(yīng)用時,提示用 戶所述指定安裝包為山寨應(yīng)用。
[0031] 可選地,所述指定安裝包的特征信息包括:
[0032] 安裝包的包名、版本號、開發(fā)者簽名、Android組件receiver的特征,Android組件 service的特征,Android組件activity的特征,可執(zhí)行文件中的指令或字符串和安裝包目 錄下各文件的校驗值。
[0033] 可選地,所述推薦與所述指定安裝包對應(yīng)的正版應(yīng)用,包括:
[0034] 由云服務(wù)器下載與所述指定安裝包對于的正版應(yīng)用的安裝包,并推薦用戶進行安 裝。
[0035] 依據(jù)本發(fā)明的另一個方面,提供一種檢測安裝包是否被二次打包的裝置,包括:
[0036] 解析模塊,適于解析指定安裝包中的指定部分的二進制文件,得到所述二進制文 件中的結(jié)構(gòu)體的第一排序;
[0037] 排序檢測模塊,適于檢測所述第一排序與第二排序是否相同,其中,所述第二排序 為二次打包工具對安裝包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排序;
[0038] 第一判定模塊,適于當(dāng)所述第一排序與所述第二排序相同時,判定所述指定安裝 包為二次打包后的文件。
[0039] 可選地,所述解析模塊包括:
[0040] 解壓單元,適于根據(jù)所述安裝包的壓縮格式對所述指定安裝包進行解壓縮,得到 其中的dex文件和/或MF文件;
[0041] 排序單元,適于查看所述dex文件和/或MF文件的二進制文件,對所述二進制文 件進行解析得到其中的多個結(jié)構(gòu)體,并獲得所述結(jié)構(gòu)體的第一排序。
[0042] 可選地,所述二進制文件中的結(jié)構(gòu)體至少包括:
[0043] 字符表或方法表。
[0044] 可選地,所述排序單元適于按照如下方式對所述二進制文件進行解析得到其中的 多個結(jié)構(gòu)體:
[0045] 根據(jù)操作系統(tǒng)廠商對每種類型的結(jié)構(gòu)體定義的格式在所述二進制文件中查找得 到其中的多個結(jié)構(gòu)體。
[0046] 可選地,所述裝置還包括:
[0047] 簽名檢測模塊,適于在判定所述指定安裝包為二次打包后的文件之前,計算所述 指定安裝包的簽名,并確定所述指定安裝包的簽名是否在預(yù)設(shè)的白名單中;
[0048] 第二判定模塊,適于當(dāng)所述簽名檢測模塊確定所述指定安裝包的簽名在所述預(yù)設(shè) 的白名單中時,判定所述指定安裝包為非二次打包文件。
[0049] 可選地,所述裝置還包括:
[0050] 記錄模塊,適于在判定所述指定安裝包為二次打包后的文件之后,將所述指定安 裝包標(biāo)記為經(jīng)二次打包的文件,并記錄在指定的特征庫中;
[0051]和 / 或,
[0052] 第一提示模塊,適于在所述判定所述安指定裝包為二次打包后的文件之后,提示 用戶所述安裝包為二次打包的文件;
[0053]和/或,
[0054] 第二提示模塊,適于提示用戶所述指定安裝包為山寨應(yīng)用,并推薦與所述指定安 裝包對應(yīng)的正版應(yīng)用。
[0055] 可選地,所述第二提示模塊具體適于按照如下方式提示用戶所述指定安裝包為山 寨應(yīng)用:
[0056] 提取所述指定安裝包中的特征信息,并將所述特征信息上傳給云服務(wù)器,由所述 云服務(wù)器根據(jù)所述特征信息判斷所述指定安裝包是否為山寨應(yīng)用;
[0057] 當(dāng)接收到所述云服務(wù)器返回的確認結(jié)果為所述指定安裝包為山寨應(yīng)用時,提示用 戶所述指定安裝包為山寨應(yīng)用。
[0058] 可選地,所述指定安裝包的特征信息包括:
[0059] 安裝包的包名、版本號、開發(fā)者簽名、Android組件receiver的特征,Android組件 service的特征,Android組件activity的特征,可執(zhí)行文件中的指令或字符串和安裝包目 錄下各文件的校驗值。
[0060] 可選地,所述第二提示模塊具體適于按照如下方式推薦與所述指定安裝包對應(yīng)的 正版應(yīng)用:
[0061] 由云服務(wù)器下載與所述指定安裝包對于的正版應(yīng)用的安裝包,并推薦用戶進行安 裝。
[0062] 本發(fā)明實施例提供了一種檢測安裝包是否被二次打包的方法和裝置,通過檢測待 檢測的安裝包文件中的指定部分,獲取其中的結(jié)構(gòu)體的第一排序,判斷其第一排序是否與 市面上的二次打包工具對安裝包進行編譯時產(chǎn)生的結(jié)構(gòu)體的第二排序相同,若相同,則說 明待檢測的安裝包經(jīng)過該二次打包工具進行了二次打包,進而可以在用戶安裝程序時,提 示用戶文件經(jīng)過二次打包,具有威脅性,或?qū)⑵浯嫒氩《緬呙韫ぞ叩奶卣鲙欤瑢@些被判定 為二次打包的文件進行優(yōu)先掃描,提高病毒掃描工具的查殺效率和準確性。
[0063] 上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠 更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
[0064] 根據(jù)下文結(jié)合附圖對本發(fā)明具體實施例的詳細描述,本領(lǐng)域技術(shù)人員將會更加明 了本發(fā)明的上述以及其他目的、優(yōu)點和特征。
【專利附圖】
【附圖說明】
[0065] 通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0066] 圖1是本發(fā)明一個實施例提供的一種檢測安裝包是否被二次打包的方法流程圖; [0067] 圖2是本發(fā)明一個實施例提供的一種檢測安裝包是否被二次打包的具體方法流 程圖;
[0068] 圖3是本發(fā)明一個實施例提供的特征庫與移動終端、云服務(wù)器的交互示意圖; [0069] 圖4是本發(fā)明一個實施例提供的一種檢測安裝包是否被二次打包的裝置結(jié)構(gòu)框 圖。
【具體實施方式】
[0070] 下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)該被這里闡述的實施 例所限制。相反,提供這些實施例是為了能夠透徹地理解本公開,并且能夠?qū)⒈竟_的范圍 完整的傳達給本領(lǐng)域的技術(shù)人員。
[0071] 實施例一
[0072] 本發(fā)明實施例提供了一種檢測安裝包是否被二次打包的方法。該方法能夠判斷指 定的安裝包文件是否被二次打包,進而防止用戶因為安裝二次打包的文件而受到安全威脅 或廣告騷擾,也可以為惡意程序的查殺提供參考。本方法可以通過檢測工具實現(xiàn)在計算機 后臺中,例如PC機以及各種服務(wù)器中均可以實現(xiàn)。
[0073] 圖1是本發(fā)明一個實施例提供的一種檢測安裝包是否被二次打包的方法的流程 圖,該方法包括步驟S102至S106。
[0074] S102,解析指定安裝包中的指定部分的二進制文件,得到二進制文件中的結(jié)構(gòu)體 的第一排序。
[0075] S104,檢測第一排序與第二排序是否相同。
[0076] 其中,第二排序為二次打包工具對安裝包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排 序。
[0077] S106,當(dāng)?shù)谝慌判蚺c第二排序相同時,判定指定安裝包為二次打包后的文件。
[0078] 本發(fā)明實施例提供了一種檢測安裝包是否被二次打包的方法,通過檢測待檢測的 安裝包文件中的指定部分,獲取其中的結(jié)構(gòu)體的第一排序,判斷其第一排序是否與市面上 的二次打包工具對安裝包進行編譯時產(chǎn)生的結(jié)構(gòu)體的第二排序相同,若相同,則說明待檢 測的安裝包經(jīng)過該二次打包工具進行了二次打包,進而可以在用戶安裝程序時,提示用戶 文件經(jīng)過二次打包,具有威脅性,或?qū)⑵浯嫒氩《緬呙韫ぞ叩奶卣鲙?,對這些被判定為二次 打包的文件進行優(yōu)先掃描,提高病毒掃描工具的查殺效率和準確性。
[0079] 實施例二
[0080] 本實施例為上述實施例一的一種具體應(yīng)用場景,通過本實施例,能夠更加清楚、具 體地闡述本發(fā)明所提供的方法。在本實施例中,以對隨機收集到的指定安裝包文件為例進 行檢測,判斷其是否為經(jīng)過二次打包的安裝包為例進行說明。
[0081] 為了幫助說明本發(fā)明實施例,首先對應(yīng)用程序的安裝包進行說明如下:
[0082] 在本發(fā)明的實施例中,安裝包會包括如下信息:應(yīng)用程序的安裝包的包名、版本 號、開發(fā)者簽名、Android組件receiver的特征,Android組件service的特征,Android組 件activity的特征,可執(zhí)行文件中的指令或字符串,安裝包目錄下各文件的MD5值,其中, 所述可執(zhí)行文件包括Dex文件,和/或,ELF文件;所述Dex文件包括classes, dex文件,擴 展名為.jar的文件,以及,Dex格式的文件。
[0083] 1)安裝包的包名
[0084]Android操作系統(tǒng)通過APK的包名(packagename)對各個安裝的APK進行管理。 "包名"源自于Java的package的概念,按照Java的package的命名風(fēng)格,例如某個Android 安裝包的包名是com.qihoo360.mobilesafe。Android系統(tǒng)要求每個應(yīng)用程序都聲明一個 唯一的安裝包的包名。如果要安裝的APK的包名和當(dāng)前手機上某個已有的應(yīng)用程序的安裝 包的包名重復(fù)了,那么Android系統(tǒng)會拒絕安裝。Android平臺下的山寨應(yīng)用程序也需要聲 明一個包名,因此,包名就可以作為識別山寨應(yīng)用程序的一個特征。
[0085] 2)開發(fā)者簽名
[0086] 出于安全性的目的,Android系統(tǒng)要求每個APK都要包含開發(fā)者簽名(digital signature)。Android系統(tǒng)在安裝APK文件的時候會檢查APK內(nèi)部各文件的開發(fā)者簽名是 否與其預(yù)先設(shè)定的開發(fā)者簽名一致,如果不一致,或者沒有開發(fā)者簽名,則認為文件已被篡 改,拒絕該APK的安裝和運行。Android平臺下的山寨應(yīng)用程序也不例外,所以APK文件的 開發(fā)者簽名也可以作為識別山寨應(yīng)用程序的一個特征。
[0087] 上述應(yīng)用程序的開發(fā)者簽名,也可稱為代碼簽名,是在應(yīng)用程序上附加一個防偽 和防篡改的開發(fā)者簽名來保護應(yīng)用程序不被惡意修改。如果已安裝的應(yīng)用程序的開發(fā)者簽 名與應(yīng)用程序的官方的開發(fā)者簽名不一致,則可以認為已安裝的應(yīng)用程序可能被惡意修改 過,該應(yīng)用程序是山寨應(yīng)用程序。在提取開發(fā)者簽名時,對于安卓應(yīng)用而言,可以從程序安 裝包中的元信息(META-INF)目錄下提取,META-INF目錄用于存儲包和擴展的配置數(shù)據(jù),例 如安全性信息和版本信息,其中開發(fā)者簽名就存儲于此。META-INF目錄如下表所示:
[0088]
【權(quán)利要求】
1. 一種檢測安裝包是否被二次打包的方法,包括: 解析指定安裝包中的指定部分的二進制文件,得到所述二進制文件中的結(jié)構(gòu)體的第一 排序; 檢測所述第一排序與第二排序是否相同,其中,所述第二排序為二次打包工具對安裝 包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排序; 當(dāng)所述第一排序與所述第二排序相同時,判定所述指定安裝包為二次打包后的文件。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述解析指定安裝包中的指定部分的二進制文 件,得到所述二進制文件中的結(jié)構(gòu)體的第一排序,包括: 根據(jù)所述指定安裝包的壓縮格式對所述安裝包進行解壓縮,得到其中的dex文件和/ 或MF文件; 查看所述dex文件和/或MF文件的二進制文件,對所述二進制文件進行解析得到其中 的多個結(jié)構(gòu)體,并獲得所述結(jié)構(gòu)體的第一排序。
3. 根據(jù)權(quán)利要求2所述的方法,其中,所述二進制文件中的結(jié)構(gòu)體至少包括: 字符表或方法表。
4. 根據(jù)權(quán)利要求2或3所述的方法,其中,所述對所述二進制文件進行解析得到其中的 多個結(jié)構(gòu)體,包括: 根據(jù)操作系統(tǒng)廠商對每種類型的結(jié)構(gòu)體定義的格式在所述二進制文件中查找得到其 中的多個結(jié)構(gòu)體。
5. 根據(jù)權(quán)利要求1至4中任一項所述的方法,其中,在判定所述指定安裝包為二次打包 后的文件之前,還包括: 計算所述指定安裝包的簽名; 確定所述指定安裝包的簽名是否在預(yù)設(shè)的白名單中; 當(dāng)所述指定安裝包的簽名在所述預(yù)設(shè)的白名單中時,判定所述指定安裝包為非二次打 包文件。
6. -種檢測安裝包是否被二次打包的裝置,包括: 解析模塊,適于解析指定安裝包中的指定部分的二進制文件,得到所述二進制文件中 的結(jié)構(gòu)體的第一排序; 排序檢測模塊,適于檢測所述第一排序與第二排序是否相同,其中,所述第二排序為二 次打包工具對安裝包的指定部分編譯后所產(chǎn)生的結(jié)構(gòu)體的排序; 第一判定模塊,適于當(dāng)所述第一排序與所述第二排序相同時,判定所述指定安裝包為 二次打包后的文件。
7. 根據(jù)權(quán)利要求6所述的裝置,其中,所述解析模塊包括: 解壓單元,適于根據(jù)所述安裝包的壓縮格式對所述指定安裝包進行解壓縮,得到其中 的dex文件和/或MF文件; 排序單元,適于查看所述dex文件和/或MF文件的二進制文件,對所述二進制文件進 行解析得到其中的多個結(jié)構(gòu)體,并獲得所述結(jié)構(gòu)體的第一排序。
8. 根據(jù)權(quán)利要求7所述的裝置,其中,所述二進制文件中的結(jié)構(gòu)體至少包括: 字符表或方法表。
9. 根據(jù)權(quán)利要求7或8所述的裝置,其中,所述排序單元適于按照如下方式對所述二進 制文件進行解析得到其中的多個結(jié)構(gòu)體: 根據(jù)操作系統(tǒng)廠商對每種類型的結(jié)構(gòu)體定義的格式在所述二進制文件中查找得到其 中的多個結(jié)構(gòu)體。
10.根據(jù)權(quán)利要求6至9中任一項所述的裝置,其中,所述裝置還包括: 簽名檢測模塊,適于在判定所述指定安裝包為二次打包后的文件之前,計算所述指定 安裝包的簽名,并確定所述指定安裝包的簽名是否在預(yù)設(shè)的白名單中; 第二判定模塊,適于當(dāng)所述簽名檢測模塊確定所述指定安裝包的簽名在所述預(yù)設(shè)的白 名單中時,判定所述指定安裝包為非二次打包文件。
【文檔編號】G06F9/44GK104317599SQ201410601347
【公開日】2015年1月28日 申請日期:2014年10月30日 優(yōu)先權(quán)日:2014年10月30日
【發(fā)明者】路軼 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司