一種用于確定重打包應(yīng)用程序的方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方法,其中,該方法包括以下步驟:a.僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重打包排布規(guī)則山.當(dāng)所述數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定所述應(yīng)用程序?yàn)橹卮虬鼞?yīng)用程序。根據(jù)本發(fā)明的方案,不需要將應(yīng)用程序與相應(yīng)的正版應(yīng)用程序進(jìn)行比對,也不需要收集大量的正版應(yīng)用程序,僅根據(jù)應(yīng)用程序的可執(zhí)行文件即可確定該應(yīng)用程序是否是重打包應(yīng)用程序,其實(shí)現(xiàn)簡單,操作方便,工作量小,且對計(jì)算機(jī)設(shè)備的性能不作特殊的要求。
【專利說明】一種用于確定重打包應(yīng)用程序的方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用 程序的方法和裝置。
【背景技術(shù)】
[0002] 隨著開放式系統(tǒng)更廣泛的市場應(yīng)用,出于各種目的,越來越多的正版應(yīng)用程序在 破解后被篡改,從而生成包含了篡改后的信息的重打包應(yīng)用程序,也稱山寨應(yīng)用程序。這種 重打包應(yīng)用程序已成為安卓系統(tǒng)中病毒的主要來源之一,嚴(yán)重影響了安卓系統(tǒng)的安全性。
[0003] 現(xiàn)有技術(shù)中,在確定一個應(yīng)用程序是否為重打包應(yīng)用程序時(shí),往往需要借助除應(yīng) 用程序自身以外的各種信息。例如,作為一種方案,可收集大量正版應(yīng)用程序來建立特征 庫,并通過將一個應(yīng)用程序的數(shù)字簽名等信息與特征庫中正版應(yīng)用程序的數(shù)字簽名等信息 進(jìn)行比對,來判定該應(yīng)用程序是否為重打包應(yīng)用程序。又如,作為另一種方案,可將待確定 的應(yīng)用程序與正版應(yīng)用程序或已確定的重打包應(yīng)用程序進(jìn)行比對分析,來確定該應(yīng)用程序 是否為重打包應(yīng)用程序。
[0004] 然而,市場上應(yīng)用程序的數(shù)目在不斷增加,很難收集到所有的正版應(yīng)用程序或重 打包應(yīng)用程序,且收集速度很難跟上正版應(yīng)用程序更新的速度,這使得上述方案存在一定 的滯后性,從而通常僅適用于較為流行的少數(shù)應(yīng)用程序。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的是提供一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方法和裝 置。
[0006] 根據(jù)本發(fā)明的一個方面,提供一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方 法,其中,該方法包括以下步驟:
[0007] a.僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排 布是否符合重打包排布規(guī)則;
[0008] b.當(dāng)所述數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定所述應(yīng)用程序?yàn)橹?打包應(yīng)用程序。
[0009] 根據(jù)本發(fā)明的另一個方面,還提供了一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程 序的裝置,其中,該裝置包括以下裝置:
[0010] 用于僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的 排布是否符合重打包排布規(guī)則的裝置;
[0011] 用于當(dāng)所述數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定所述應(yīng)用程序?yàn)?重打包應(yīng)用程序的裝置。
[0012] 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):1)可僅根據(jù)一個應(yīng)用程序的可執(zhí)行文 件,來判斷該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重新編譯后的可執(zhí)行文件通常 具有的重打包排布規(guī)則,從而來確定一個應(yīng)用程序是否是重打包應(yīng)用程序;2)不需要將應(yīng) 用程序與相應(yīng)的正版應(yīng)用程序或已確定的重打包應(yīng)用程序進(jìn)行比對,也即不需要收集大量 正版應(yīng)用程序或已確定的重打包應(yīng)用程序,且僅根據(jù)應(yīng)用程序的可執(zhí)行文件即可確定該應(yīng) 用程序是否是重打包應(yīng)用程序,其實(shí)現(xiàn)簡單,操作方便,工作量小,且對計(jì)算機(jī)設(shè)備的性能 不作特殊的要求。
【專利附圖】
【附圖說明】
[0013] 通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它 特征、目的和優(yōu)點(diǎn)將會變得更明顯:
[0014] 圖1為本發(fā)明一個優(yōu)選實(shí)施例的在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方 法流程示意圖;
[0015] 圖2為安卓應(yīng)用程序的APK文件的結(jié)構(gòu)示意圖;
[0016] 圖3為DEX文件的結(jié)構(gòu)示意圖;
[0017] 圖4為本發(fā)明一個優(yōu)選實(shí)施例的在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的裝 置的結(jié)構(gòu)示意圖。
[0018] 附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
【具體實(shí)施方式】
[0019] 下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)描述。
[0020] 圖1為本發(fā)明一個優(yōu)選實(shí)施例的在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方 法流程示意圖。
[0021] 其中,本實(shí)施例的方法主要通過計(jì)算機(jī)設(shè)備來實(shí)現(xiàn);所述計(jì)算機(jī)設(shè)備包括但不限 于網(wǎng)絡(luò)設(shè)備和用戶設(shè)備;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個網(wǎng)絡(luò)服務(wù)器、多個網(wǎng)絡(luò)服務(wù)器組 成的服務(wù)器組或基于云計(jì)算(Cloud Computing)的由大量計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云, 其中,云計(jì)算是分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)集組成的一個超級虛擬計(jì)算 機(jī);所述網(wǎng)絡(luò)設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等。 所述用戶設(shè)備包括但不限于PC機(jī)、平板電腦、智能手機(jī)、PDA、IPTV等。
[0022] 需要說明的是,所述計(jì)算機(jī)設(shè)備僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計(jì)算設(shè) 備如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并以引用方式包含于此。
[0023] 根據(jù)本實(shí)施例的方法包括步驟S1和步驟S2。
[0024] 在步驟S1中,計(jì)算機(jī)設(shè)備僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重打包排布規(guī)則。
[0025] 其中,所述應(yīng)用程序可優(yōu)選地適用于開放式系統(tǒng)。更優(yōu)選地,所述應(yīng)用程序適用于 安卓系統(tǒng)。
[0026] 其中,所述可執(zhí)行文件為能夠由操作系統(tǒng)加載并執(zhí)行的文件;優(yōu)選地,所述可執(zhí)行 文件為DEX文件。作為一個示例,圖2示出了安卓應(yīng)用程序的APK (Android Package,安卓 安裝包)文件的一種目錄結(jié)構(gòu),所述可執(zhí)行文件可為其中所示的classes, dex文件。在圖 2中,res為存放資源文件的目錄,res目錄下的layout文件為被編譯為屏幕布局(或屏幕 的一部分)的XML文件,res目錄下的drawable用于存放資源文件;ΜΕΤΑ-INF為生成JAR 文件時(shí)創(chuàng)建的文件,該目錄下的MANIFEST. MF文件用于描述JAR文件的相關(guān)信息如屬性信 息等,CERT. SF和CERT. RSA文件為APK簽名文件;resources, arse為編譯后的二進(jìn)制資源 文件,AndroidManifest. xml為程序全局配置文件,classes, dex為安卓應(yīng)用程序的可執(zhí)行 文件。
[0027] 其中,可執(zhí)行文件可包括文件頭、位于文件頭之后的數(shù)據(jù)目錄以及數(shù)據(jù)部分;其 中,文件頭可包括校驗(yàn)信息以及可執(zhí)行文件中其他結(jié)構(gòu)的偏移地址和長度信息,數(shù)據(jù)目錄 可包括數(shù)據(jù)索引信息,數(shù)據(jù)部分可包括數(shù)據(jù)目錄中的索引所指向的數(shù)據(jù)。作為一個示例, 圖3示出了 DEX文件的一種結(jié)構(gòu),DEX文件包括文件頭(header),包括字符串列表(String Table)、類型列表(Type Table)、函數(shù)原型列表(Proto Table)、變量列表(Field Table)、 函數(shù)列表(Method Table)、類定義列表(Class Definition Table)的數(shù)據(jù)目錄,以及數(shù)據(jù) 部分(Data);其中,數(shù)據(jù)部分包括數(shù)據(jù)段(data Section)和Map段(Map Section);其 中,數(shù)據(jù)段包括注釋項(xiàng)(annotation item)、代碼項(xiàng)(code item)、注釋目錄(annotation directory)、接口(interface)、參數(shù)(parameter)、字符串(string)、調(diào)試項(xiàng)(debug item)、注釋設(shè)置(annotation set)、靜態(tài)值(static value)以及類數(shù)據(jù)(class data)等; 其中,Map段包括Map列表(Map List)。
[0028] 其中,所述數(shù)據(jù)部分中的項(xiàng)可包括可執(zhí)行文件的數(shù)據(jù)部分中所包含的任何項(xiàng);優(yōu) 選地,所述數(shù)據(jù)部分中的項(xiàng)包括DEX文件的數(shù)據(jù)部分所包含的項(xiàng)(Item),如Map段中的 Map_Item、數(shù)據(jù)段中的 Class_Def_Item 等。
[0029] 其中,所述重打包排布規(guī)則可包括任何用于指示重打包應(yīng)用程序中的項(xiàng)的特有排 布的規(guī)則;優(yōu)選地,所述重打包排布規(guī)則包括以下至少一項(xiàng):
[0030] 1)規(guī)則一:所述數(shù)據(jù)部分中存在預(yù)定項(xiàng)且該預(yù)定項(xiàng)在預(yù)定位置上。
[0031] 其中,所述預(yù)定項(xiàng)為數(shù)據(jù)部分中的一個被指定的項(xiàng)。其中,所述預(yù)定位置用于指示 被指定的、數(shù)據(jù)部分中的一個位置;優(yōu)選地,所述預(yù)定位置對應(yīng)于數(shù)據(jù)部分中連續(xù)的多個位 (bit)或字節(jié)(byte);更優(yōu)選地,可使用可執(zhí)行文件中的一個數(shù)據(jù)地址來表示該預(yù)定位置, 如使用0x238表示所述預(yù)定位置,也即0x238為該預(yù)定位置的基地址。
[0032] 優(yōu)選地,所述預(yù)定項(xiàng)包括所述數(shù)據(jù)部分的Map列表中的項(xiàng)。更優(yōu)選地,所述預(yù)定項(xiàng) 為TYPE_DEBUG_INF0_ITEM ;且所述預(yù)定項(xiàng)為TYPE_DEBUG_INF0_ITEM時(shí),所述預(yù)定位置可為 Map列表中的倒數(shù)第二個Map_Item所在的位置。
[0033] 2)規(guī)則二:所述數(shù)據(jù)部分中的類定義項(xiàng)的排序不符合預(yù)定排序規(guī)則。優(yōu)選地,規(guī) 則二包括:所述數(shù)據(jù)部分中的類定義項(xiàng)的偏移值的排序?yàn)閬y序。
[0034] 其中,所述類定義項(xiàng)包括可執(zhí)行文件中所使用的任何類的定義項(xiàng);優(yōu)選地,所述類 定義項(xiàng)為DEX文件的數(shù)據(jù)部分中所包含的ClaSS_Def_Item。
[0035] 其中,所述預(yù)定排序規(guī)則包括任何預(yù)定的、各類定義項(xiàng)的排序規(guī)則。例如,所述預(yù) 定排序規(guī)則為:各個類定義項(xiàng)按照類的名稱的字母進(jìn)行順序排列,且類定義項(xiàng)的偏移值按 照從小到大的順序進(jìn)行排序。
[0036] 需要說明的是,上述重打包排布規(guī)則僅為舉例,而非對本發(fā)明的限制,本領(lǐng)域技術(shù) 人員應(yīng)能理解,任何可指示重打包應(yīng)用程序的特有排布的規(guī)則,均應(yīng)包含在本發(fā)明所述的 重打包排布規(guī)則內(nèi)。
[0037] 以下說明當(dāng)重打包排布規(guī)則包括上述規(guī)則一時(shí),計(jì)算機(jī)設(shè)備僅根據(jù)一個應(yīng)用程序 的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式。
[0038] 具體地,計(jì)算機(jī)設(shè)備僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式包括但不限于:
[0039] 1)計(jì)算機(jī)設(shè)備在可執(zhí)行文件的數(shù)據(jù)部分中查找預(yù)定項(xiàng);當(dāng)查找到預(yù)定項(xiàng)且該預(yù) 定項(xiàng)的位置在預(yù)定位置上時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布符合所述規(guī)則一;當(dāng)未能查找到該 預(yù)定項(xiàng),或者,查找到該預(yù)定項(xiàng)且該預(yù)定項(xiàng)的位置不在預(yù)定位置時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排 布不符合所述規(guī)則一。
[0040] 例如,規(guī)則一為:可執(zhí)行文件的數(shù)據(jù)部分中存在預(yù)定項(xiàng)TYPE_DEBUG_INFO_ITEM, 且該預(yù)定項(xiàng)位于Map列表中的倒數(shù)第二個Map Item所在的位置。計(jì)算機(jī)設(shè)備在DEX文件 的數(shù)據(jù)部分中查找該預(yù)定項(xiàng);當(dāng)查找到該預(yù)定項(xiàng)且該預(yù)定項(xiàng)的位置在Map列表中的倒數(shù)第 二個Map Item所在的位置時(shí),計(jì)算機(jī)設(shè)備確定該預(yù)定項(xiàng)的排布符合規(guī)則一;當(dāng)未能查找到 該預(yù)定項(xiàng),或者,該預(yù)定項(xiàng)的位置在Map列表中的倒數(shù)第二個Map Item所在的位置以外的 其他位置上時(shí),計(jì)算機(jī)設(shè)備確定該預(yù)定項(xiàng)的排布不符合規(guī)則一。
[0041] 其中,計(jì)算機(jī)設(shè)備可通過在數(shù)據(jù)部分中查找預(yù)定項(xiàng)所對應(yīng)的類型碼(Type Code), 來查找該預(yù)定項(xiàng)。
[0042] 例如,預(yù)定項(xiàng)為Map列表中的TYPE_DEBUG_INFO_ITEM,且其類型碼為0x2003,則 計(jì)算機(jī)設(shè)備可通過在DEX文件的數(shù)據(jù)部分中查找Type Code為0x2003的項(xiàng),來查找TYPE_ DEBUG_INFO_ITEM。
[0043] 2)計(jì)算機(jī)設(shè)備在所述數(shù)據(jù)部分中查找所述預(yù)定位置;當(dāng)所述預(yù)定位置上存在所 述預(yù)定項(xiàng)時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布符合所述規(guī)則一;當(dāng)所述預(yù)定位置上不存在所述預(yù) 定項(xiàng)時(shí),計(jì)算機(jī)設(shè)備確定所述項(xiàng)的排布不符合所述規(guī)則一。
[0044] 例如,規(guī)則一為:可執(zhí)行文件的數(shù)據(jù)部分中存在預(yù)定項(xiàng)TYPE_DEBUG_INFO_ITEM, 且該預(yù)定項(xiàng)位于Map列表中的倒數(shù)第二個Map Item所在的位置。計(jì)算機(jī)設(shè)備查找數(shù)據(jù)部 分中Map列表的倒數(shù)第二個Map Item所在的位置;當(dāng)該位置上的Type Code為0x2003 (即 TYPE_DEBUG_INFO_ITEM的類型碼)時(shí),計(jì)算機(jī)設(shè)備確定該預(yù)定項(xiàng)的排布符合規(guī)則一;當(dāng)該 位置上的Type Code非0x2003時(shí),計(jì)算機(jī)設(shè)備確定該預(yù)定項(xiàng)的排布不符合規(guī)則一。
[0045] 其中,計(jì)算機(jī)設(shè)備可從可執(zhí)行文件的文件頭中獲取預(yù)定項(xiàng)所在列表的數(shù)據(jù)基地 址,從而進(jìn)一步計(jì)算出預(yù)定位置。
[0046] 例如,計(jì)算機(jī)設(shè)備可從可執(zhí)行文件的文件頭中首先獲取Map數(shù)據(jù)基地址(map_ off),并根據(jù)該Map數(shù)據(jù)基地址讀取Map列表中的Map Item的個數(shù),從而計(jì)算出Map列表 的倒數(shù)第二個Map Item所在的位置。
[0047] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍內(nèi)。
[0048] 需要說明的是,當(dāng)重打包排布規(guī)則僅包括規(guī)則一時(shí),若計(jì)算機(jī)設(shè)備確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合規(guī)則一,相當(dāng)于計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中 的項(xiàng)的排布符合重打包排布規(guī)則,且若計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排 布不符合規(guī)則一,相當(dāng)于計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布不符合重打 包排布規(guī)則。
[0049] 以下說明當(dāng)重打包排布規(guī)則包括上述規(guī)則二時(shí),計(jì)算機(jī)設(shè)備僅根據(jù)一個應(yīng)用程序 的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式。
[0050] 具體地,計(jì)算機(jī)設(shè)備僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式包括但不限于:
[0051] 1)計(jì)算機(jī)設(shè)備檢測當(dāng)前相鄰的兩個類定義項(xiàng)的偏移值之間的差值;當(dāng)所述差值 小于零時(shí),計(jì)算機(jī)設(shè)備將下一個相鄰的兩個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義項(xiàng),并重 復(fù)前一步驟來繼續(xù)執(zhí)行檢測操作;并當(dāng)所述差值大于零時(shí),計(jì)算機(jī)設(shè)備確定所述項(xiàng)的排布 符合規(guī)則二。
[0052] 例如,計(jì)算機(jī)設(shè)備首先獲得第一個類定義項(xiàng)和第二個類定義項(xiàng)的偏移值,并檢測 該相鄰的兩個類定義的偏移值之間的差值;當(dāng)該差值小于零時(shí),計(jì)算機(jī)設(shè)備將第二個類定 義項(xiàng)與第三個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義項(xiàng),并在獲得第三個類定義項(xiàng)的偏移值 之后,檢測第二個類定義項(xiàng)與第三個類定義項(xiàng)的偏移值之間的差值;如此重復(fù),直至檢測到 存在相鄰的兩個類定義項(xiàng)的偏移值之間的差值大于零,或者,已檢測完所有相鄰的兩個類 定義項(xiàng)的偏移值之間的差值。
[0053] 需要說明的是,當(dāng)計(jì)算機(jī)設(shè)備已檢測完所有相鄰的兩個類定義項(xiàng)的偏移值之間的 差值,且所檢測的所有差值均小于零時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布不符合規(guī)則二。
[0054] 其中,所述類定義項(xiàng)用于表示數(shù)據(jù)部分中對該應(yīng)用程序所使用的類的定義;優(yōu)選 地,所述類定義項(xiàng)為DEX文件數(shù)據(jù)部分的數(shù)據(jù)段的類數(shù)據(jù)中的Class_Def_Item。
[0055] 其中,所述偏移值用于指示該類定義項(xiàng)的開始位置距離可執(zhí)行文件的文件頭的偏 移。優(yōu)選地,在DEX文件中,可直接獲取類定義項(xiàng)的類數(shù)據(jù)偏移(Class_Data_0ff)作為該 類定義項(xiàng)的偏移值。更優(yōu)選地,計(jì)算機(jī)設(shè)備根據(jù)從DEX文件的文件頭中讀取到的類定義列 表基地址,來獲取類定義項(xiàng)的類數(shù)據(jù)偏移作為該類定義項(xiàng)的偏移值。
[0056] 例如,計(jì)算機(jī)設(shè)備根據(jù)類定義列表基地址0x0110,計(jì)算得到第一個類定義項(xiàng)的偏 移值的基地址=0x0110+0x0018 = 0x0128,從而根據(jù)該計(jì)算的到的基地址讀取到第一個類 定義項(xiàng)的類數(shù)據(jù)偏移,作為該類定義項(xiàng)的偏移值,其中,0x0018為可預(yù)先確定的固定值。 [0057] 需要說明的是,重打包應(yīng)用程序中類定義項(xiàng)的偏移值的排序往往與正版應(yīng)用程序 中類定義項(xiàng)的偏移值的排序不一致,正版應(yīng)用程序中類定義項(xiàng)的偏移值是按照從小到大的 順序來進(jìn)行排序,而重打包應(yīng)用程序中會出現(xiàn)相鄰的兩個類定義項(xiàng)的偏移值之間的差值大 于零的情況。
[0058] 2)計(jì)算機(jī)設(shè)備讀取每個類定義項(xiàng)的偏移值;當(dāng)各個類定義項(xiàng)的偏移值的排列為 順序時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布不符合所述規(guī)則二;當(dāng)所述偏移值的排列為亂序時(shí),計(jì)算 機(jī)設(shè)備確定項(xiàng)的排布符合所述規(guī)則二。
[0059] 例如,DEX文件的數(shù)據(jù)部分包括4個類定義項(xiàng),計(jì)算機(jī)設(shè)備讀取該4個類定義項(xiàng)的 偏移值依次為:〇x〇227、〇 X〇247、〇X〇267、〇X〇287。計(jì)算機(jī)設(shè)備確定該等偏移值的排列為順 序,則計(jì)算機(jī)設(shè)備確定項(xiàng)的排布不符合規(guī)則二。
[0060] 又例如,DEX文件的數(shù)據(jù)部分包括4個類定義項(xiàng),計(jì)算機(jī)設(shè)備讀取該4個類定義項(xiàng) 的偏移值依次為=0x0227、0x0267、0x0287、0x0247。計(jì)算機(jī)設(shè)備確定該等偏移值的排列為亂 序,則計(jì)算機(jī)設(shè)備確定項(xiàng)的排布符合規(guī)則二。
[0061] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍內(nèi)。
[0062] 需要說明的是,當(dāng)重打包排布規(guī)則僅包括規(guī)則二時(shí),若計(jì)算機(jī)設(shè)備確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合規(guī)則二,相當(dāng)于計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中 的項(xiàng)的排布符合重打包排布規(guī)則,且若計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排 布不符合規(guī)則二,相當(dāng)于計(jì)算機(jī)設(shè)備確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布不符合重打 包排布規(guī)則。
[0063] 需要說明的是,當(dāng)重打包排布規(guī)則包括上述規(guī)則一和規(guī)則二時(shí),計(jì)算機(jī)設(shè)備可在 可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布同時(shí)符合規(guī)則一和規(guī)則二的情況下,才確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則;或者,計(jì)算機(jī)設(shè)備可在可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布符合規(guī)則一或規(guī)則二中的一者的情況下,確定可執(zhí)行文件的數(shù)據(jù)部分 中的項(xiàng)的排布符合重打包排布規(guī)則。
[0064] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重打包排布規(guī)則的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍 內(nèi)。
[0065] 在步驟S2中,當(dāng)數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),計(jì)算機(jī)設(shè)備確定 所述應(yīng)用程序?yàn)橹卮虬鼞?yīng)用程序。
[0066] 具體地,當(dāng)可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),則計(jì)算 機(jī)設(shè)備可確定該應(yīng)用程序?yàn)橹卮虬鼞?yīng)用程序,即被破解并重新編譯的程序。
[0067] 現(xiàn)有技術(shù)中,通常采用重新編譯可執(zhí)行文件的方法來重打包一個應(yīng)用程序。例如, 對圖2所示APK文件,通常采用Apktool工具將該APK文件中的classes, dex文件反編譯 成Smali文件,然后在該Smali文件進(jìn)行一定的修改,再將修改后的Smali文件重新編譯成 Dex〇
[0068] 然而,在上述重新編譯可執(zhí)行文件的過程中,通常會引起可執(zhí)行文件中項(xiàng)的排布 發(fā)現(xiàn)變化。
[0069] 根據(jù)本發(fā)明的方案,可僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,來判斷該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重新編譯后的可執(zhí)行文件通常具有的重打包排布規(guī)則, 從而來確定一個應(yīng)用程序是否是重打包應(yīng)用程序;本發(fā)明的方案不需要將應(yīng)用程序與相應(yīng) 的正版應(yīng)用程序或已確定的重打包應(yīng)用程序進(jìn)行比對,也即不需要收集大量正版應(yīng)用程序 或已確定的重打包應(yīng)用程序,且僅根據(jù)應(yīng)用程序的可執(zhí)行文件即可確定該應(yīng)用程序是否是 重打包應(yīng)用程序,其實(shí)現(xiàn)簡單,操作方便,工作量小,且對計(jì)算機(jī)設(shè)備的性能不作特殊的要 求。
[0070] 圖3為本發(fā)明一個優(yōu)選實(shí)施例的在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的裝 置的結(jié)構(gòu)示意圖。本實(shí)施例的用于確定重打包應(yīng)用程序的裝置(以下簡稱"重打包確定裝 置")包括用于僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的 排布是否符合重打包排布規(guī)則的裝置(以下簡稱"檢測裝置1"),以及用于當(dāng)數(shù)據(jù)部分中的 項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定用于程序?yàn)橹卮虬鼞?yīng)用程序的裝置(以下簡稱"第 一確定裝置2")。
[0071] 檢測裝置1僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中 的項(xiàng)的排布是否符合重打包排布規(guī)則。
[0072] 其中,所述應(yīng)用程序可優(yōu)選地適用于開放式系統(tǒng)。更優(yōu)選地,所述應(yīng)用程序適用于 安卓系統(tǒng)。
[0073] 其中,所述可執(zhí)行文件為能夠由操作系統(tǒng)加載并執(zhí)行的文件;優(yōu)選地,所述可執(zhí)行 文件為DEX文件。作為一個示例,圖2示出了安卓應(yīng)用程序的APK (Android Package,安卓 安裝包)文件的一種目錄結(jié)構(gòu),所述可執(zhí)行文件可為其中所示的classes, dex文件。在圖 2中,res為存放資源文件的目錄,res目錄下的layout文件為被編譯為屏幕布局(或屏幕 的一部分)的XML文件,res目錄下的drawable用于存放資源文件;ΜΕΤΑ-INF為生成JAR 文件時(shí)創(chuàng)建的文件,該目錄下的MANIFEST. MF文件用于描述JAR文件的相關(guān)信息如屬性信 息等,CERT. SF和CERT. RSA文件為APK簽名文件;resources, arse為編譯后的二進(jìn)制資源 文件,AndroidManifest. xml為程序全局配置文件,classes, dex為安卓應(yīng)用程序的可執(zhí)行 文件。
[0074] 其中,可執(zhí)行文件可包括文件頭、位于文件頭之后的數(shù)據(jù)目錄以及數(shù)據(jù)部分;其 中,文件頭可包括校驗(yàn)信息以及可執(zhí)行文件中其他結(jié)構(gòu)的偏移地址和長度信息,數(shù)據(jù)目錄 可包括數(shù)據(jù)索引信息,數(shù)據(jù)部分可包括數(shù)據(jù)目錄中的索引所指向的數(shù)據(jù)。作為一個示例, 圖3示出了 DEX文件的一種結(jié)構(gòu),DEX文件包括文件頭(header),包括字符串列表(String Table)、類型列表(Type Table)、函數(shù)原型列表(Proto Table)、變量列表(Field Table)、 函數(shù)列表(Method Table)、類定義列表(Class Definition Table)的數(shù)據(jù)目錄,以及數(shù)據(jù) 部分(Data);其中,數(shù)據(jù)部分包括數(shù)據(jù)段(data Section)和Map段(Map Section);其 中,數(shù)據(jù)段包括注釋項(xiàng)(annotation item)、代碼項(xiàng)(code item)、注釋目錄(annotation directory)、接口(interface)、參數(shù)(parameter)、字符串(string)、調(diào)試項(xiàng)(debug item)、注釋設(shè)置(annotation set)、靜態(tài)值(static value)以及類數(shù)據(jù)(class data)等; 其中,Map段包括Map列表(Map List)。
[0075] 其中,所述數(shù)據(jù)部分中的項(xiàng)可包括可執(zhí)行文件的數(shù)據(jù)部分中所包含的任何項(xiàng);優(yōu) 選地,所述數(shù)據(jù)部分中的項(xiàng)包括DEX文件的數(shù)據(jù)部分所包含的項(xiàng)(Item),如Map段中的 Map_Item、數(shù)據(jù)段中的 Class_Def_Item 等。
[0076] 其中,所述重打包排布規(guī)則可包括任何用于指示重打包應(yīng)用程序中的項(xiàng)的特有排 布的規(guī)則;優(yōu)選地,所述重打包排布規(guī)則包括以下至少一項(xiàng):
[0077] 1)規(guī)則一:所述數(shù)據(jù)部分中存在預(yù)定項(xiàng)且該預(yù)定項(xiàng)在預(yù)定位置上。
[0078] 其中,所述預(yù)定項(xiàng)為數(shù)據(jù)部分中的一個被指定的項(xiàng)。其中,所述預(yù)定位置用于指示 被指定的、數(shù)據(jù)部分中的一個位置;優(yōu)選地,所述預(yù)定位置對應(yīng)于數(shù)據(jù)部分中連續(xù)的多個位 (bit)或字節(jié)(byte);更優(yōu)選地,可使用可執(zhí)行文件中的一個數(shù)據(jù)地址來表示該預(yù)定位置, 如使用0x238表示所述預(yù)定位置,也即0x238為該預(yù)定位置的基地址。
[0079] 優(yōu)選地,所述預(yù)定項(xiàng)包括所述數(shù)據(jù)部分的Map列表中的項(xiàng)。更優(yōu)選地,所述預(yù)定項(xiàng) 為TYPE_DEBUG_INF0_ITEM ;且所述預(yù)定項(xiàng)為TYPE_DEBUG_INF0_ITEM時(shí),所述預(yù)定位置可為 Map列表中的倒數(shù)第二個Map_Item所在的位置。
[0080] 2)規(guī)則二:所述數(shù)據(jù)部分中的類定義項(xiàng)的排序不符合預(yù)定排序規(guī)則。優(yōu)選地,規(guī) 則二包括:所述數(shù)據(jù)部分中的類定義項(xiàng)的偏移值的排序?yàn)閬y序。
[0081] 其中,所述類定義項(xiàng)包括可執(zhí)行文件中所使用的任何類的定義項(xiàng);優(yōu)選地,所述類 定義項(xiàng)為DEX文件的數(shù)據(jù)部分中所包含的ClaSS_Def_Item。
[0082] 其中,所述預(yù)定排序規(guī)則包括任何預(yù)定的、各類定義項(xiàng)的排序規(guī)則。例如,所述預(yù) 定排序規(guī)則為:各個類定義項(xiàng)按照類的名稱的字母進(jìn)行順序排列,且類定義項(xiàng)的偏移值按 照從小到大的順序進(jìn)行排序。
[0083] 需要說明的是,上述重打包排布規(guī)則僅為舉例,而非對本發(fā)明的限制,本領(lǐng)域技術(shù) 人員應(yīng)能理解,任何可指示重打包應(yīng)用程序的特有排布的規(guī)則,均應(yīng)包含在本發(fā)明所述的 重打包排布規(guī)則內(nèi)。
[0084] 以下說明當(dāng)重打包排布規(guī)則包括上述規(guī)則一時(shí),檢測裝置1僅根據(jù)一個應(yīng)用程序 的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式。
[0085] 具體地,檢測裝置1僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式包括但不限于:
[0086] 1)檢測裝置1包括第一查找裝置(圖未示)、第二確定裝置(圖未示)和第三確 定裝置(圖未示)。第一查找裝置用于在可執(zhí)行文件的數(shù)據(jù)部分中查找預(yù)定項(xiàng);第二確定 裝置用于當(dāng)查找到預(yù)定項(xiàng)且該預(yù)定項(xiàng)的位置在預(yù)定位置上時(shí),確定項(xiàng)的排布符合所述規(guī)則 一;第三確定裝置用于當(dāng)未能查找到該預(yù)定項(xiàng),或者,查找到該預(yù)定項(xiàng)且該預(yù)定項(xiàng)的位置不 在預(yù)定位置時(shí),確定項(xiàng)的排布不符合所述規(guī)則一。
[0087] 例如,規(guī)則一為:可執(zhí)行文件的數(shù)據(jù)部分中存在預(yù)定項(xiàng)TYPE_DEBUG_INFO_ITEM, 且該預(yù)定項(xiàng)位于Map列表中的倒數(shù)第二個Map Item所在的位置。第一查找裝置在DEX文 件的數(shù)據(jù)部分中查找該預(yù)定項(xiàng);當(dāng)查找到該預(yù)定項(xiàng)且該預(yù)定項(xiàng)的位置在Map列表中的倒數(shù) 第二個Map Item所在的位置時(shí),第二確定裝置確定該預(yù)定項(xiàng)的排布符合規(guī)則一;當(dāng)未能查 找到該預(yù)定項(xiàng),或者,該預(yù)定項(xiàng)的位置在Map列表中的倒數(shù)第二個Map Item所在的位置以 外的其他位置上時(shí),第三確定裝置確定該預(yù)定項(xiàng)的排布不符合規(guī)則一。
[0088] 其中,第一查找裝置可通過在數(shù)據(jù)部分中查找預(yù)定項(xiàng)所對應(yīng)的類型碼(Type Code),來查找該預(yù)定項(xiàng)。
[0089] 例如,預(yù)定項(xiàng)為Map列表中的TYPE_DEBUG_INFO_ITEM,且其類型碼為0x2003,第 一查找裝置可通過在DEX文件的數(shù)據(jù)部分中查找Type Code為0x2003的項(xiàng),來查找TYPE_ DEBUG_INFO_ITEM。
[0090] 2)檢測裝置1包括第二查找裝置(圖未示)、第四確定裝置(圖未示)和第五確 定裝置(圖未示)。第二查找裝置用于在所述數(shù)據(jù)部分中查找所述預(yù)定位置;第四確定裝 置用于當(dāng)所述預(yù)定位置上存在所述預(yù)定項(xiàng)時(shí),確定項(xiàng)的排布符合所述規(guī)則一;第五確定裝 置用于當(dāng)所述預(yù)定位置上不存在所述預(yù)定項(xiàng)時(shí),確定所述項(xiàng)的排布不符合所述規(guī)則一。
[0091] 例如,規(guī)則一為:可執(zhí)行文件的數(shù)據(jù)部分中存在預(yù)定項(xiàng)TYPE_DEBUG_INFO_ITEM, 且該預(yù)定項(xiàng)位于Map列表中的倒數(shù)第二個Map Item所在的位置。第二查找裝置查找數(shù)據(jù)部 分中Map列表的倒數(shù)第二個Map Item所在的位置;當(dāng)該位置上的Type Code為0x2003 (即 TYPE_DEBUG_INFO_ITEM的類型碼)時(shí),第四確定裝置確定該預(yù)定項(xiàng)的排布符合規(guī)則一;當(dāng) 該位置上的Type Code非0x2003時(shí),第五確定裝置確定該預(yù)定項(xiàng)的排布不符合規(guī)則一。 [0092] 其中,第二查找裝置可從可執(zhí)行文件的文件頭中獲取預(yù)定項(xiàng)所在列表的數(shù)據(jù)基地 址,從而進(jìn)一步計(jì)算出預(yù)定位置。
[0093] 例如,第二查找裝置可從可執(zhí)行文件的文件頭中首先獲取Map數(shù)據(jù)基地址(map_ off),并根據(jù)該Map數(shù)據(jù)基地址讀取Map列表中的Map Item的個數(shù),從而計(jì)算出Map列表 的倒數(shù)第二個Map Item所在的位置。
[0094] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則一的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍內(nèi)。
[0095] 需要說明的是,當(dāng)重打包排布規(guī)則僅包括規(guī)則一時(shí),若檢測裝置1確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合規(guī)則一,相當(dāng)于檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中 的項(xiàng)的排布符合重打包排布規(guī)則,且若檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排 布不符合規(guī)則一,相當(dāng)于檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布不符合重打 包排布規(guī)則。
[0096] 以下說明當(dāng)重打包排布規(guī)則包括上述規(guī)則二時(shí),檢測裝置1僅根據(jù)一個應(yīng)用程序 的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式。
[0097] 具體地,檢測裝置1僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式包括但不限于:
[0098] 1)檢測裝置1包括子檢測裝置(圖未示)、迭代裝置(圖未示)和第六確定裝置 (圖未示)。子檢測裝置用于檢測當(dāng)前相鄰的兩個類定義項(xiàng)的偏移值之間的差值;迭代裝置 用于當(dāng)所述差值小于零時(shí),將下一個相鄰的兩個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義項(xiàng), 并觸發(fā)子檢測裝置重復(fù)執(zhí)行操作;第六確定裝置用于當(dāng)所述差值大于零時(shí),確定所述項(xiàng)的 排布符合規(guī)則二。
[0099] 例如,子檢測裝置首先獲得第一個類定義項(xiàng)和第二個類定義項(xiàng)的偏移值,并檢測 該相鄰的兩個類定義的偏移值之間的差值;當(dāng)該差值小于零時(shí),迭代裝置將第二個類定義 項(xiàng)與第三個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義項(xiàng),并在獲得第三個類定義項(xiàng)的偏移值之 后,觸發(fā)子檢測裝置重復(fù)執(zhí)行操作來檢測第二個類定義項(xiàng)與第三個類定義項(xiàng)的偏移值之間 的差值;如此重復(fù),直至檢測到存在相鄰的兩個類定義項(xiàng)的偏移值之間的差值大于零,或 者,已檢測完所有相鄰的兩個類定義項(xiàng)的偏移值之間的差值。
[0100] 需要說明的是,當(dāng)已檢測完所有相鄰的兩個類定義項(xiàng)的偏移值之間的差值,且所 檢測的所有差值均小于零時(shí),檢測裝置1確定項(xiàng)的排布不符合規(guī)則二。
[0101] 其中,所述類定義項(xiàng)用于表示數(shù)據(jù)部分中對該應(yīng)用程序所使用的類的定義;優(yōu)選 地,所述類定義項(xiàng)為DEX文件數(shù)據(jù)部分的數(shù)據(jù)段的類數(shù)據(jù)中的Class_Def_Item。
[0102] 其中,所述偏移值用于指示該類定義項(xiàng)的開始位置距離可執(zhí)行文件的文件頭的偏 移。優(yōu)選地,在DEX文件中,可直接獲取類定義項(xiàng)的類數(shù)據(jù)偏移(Class_Data_0ff)作為該 類定義項(xiàng)的偏移值。更優(yōu)選地,子檢測裝置可根據(jù)從DEX文件的文件頭中讀取到的類定義 列表基地址,來獲取類定義項(xiàng)的類數(shù)據(jù)偏移作為該類定義項(xiàng)的偏移值。
[0103] 例如,子檢測裝置根據(jù)類定義列表基地址0x0110,計(jì)算得到第一個類定義項(xiàng)的偏 移值的基地址=0x0110+0x0018 = 0x0128,從而根據(jù)該計(jì)算的到的基地址讀取到第一個類 定義項(xiàng)的類數(shù)據(jù)偏移,作為該類定義項(xiàng)的偏移值,其中,0x0018為可預(yù)先確定的固定值。
[0104] 需要說明的是,重打包應(yīng)用程序中類定義項(xiàng)的偏移值的排序往往與正版應(yīng)用程序 中類定義項(xiàng)的偏移值的排序不一致,正版應(yīng)用程序中類定義項(xiàng)的偏移值是按照從小到大的 順序來進(jìn)行排序,而重打包應(yīng)用程序中會出現(xiàn)相鄰的兩個類定義項(xiàng)的偏移值之間的差值大 于零的情況。
[0105] 2)檢測裝置1包括讀取裝置(圖未示)、第七確定裝置(圖未示)和第八確定裝 置(圖未示)。讀取裝置用于讀取每個類定義項(xiàng)的偏移值;第七確定裝置用于當(dāng)各個類定 義項(xiàng)的偏移值的排列為順序時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布不符合所述規(guī)則二;第八確定裝 置用于當(dāng)所述偏移值的排列為亂序時(shí),計(jì)算機(jī)設(shè)備確定項(xiàng)的排布符合所述規(guī)則二。
[0106] 例如,DEX文件的數(shù)據(jù)部分包括4個類定義項(xiàng),讀取裝置讀取該4個類定義項(xiàng)的偏 移值依次為:〇x〇227、〇 X〇247、〇X〇267、〇X〇287。第七確定裝置確定該等偏移值的排列為順 序,則第七確定裝置確定項(xiàng)的排布不符合規(guī)則二。
[0107] 又例如,DEX文件的數(shù)據(jù)部分包括4個類定義項(xiàng),讀取裝置讀取該4個類定義項(xiàng)的 偏移值依次為:〇x〇227、〇 X〇267、〇X〇287、〇X〇247。第八確定裝置確定該等偏移值的排列為亂 序,則第八確定裝置確定項(xiàng)的排布符合規(guī)則二。
[0108] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合規(guī)則二的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍內(nèi)。
[0109] 需要說明的是,當(dāng)重打包排布規(guī)則僅包括規(guī)則二時(shí),若檢測裝置1確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合規(guī)則二,相當(dāng)于檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中 的項(xiàng)的排布符合重打包排布規(guī)則,且若檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排 布不符合規(guī)則二,相當(dāng)于檢測裝置1確定可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布不符合重打 包排布規(guī)則。
[0110] 需要說明的是,當(dāng)重打包排布規(guī)則包括上述規(guī)則一和規(guī)則二時(shí),檢測裝置1可在 可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布同時(shí)符合規(guī)則一和規(guī)則二的情況下,才確定可執(zhí)行文 件的數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則;或者,檢測裝置1可在可執(zhí)行文件的數(shù) 據(jù)部分中的項(xiàng)的排布符合規(guī)則一或規(guī)則二中的一者的情況下,確定可執(zhí)行文件的數(shù)據(jù)部分 中的項(xiàng)的排布符合重打包排布規(guī)則。
[0111] 需要說明的是,上述舉例僅為更好地說明本發(fā)明的技術(shù)方案,而非對本發(fā)明的限 制,本領(lǐng)域技術(shù)人員應(yīng)該理解,任何僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重打包排布規(guī)則的實(shí)現(xiàn)方式,均應(yīng)包含在本發(fā)明的范圍 內(nèi)。
[0112] 當(dāng)數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),第一確定裝置2確定所述應(yīng)用 程序?yàn)橹卮虬鼞?yīng)用程序。
[0113] 具體地,當(dāng)可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),則第一 確定裝置2可確定該應(yīng)用程序?yàn)橹卮虬鼞?yīng)用程序,即被破解并重新編譯的程序。
[0114] 現(xiàn)有技術(shù)中,通常采用重新編譯可執(zhí)行文件的方法來重打包一個應(yīng)用程序。例如, 對圖2所示APK文件,通常采用Apktool工具將該APK文件中的classes, dex文件反編譯 成Smali文件,然后在該Smali文件進(jìn)行一定的修改,再將修改后的Smali文件重新編譯成 Dex〇
[0115] 然而,在上述重新編譯可執(zhí)行文件的過程中,通常會引起可執(zhí)行文件中項(xiàng)的排布 發(fā)現(xiàn)變化。
[0116] 根據(jù)本發(fā)明的方案,可僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,來判斷該可執(zhí)行文件 的數(shù)據(jù)部分中的項(xiàng)的排布是否符合重新編譯后的可執(zhí)行文件通常具有的重打包排布規(guī)則, 從而來確定一個應(yīng)用程序是否是重打包應(yīng)用程序;本發(fā)明的方案不需要將應(yīng)用程序與相應(yīng) 的正版應(yīng)用程序或已確定的重打包應(yīng)用程序進(jìn)行比對,也即不需要收集大量正版應(yīng)用程序 或已確定的重打包應(yīng)用程序,且僅根據(jù)應(yīng)用程序的可執(zhí)行文件即可確定該應(yīng)用程序是否是 重打包應(yīng)用程序,其實(shí)現(xiàn)簡單,操作方便,工作量小,且對計(jì)算機(jī)設(shè)備的性能不作特殊的要 求。
[0117] 需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,本發(fā) 明的各個裝置可采用專用集成電路(ASIC)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個實(shí)施 例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明 的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲 器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本發(fā)明的一些步驟或功能可采用硬件來實(shí) 現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
[0118] 對于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在 不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論 從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán) 利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有 變化涵括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此 夕卜,顯然"包括" 一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。系統(tǒng)權(quán)利要求中陳述的多 個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來 表示名稱,而并不表示任何特定的順序。
【權(quán)利要求】
1. 一種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的方法,其中,該方法包括以下步 驟: a. 僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布是 否符合重打包排布規(guī)則; b. 當(dāng)所述數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定所述應(yīng)用程序?yàn)橹卮虬?應(yīng)用程序。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述重打包排布規(guī)則包括以下至少一項(xiàng): 規(guī)則一:所述數(shù)據(jù)部分中存在預(yù)定項(xiàng)且該預(yù)定項(xiàng)在預(yù)定位置上; 規(guī)則二:所述數(shù)據(jù)部分中的類定義項(xiàng)的排序不符合預(yù)定排序規(guī)則。
3. 根據(jù)權(quán)利要求2所述的方法,其中,所述重打包排布規(guī)則包括所述規(guī)則一,所述步驟 a包括以下步驟: -在所述數(shù)據(jù)部分中查找所述預(yù)定項(xiàng); -當(dāng)查找到所述預(yù)定項(xiàng)且所述預(yù)定項(xiàng)的位置在所述預(yù)定位置上時(shí),確定所述項(xiàng)的排布 符合所述規(guī)則一; -當(dāng)未能查找到所述預(yù)定項(xiàng),或者,查找到所述預(yù)定項(xiàng)且所述預(yù)定項(xiàng)的位置不在所述預(yù) 定位置時(shí),確定所述項(xiàng)的排布不符合所述規(guī)則一。
4. 根據(jù)權(quán)利要求2所述的方法,其中,所述重打包排布規(guī)則包括所述規(guī)則一,所述步驟 a包括以下步驟: -在所述數(shù)據(jù)部分中查找所述預(yù)定位置; -當(dāng)所述預(yù)定位置上存在所述預(yù)定項(xiàng)時(shí),確定所述項(xiàng)的排布符合所述規(guī)則一; -當(dāng)所述預(yù)定位置上不存在所述預(yù)定項(xiàng)時(shí),確定所述項(xiàng)的排布不符合所述規(guī)則一。
5. 根據(jù)權(quán)利要求2至4中任一項(xiàng)所述的方法,其中,所述預(yù)定項(xiàng)包括所述數(shù)據(jù)部分的 Map列表中的項(xiàng)。
6. 根據(jù)權(quán)利要求2所述的方法,其中,所述重打包排布規(guī)則包括所述規(guī)則二,所述步驟 a包括以下步驟: al檢測當(dāng)前相鄰的兩個類定義項(xiàng)的偏移值之間的差值; a2當(dāng)所述差值小于零時(shí),將下一個相鄰的兩個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義 項(xiàng),并重復(fù)所述步驟al ; a3當(dāng)所述差值大于零時(shí),確定所述項(xiàng)的排布符合規(guī)則二。
7. 根據(jù)權(quán)利要求2所述的方法,其中,所述重打包排布規(guī)則包括所述規(guī)則二,所述步驟 a包括以下步驟: -讀取每個類定義項(xiàng)的偏移值; -當(dāng)所述偏移值的排列為順序時(shí),確定項(xiàng)的排布不符合所述規(guī)則二; -當(dāng)所述偏移值的排列為亂序時(shí),確定項(xiàng)的排布符合所述規(guī)則二。
8. 根據(jù)權(quán)利要求1至7中任一項(xiàng)所述的方法,其中,所述應(yīng)用程序適用于安卓系統(tǒng)。
9. 根據(jù)權(quán)利要求8中任一項(xiàng)所述的方法,其中,所述可執(zhí)行文件為dex文件。
10. -種在計(jì)算機(jī)設(shè)備中用于確定重打包應(yīng)用程序的裝置,其中,該裝置包括以下裝 置: 用于僅根據(jù)一個應(yīng)用程序的可執(zhí)行文件,檢測該可執(zhí)行文件的數(shù)據(jù)部分中的項(xiàng)的排布 是否符合重打包排布規(guī)則的裝置; 用于當(dāng)所述數(shù)據(jù)部分中的項(xiàng)的排布符合重打包排布規(guī)則時(shí),確定所述應(yīng)用程序?yàn)橹卮?包應(yīng)用程序的裝置。
11. 根據(jù)權(quán)利要求10所述的裝置,其中,所述重打包排布規(guī)則包括以下至少一項(xiàng): 規(guī)則一:所述數(shù)據(jù)部分中存在預(yù)定項(xiàng)且該預(yù)定項(xiàng)在預(yù)定位置上; 規(guī)則二:所述數(shù)據(jù)部分中的類定義項(xiàng)的排序不符合預(yù)定排序規(guī)則。
12. 根據(jù)權(quán)利要求11所述的裝置,其中,所述重打包排布規(guī)則包括所述規(guī)則一,所述用 于檢測的裝置包括以下裝置: 用于在所述數(shù)據(jù)部分中查找所述預(yù)定項(xiàng)的裝置; 用于當(dāng)查找到所述預(yù)定項(xiàng)且所述預(yù)定項(xiàng)的位置在所述預(yù)定位置上時(shí),確定所述項(xiàng)的排 布符合所述規(guī)則一的裝置; 用于當(dāng)未能查找到所述預(yù)定項(xiàng),或者,查找到所述預(yù)定項(xiàng)且所述預(yù)定項(xiàng)的位置不在所 述預(yù)定位置時(shí),確定所述項(xiàng)的排布不符合所述規(guī)則一的裝置。
13. 根據(jù)權(quán)利要求11所述的裝置,其中,所述重打包排布規(guī)則包括所述規(guī)則一,所述用 于檢測的裝置包括以下裝置: 用于在所述數(shù)據(jù)部分中查找所述預(yù)定位置的裝置; 用于當(dāng)所述預(yù)定位置上存在所述預(yù)定項(xiàng)時(shí),確定所述項(xiàng)的排布符合所述規(guī)則一的裝 置; 用于當(dāng)所述預(yù)定位置上不存在所述預(yù)定項(xiàng)時(shí),確定所述項(xiàng)的排布不符合所述規(guī)則一的 裝直。
14. 根據(jù)權(quán)利要求11至13中任一項(xiàng)所述的裝置,其中,所述預(yù)定項(xiàng)包括所述數(shù)據(jù)部分 的Map列表中的項(xiàng)。
15. 根據(jù)權(quán)利要求11所述的裝置,其中,所述重打包排布規(guī)則包括所述規(guī)則二,所述用 于檢測的裝置包括以下裝置: 用于檢測當(dāng)前相鄰的兩個類定義項(xiàng)的偏移值時(shí)間的差值的裝置; 用于當(dāng)所述差值小于零時(shí),將下一個相鄰的兩個類定義項(xiàng)作為當(dāng)前相鄰的兩個類定義 項(xiàng),并觸發(fā)用于檢測差值的裝置重復(fù)執(zhí)行操作的裝置; 用于當(dāng)所述差值大于零時(shí),確定所述項(xiàng)的排布符合規(guī)則二的裝置。
16. 根據(jù)權(quán)利要求11所述的裝置,其中,所述重打包排布規(guī)則包括所述規(guī)則二,所述用 于檢測的裝置包括以下裝置: 用于讀取每個類定義項(xiàng)的偏移值的裝置; 用于當(dāng)所述偏移值的排列為順序時(shí),確定項(xiàng)的排布不符合所述規(guī)則二的裝置; 用于當(dāng)所述偏移值的排列為亂序時(shí),確定項(xiàng)的排布符合所述規(guī)則二的裝置。
17. 根據(jù)權(quán)利要求10至16中任一項(xiàng)所述的裝置,其中,所述應(yīng)用程序適用于安卓系統(tǒng)。
18. 根據(jù)權(quán)利要求17中任一項(xiàng)所述的裝置,其中,所述可執(zhí)行文件為dex文件。
【文檔編號】G06F17/30GK104216946SQ201410373867
【公開日】2014年12月17日 申請日期:2014年7月31日 優(yōu)先權(quán)日:2014年7月31日
【發(fā)明者】周榮譽(yù) 申請人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司