《一种用于确定重打包应用程序的方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种用于确定重打包应用程序的方法和装置.pdf(16页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104216946A43申请公布日20141217CN104216946A21申请号201410373867122申请日20140731G06F17/3020060171申请人百度在线网络技术(北京)有限公司地址100085北京市海淀区上地十街10号百度大厦72发明人周荣誉74专利代理机构北京汉昊知识产权代理事务所普通合伙11370代理人罗朋54发明名称一种用于确定重打包应用程序的方法和装置57摘要本发明提供了一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤A仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;。
2、B当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序。根据本发明的方案,不需要将应用程序与相应的正版应用程序进行比对,也不需要收集大量的正版应用程序,仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。51INTCL权利要求书2页说明书11页附图2页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书11页附图2页10申请公布号CN104216946ACN104216946A1/2页21一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤A仅根据一。
3、个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;B当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序。2根据权利要求1所述的方法,其中,所述重打包排布规则包括以下至少一项规则一所述数据部分中存在预定项且该预定项在预定位置上;规则二所述数据部分中的类定义项的排序不符合预定排序规则。3根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则一,所述步骤A包括以下步骤在所述数据部分中查找所述预定项;当查找到所述预定项且所述预定项的位置在所述预定位置上时,确定所述项的排布符合所述规则一;当未能查找到所述预定项,或者,查找到所述预。
4、定项且所述预定项的位置不在所述预定位置时,确定所述项的排布不符合所述规则一。4根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则一,所述步骤A包括以下步骤在所述数据部分中查找所述预定位置;当所述预定位置上存在所述预定项时,确定所述项的排布符合所述规则一;当所述预定位置上不存在所述预定项时,确定所述项的排布不符合所述规则一。5根据权利要求2至4中任一项所述的方法,其中,所述预定项包括所述数据部分的MAP列表中的项。6根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则二,所述步骤A包括以下步骤A1检测当前相邻的两个类定义项的偏移值之间的差值;A2当所述差值小于零时,将下一个。
5、相邻的两个类定义项作为当前相邻的两个类定义项,并重复所述步骤A1;A3当所述差值大于零时,确定所述项的排布符合规则二。7根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则二,所述步骤A包括以下步骤读取每个类定义项的偏移值;当所述偏移值的排列为顺序时,确定项的排布不符合所述规则二;当所述偏移值的排列为乱序时,确定项的排布符合所述规则二。8根据权利要求1至7中任一项所述的方法,其中,所述应用程序适用于安卓系统。9根据权利要求8中任一项所述的方法,其中,所述可执行文件为DEX文件。10一种在计算机设备中用于确定重打包应用程序的装置,其中,该装置包括以下装置用于仅根据一个应用程序的可执行文。
6、件,检测该可执行文件的数据部分中的项的排布权利要求书CN104216946A2/2页3是否符合重打包排布规则的装置;用于当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序的装置。11根据权利要求10所述的装置,其中,所述重打包排布规则包括以下至少一项规则一所述数据部分中存在预定项且该预定项在预定位置上;规则二所述数据部分中的类定义项的排序不符合预定排序规则。12根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则一,所述用于检测的装置包括以下装置用于在所述数据部分中查找所述预定项的装置;用于当查找到所述预定项且所述预定项的位置在所述预定位置上时,确定所。
7、述项的排布符合所述规则一的装置;用于当未能查找到所述预定项,或者,查找到所述预定项且所述预定项的位置不在所述预定位置时,确定所述项的排布不符合所述规则一的装置。13根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则一,所述用于检测的装置包括以下装置用于在所述数据部分中查找所述预定位置的装置;用于当所述预定位置上存在所述预定项时,确定所述项的排布符合所述规则一的装置;用于当所述预定位置上不存在所述预定项时,确定所述项的排布不符合所述规则一的装置。14根据权利要求11至13中任一项所述的装置,其中,所述预定项包括所述数据部分的MAP列表中的项。15根据权利要求11所述的装置,其中,所。
8、述重打包排布规则包括所述规则二,所述用于检测的装置包括以下装置用于检测当前相邻的两个类定义项的偏移值时间的差值的装置;用于当所述差值小于零时,将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并触发用于检测差值的装置重复执行操作的装置;用于当所述差值大于零时,确定所述项的排布符合规则二的装置。16根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则二,所述用于检测的装置包括以下装置用于读取每个类定义项的偏移值的装置;用于当所述偏移值的排列为顺序时,确定项的排布不符合所述规则二的装置;用于当所述偏移值的排列为乱序时,确定项的排布符合所述规则二的装置。17根据权利要求10至16中任。
9、一项所述的装置,其中,所述应用程序适用于安卓系统。18根据权利要求17中任一项所述的装置,其中,所述可执行文件为DEX文件。权利要求书CN104216946A1/11页4一种用于确定重打包应用程序的方法和装置技术领域0001本发明涉及计算机技术领域,尤其涉及一种在计算机设备中用于确定重打包应用程序的方法和装置。背景技术0002随着开放式系统更广泛的市场应用,出于各种目的,越来越多的正版应用程序在破解后被篡改,从而生成包含了篡改后的信息的重打包应用程序,也称山寨应用程序。这种重打包应用程序已成为安卓系统中病毒的主要来源之一,严重影响了安卓系统的安全性。0003现有技术中,在确定一个应用程序是否为。
10、重打包应用程序时,往往需要借助除应用程序自身以外的各种信息。例如,作为一种方案,可收集大量正版应用程序来建立特征库,并通过将一个应用程序的数字签名等信息与特征库中正版应用程序的数字签名等信息进行比对,来判定该应用程序是否为重打包应用程序。又如,作为另一种方案,可将待确定的应用程序与正版应用程序或已确定的重打包应用程序进行比对分析,来确定该应用程序是否为重打包应用程序。0004然而,市场上应用程序的数目在不断增加,很难收集到所有的正版应用程序或重打包应用程序,且收集速度很难跟上正版应用程序更新的速度,这使得上述方案存在一定的滞后性,从而通常仅适用于较为流行的少数应用程序。发明内容0005本发明的。
11、目的是提供一种在计算机设备中用于确定重打包应用程序的方法和装置。0006根据本发明的一个方面,提供一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤0007A仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;0008B当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序。0009根据本发明的另一个方面,还提供了一种在计算机设备中用于确定重打包应用程序的装置,其中,该装置包括以下装置0010用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置;0011用。
12、于当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序的装置。0012与现有技术相比,本发明具有以下优点1可仅根据一个应用程序的可执行文件,来判断该可执行文件的数据部分中的项的排布是否符合重新编译后的可执行文件通常具有的重打包排布规则,从而来确定一个应用程序是否是重打包应用程序;2不需要将应说明书CN104216946A2/11页5用程序与相应的正版应用程序或已确定的重打包应用程序进行比对,也即不需要收集大量正版应用程序或已确定的重打包应用程序,且仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不。
13、作特殊的要求。附图说明0013通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显0014图1为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的方法流程示意图;0015图2为安卓应用程序的APK文件的结构示意图;0016图3为DEX文件的结构示意图;0017图4为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的装置的结构示意图。0018附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式0019下面结合附图对本发明作进一步详细描述。0020图1为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的方法流程示。
14、意图。0021其中,本实施例的方法主要通过计算机设备来实现;所述计算机设备包括但不限于网络设备和用户设备;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算CLOUDCOMPUTING的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机;所述网络设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。所述用户设备包括但不限于PC机、平板电脑、智能手机、PDA、IPTV等。0022需要说明的是,所述计算机设备仅为举例,其他现有的或今后可能出现的计算设备如可适用于本发明,也应包含在本发明保。
15、护范围以内,并以引用方式包含于此。0023根据本实施例的方法包括步骤S1和步骤S2。0024在步骤S1中,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则。0025其中,所述应用程序可优选地适用于开放式系统。更优选地,所述应用程序适用于安卓系统。0026其中,所述可执行文件为能够由操作系统加载并执行的文件;优选地,所述可执行文件为DEX文件。作为一个示例,图2示出了安卓应用程序的APKANDROIDPACKAGE,安卓安装包文件的一种目录结构,所述可执行文件可为其中所示的CLASSESDEX文件。在图2中,RES为存放资源文件的目录,RES。
16、目录下的LAYOUT文件为被编译为屏幕布局或屏幕的一部分的XML文件,RES目录下的DRAWABLE用于存放资源文件;METAINF为生成JAR文件时创建的文件,该目录下的MANIFESTMF文件用于描述JAR文件的相关信息如属性信说明书CN104216946A3/11页6息等,CERTSF和CERTRSA文件为APK签名文件;RESOURCESARSC为编译后的二进制资源文件,ANDROIDMANIFESTXML为程序全局配置文件,CLASSESDEX为安卓应用程序的可执行文件。0027其中,可执行文件可包括文件头、位于文件头之后的数据目录以及数据部分;其中,文件头可包括校验信息以及可执行文。
17、件中其他结构的偏移地址和长度信息,数据目录可包括数据索引信息,数据部分可包括数据目录中的索引所指向的数据。作为一个示例,图3示出了DEX文件的一种结构,DEX文件包括文件头HEADER,包括字符串列表STRINGTABLE、类型列表TYPETABLE、函数原型列表PROTOTABLE、变量列表FIELDTABLE、函数列表METHODTABLE、类定义列表CLASSDENITIONTABLE的数据目录,以及数据部分DATA;其中,数据部分包括数据段DATASECTION和MAP段MAPSECTION;其中,数据段包括注释项ANNOTATIONITEM、代码项CODEITEM、注释目录ANNOT。
18、ATIONDIRECTORY、接口INTERFACE、参数PARAMETER、字符串STRING、调试项DEBUGITEM、注释设置ANNOTATIONSET、静态值STATICVALUE以及类数据CLASSDATA等;其中,MAP段包括MAP列表MAPLIST。0028其中,所述数据部分中的项可包括可执行文件的数据部分中所包含的任何项;优选地,所述数据部分中的项包括DEX文件的数据部分所包含的项ITEM,如MAP段中的MAP_ITEM、数据段中的CLASS_DEF_ITEM等。0029其中,所述重打包排布规则可包括任何用于指示重打包应用程序中的项的特有排布的规则;优选地,所述重打包排布规则包。
19、括以下至少一项00301规则一所述数据部分中存在预定项且该预定项在预定位置上。0031其中,所述预定项为数据部分中的一个被指定的项。其中,所述预定位置用于指示被指定的、数据部分中的一个位置;优选地,所述预定位置对应于数据部分中连续的多个位BIT或字节BYTE;更优选地,可使用可执行文件中的一个数据地址来表示该预定位置,如使用0X238表示所述预定位置,也即0X238为该预定位置的基地址。0032优选地,所述预定项包括所述数据部分的MAP列表中的项。更优选地,所述预定项为TYPE_DEBUG_INFO_ITEM;且所述预定项为TYPE_DEBUG_INFO_ITEM时,所述预定位置可为MAP列表。
20、中的倒数第二个MAP_ITEM所在的位置。00332规则二所述数据部分中的类定义项的排序不符合预定排序规则。优选地,规则二包括所述数据部分中的类定义项的偏移值的排序为乱序。0034其中,所述类定义项包括可执行文件中所使用的任何类的定义项;优选地,所述类定义项为DEX文件的数据部分中所包含的CLASS_DEF_ITEM。0035其中,所述预定排序规则包括任何预定的、各类定义项的排序规则。例如,所述预定排序规则为各个类定义项按照类的名称的字母进行顺序排列,且类定义项的偏移值按照从小到大的顺序进行排序。0036需要说明的是,上述重打包排布规则仅为举例,而非对本发明的限制,本领域技术人员应能理解,任何。
21、可指示重打包应用程序的特有排布的规则,均应包含在本发明所述的重打包排布规则内。0037以下说明当重打包排布规则包括上述规则一时,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式。说明书CN104216946A4/11页70038具体地,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式包括但不限于00391计算机设备在可执行文件的数据部分中查找预定项;当查找到预定项且该预定项的位置在预定位置上时,计算机设备确定项的排布符合所述规则一;当未能查找到该预定项,或者,查找到该预定项且该预定项。
22、的位置不在预定位置时,计算机设备确定项的排布不符合所述规则一。0040例如,规则一为可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于MAP列表中的倒数第二个MAPITEM所在的位置。计算机设备在DEX文件的数据部分中查找该预定项;当查找到该预定项且该预定项的位置在MAP列表中的倒数第二个MAPITEM所在的位置时,计算机设备确定该预定项的排布符合规则一;当未能查找到该预定项,或者,该预定项的位置在MAP列表中的倒数第二个MAPITEM所在的位置以外的其他位置上时,计算机设备确定该预定项的排布不符合规则一。0041其中,计算机设备可通过在数据部分中查找预定。
23、项所对应的类型码TYPECODE,来查找该预定项。0042例如,预定项为MAP列表中的TYPE_DEBUG_INFO_ITEM,且其类型码为0X2003,则计算机设备可通过在DEX文件的数据部分中查找TYPECODE为0X2003的项,来查找TYPE_DEBUG_INFO_ITEM。00432计算机设备在所述数据部分中查找所述预定位置;当所述预定位置上存在所述预定项时,计算机设备确定项的排布符合所述规则一;当所述预定位置上不存在所述预定项时,计算机设备确定所述项的排布不符合所述规则一。0044例如,规则一为可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于。
24、MAP列表中的倒数第二个MAPITEM所在的位置。计算机设备查找数据部分中MAP列表的倒数第二个MAPITEM所在的位置;当该位置上的TYPECODE为0X2003即TYPE_DEBUG_INFO_ITEM的类型码时,计算机设备确定该预定项的排布符合规则一;当该位置上的TYPECODE非0X2003时,计算机设备确定该预定项的排布不符合规则一。0045其中,计算机设备可从可执行文件的文件头中获取预定项所在列表的数据基地址,从而进一步计算出预定位置。0046例如,计算机设备可从可执行文件的文件头中首先获取MAP数据基地址MAP_OFF,并根据该MAP数据基地址读取MAP列表中的MAPITEM的个。
25、数,从而计算出MAP列表的倒数第二个MAPITEM所在的位置。0047需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式,均应包含在本发明的范围内。0048需要说明的是,当重打包排布规则仅包括规则一时,若计算机设备确定可执行文件的数据部分中的项的排布符合规则一,相当于计算机设备确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若计算机设备确定可执行文件的数据部分中的项的排布不符合规则一,相当于计算机设备确定可执行文件的数据部分中的项的排布不符。
26、合重打包排布规则。0049以下说明当重打包排布规则包括上述规则二时,计算机设备仅根据一个应用程序说明书CN104216946A5/11页8的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式。0050具体地,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式包括但不限于00511计算机设备检测当前相邻的两个类定义项的偏移值之间的差值;当所述差值小于零时,计算机设备将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并重复前一步骤来继续执行检测操作;并当所述差值大于零时,计算机设备确定所述项的排布符合规则二。0052。
27、例如,计算机设备首先获得第一个类定义项和第二个类定义项的偏移值,并检测该相邻的两个类定义的偏移值之间的差值;当该差值小于零时,计算机设备将第二个类定义项与第三个类定义项作为当前相邻的两个类定义项,并在获得第三个类定义项的偏移值之后,检测第二个类定义项与第三个类定义项的偏移值之间的差值;如此重复,直至检测到存在相邻的两个类定义项的偏移值之间的差值大于零,或者,已检测完所有相邻的两个类定义项的偏移值之间的差值。0053需要说明的是,当计算机设备已检测完所有相邻的两个类定义项的偏移值之间的差值,且所检测的所有差值均小于零时,计算机设备确定项的排布不符合规则二。0054其中,所述类定义项用于表示数据部。
28、分中对该应用程序所使用的类的定义;优选地,所述类定义项为DEX文件数据部分的数据段的类数据中的CLASS_DEF_ITEM。0055其中,所述偏移值用于指示该类定义项的开始位置距离可执行文件的文件头的偏移。优选地,在DEX文件中,可直接获取类定义项的类数据偏移CLASS_DATA_OFF作为该类定义项的偏移值。更优选地,计算机设备根据从DEX文件的文件头中读取到的类定义列表基地址,来获取类定义项的类数据偏移作为该类定义项的偏移值。0056例如,计算机设备根据类定义列表基地址0X0110,计算得到第一个类定义项的偏移值的基地址0X01100X00180X0128,从而根据该计算的到的基地址读取到。
29、第一个类定义项的类数据偏移,作为该类定义项的偏移值,其中,0X0018为可预先确定的固定值。0057需要说明的是,重打包应用程序中类定义项的偏移值的排序往往与正版应用程序中类定义项的偏移值的排序不一致,正版应用程序中类定义项的偏移值是按照从小到大的顺序来进行排序,而重打包应用程序中会出现相邻的两个类定义项的偏移值之间的差值大于零的情况。00582计算机设备读取每个类定义项的偏移值;当各个类定义项的偏移值的排列为顺序时,计算机设备确定项的排布不符合所述规则二;当所述偏移值的排列为乱序时,计算机设备确定项的排布符合所述规则二。0059例如,DEX文件的数据部分包括4个类定义项,计算机设备读取该4个。
30、类定义项的偏移值依次为0X0227、0X0247、0X0267、0X0287。计算机设备确定该等偏移值的排列为顺序,则计算机设备确定项的排布不符合规则二。0060又例如,DEX文件的数据部分包括4个类定义项,计算机设备读取该4个类定义项的偏移值依次为0X0227、0X0267、0X0287、0X0247。计算机设备确定该等偏移值的排列为乱序,则计算机设备确定项的排布符合规则二。0061需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件说明书CN104216946A6/11页9的数据部分中的项的排。
31、布是否符合规则二的实现方式,均应包含在本发明的范围内。0062需要说明的是,当重打包排布规则仅包括规则二时,若计算机设备确定可执行文件的数据部分中的项的排布符合规则二,相当于计算机设备确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若计算机设备确定可执行文件的数据部分中的项的排布不符合规则二,相当于计算机设备确定可执行文件的数据部分中的项的排布不符合重打包排布规则。0063需要说明的是,当重打包排布规则包括上述规则一和规则二时,计算机设备可在可执行文件的数据部分中的项的排布同时符合规则一和规则二的情况下,才确定可执行文件的数据部分中的项的排布符合重打包排布规则;或者,计算机设备可在可。
32、执行文件的数据部分中的项的排布符合规则一或规则二中的一者的情况下,确定可执行文件的数据部分中的项的排布符合重打包排布规则。0064需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的实现方式,均应包含在本发明的范围内。0065在步骤S2中,当数据部分中的项的排布符合重打包排布规则时,计算机设备确定所述应用程序为重打包应用程序。0066具体地,当可执行文件的数据部分中的项的排布符合重打包排布规则时,则计算机设备可确定该应用程序为重打包应用程序,即被破解并。
33、重新编译的程序。0067现有技术中,通常采用重新编译可执行文件的方法来重打包一个应用程序。例如,对图2所示APK文件,通常采用APKTOOL工具将该APK文件中的CLASSESDEX文件反编译成SMALI文件,然后在该SMALI文件进行一定的修改,再将修改后的SMALI文件重新编译成DEX。0068然而,在上述重新编译可执行文件的过程中,通常会引起可执行文件中项的排布发现变化。0069根据本发明的方案,可仅根据一个应用程序的可执行文件,来判断该可执行文件的数据部分中的项的排布是否符合重新编译后的可执行文件通常具有的重打包排布规则,从而来确定一个应用程序是否是重打包应用程序;本发明的方案不需要将。
34、应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对,也即不需要收集大量正版应用程序或已确定的重打包应用程序,且仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。0070图3为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的装置的结构示意图。本实施例的用于确定重打包应用程序的装置以下简称“重打包确定装置”包括用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置以下简称“检测装置1”,以及用于当数据部分中的项的排布符合重打包排布规则时,确定用于。
35、程序为重打包应用程序的装置以下简称“第一确定装置2”。0071检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中说明书CN104216946A7/11页10的项的排布是否符合重打包排布规则。0072其中,所述应用程序可优选地适用于开放式系统。更优选地,所述应用程序适用于安卓系统。0073其中,所述可执行文件为能够由操作系统加载并执行的文件;优选地,所述可执行文件为DEX文件。作为一个示例,图2示出了安卓应用程序的APKANDROIDPACKAGE,安卓安装包文件的一种目录结构,所述可执行文件可为其中所示的CLASSESDEX文件。在图2中,RES为存放资源文件的目录,RES。
36、目录下的LAYOUT文件为被编译为屏幕布局或屏幕的一部分的XML文件,RES目录下的DRAWABLE用于存放资源文件;METAINF为生成JAR文件时创建的文件,该目录下的MANIFESTMF文件用于描述JAR文件的相关信息如属性信息等,CERTSF和CERTRSA文件为APK签名文件;RESOURCESARSC为编译后的二进制资源文件,ANDROIDMANIFESTXML为程序全局配置文件,CLASSESDEX为安卓应用程序的可执行文件。0074其中,可执行文件可包括文件头、位于文件头之后的数据目录以及数据部分;其中,文件头可包括校验信息以及可执行文件中其他结构的偏移地址和长度信息,数据目录。
37、可包括数据索引信息,数据部分可包括数据目录中的索引所指向的数据。作为一个示例,图3示出了DEX文件的一种结构,DEX文件包括文件头HEADER,包括字符串列表STRINGTABLE、类型列表TYPETABLE、函数原型列表PROTOTABLE、变量列表FIELDTABLE、函数列表METHODTABLE、类定义列表CLASSDENITIONTABLE的数据目录,以及数据部分DATA;其中,数据部分包括数据段DATASECTION和MAP段MAPSECTION;其中,数据段包括注释项ANNOTATIONITEM、代码项CODEITEM、注释目录ANNOTATIONDIRECTORY、接口INTE。
38、RFACE、参数PARAMETER、字符串STRING、调试项DEBUGITEM、注释设置ANNOTATIONSET、静态值STATICVALUE以及类数据CLASSDATA等;其中,MAP段包括MAP列表MAPLIST。0075其中,所述数据部分中的项可包括可执行文件的数据部分中所包含的任何项;优选地,所述数据部分中的项包括DEX文件的数据部分所包含的项ITEM,如MAP段中的MAP_ITEM、数据段中的CLASS_DEF_ITEM等。0076其中,所述重打包排布规则可包括任何用于指示重打包应用程序中的项的特有排布的规则;优选地,所述重打包排布规则包括以下至少一项00771规则一所述数据部分。
39、中存在预定项且该预定项在预定位置上。0078其中,所述预定项为数据部分中的一个被指定的项。其中,所述预定位置用于指示被指定的、数据部分中的一个位置;优选地,所述预定位置对应于数据部分中连续的多个位BIT或字节BYTE;更优选地,可使用可执行文件中的一个数据地址来表示该预定位置,如使用0X238表示所述预定位置,也即0X238为该预定位置的基地址。0079优选地,所述预定项包括所述数据部分的MAP列表中的项。更优选地,所述预定项为TYPE_DEBUG_INFO_ITEM;且所述预定项为TYPE_DEBUG_INFO_ITEM时,所述预定位置可为MAP列表中的倒数第二个MAP_ITEM所在的位置。。
40、00802规则二所述数据部分中的类定义项的排序不符合预定排序规则。优选地,规则二包括所述数据部分中的类定义项的偏移值的排序为乱序。0081其中,所述类定义项包括可执行文件中所使用的任何类的定义项;优选地,所述类说明书CN104216946A108/11页11定义项为DEX文件的数据部分中所包含的CLASS_DEF_ITEM。0082其中,所述预定排序规则包括任何预定的、各类定义项的排序规则。例如,所述预定排序规则为各个类定义项按照类的名称的字母进行顺序排列,且类定义项的偏移值按照从小到大的顺序进行排序。0083需要说明的是,上述重打包排布规则仅为举例,而非对本发明的限制,本领域技术人员应能理解。
41、,任何可指示重打包应用程序的特有排布的规则,均应包含在本发明所述的重打包排布规则内。0084以下说明当重打包排布规则包括上述规则一时,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式。0085具体地,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式包括但不限于00861检测装置1包括第一查找装置图未示、第二确定装置图未示和第三确定装置图未示。第一查找装置用于在可执行文件的数据部分中查找预定项;第二确定装置用于当查找到预定项且该预定项的位置在预定位置上时,确定项的排布符合所述规则一;第。
42、三确定装置用于当未能查找到该预定项,或者,查找到该预定项且该预定项的位置不在预定位置时,确定项的排布不符合所述规则一。0087例如,规则一为可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于MAP列表中的倒数第二个MAPITEM所在的位置。第一查找装置在DEX文件的数据部分中查找该预定项;当查找到该预定项且该预定项的位置在MAP列表中的倒数第二个MAPITEM所在的位置时,第二确定装置确定该预定项的排布符合规则一;当未能查找到该预定项,或者,该预定项的位置在MAP列表中的倒数第二个MAPITEM所在的位置以外的其他位置上时,第三确定装置确定该预定项的排布不。
43、符合规则一。0088其中,第一查找装置可通过在数据部分中查找预定项所对应的类型码TYPECODE,来查找该预定项。0089例如,预定项为MAP列表中的TYPE_DEBUG_INFO_ITEM,且其类型码为0X2003,第一查找装置可通过在DEX文件的数据部分中查找TYPECODE为0X2003的项,来查找TYPE_DEBUG_INFO_ITEM。00902检测装置1包括第二查找装置图未示、第四确定装置图未示和第五确定装置图未示。第二查找装置用于在所述数据部分中查找所述预定位置;第四确定装置用于当所述预定位置上存在所述预定项时,确定项的排布符合所述规则一;第五确定装置用于当所述预定位置上不存在所。
44、述预定项时,确定所述项的排布不符合所述规则一。0091例如,规则一为可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于MAP列表中的倒数第二个MAPITEM所在的位置。第二查找装置查找数据部分中MAP列表的倒数第二个MAPITEM所在的位置;当该位置上的TYPECODE为0X2003即TYPE_DEBUG_INFO_ITEM的类型码时,第四确定装置确定该预定项的排布符合规则一;当该位置上的TYPECODE非0X2003时,第五确定装置确定该预定项的排布不符合规则一。0092其中,第二查找装置可从可执行文件的文件头中获取预定项所在列表的数据基地址,从而进一步。
45、计算出预定位置。0093例如,第二查找装置可从可执行文件的文件头中首先获取MAP数据基地址MAP_说明书CN104216946A119/11页12OFF,并根据该MAP数据基地址读取MAP列表中的MAPITEM的个数,从而计算出MAP列表的倒数第二个MAPITEM所在的位置。0094需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式,均应包含在本发明的范围内。0095需要说明的是,当重打包排布规则仅包括规则一时,若检测装置1确定可执行文件的数据部分中。
46、的项的排布符合规则一,相当于检测装置1确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若检测装置1确定可执行文件的数据部分中的项的排布不符合规则一,相当于检测装置1确定可执行文件的数据部分中的项的排布不符合重打包排布规则。0096以下说明当重打包排布规则包括上述规则二时,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式。0097具体地,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式包括但不限于00981检测装置1包括子检测装置图未示、迭代装置图未示和第六确定装置图未示。子。
47、检测装置用于检测当前相邻的两个类定义项的偏移值之间的差值;迭代装置用于当所述差值小于零时,将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并触发子检测装置重复执行操作;第六确定装置用于当所述差值大于零时,确定所述项的排布符合规则二。0099例如,子检测装置首先获得第一个类定义项和第二个类定义项的偏移值,并检测该相邻的两个类定义的偏移值之间的差值;当该差值小于零时,迭代装置将第二个类定义项与第三个类定义项作为当前相邻的两个类定义项,并在获得第三个类定义项的偏移值之后,触发子检测装置重复执行操作来检测第二个类定义项与第三个类定义项的偏移值之间的差值;如此重复,直至检测到存在相邻的两个类定义项。
48、的偏移值之间的差值大于零,或者,已检测完所有相邻的两个类定义项的偏移值之间的差值。0100需要说明的是,当已检测完所有相邻的两个类定义项的偏移值之间的差值,且所检测的所有差值均小于零时,检测装置1确定项的排布不符合规则二。0101其中,所述类定义项用于表示数据部分中对该应用程序所使用的类的定义;优选地,所述类定义项为DEX文件数据部分的数据段的类数据中的CLASS_DEF_ITEM。0102其中,所述偏移值用于指示该类定义项的开始位置距离可执行文件的文件头的偏移。优选地,在DEX文件中,可直接获取类定义项的类数据偏移CLASS_DATA_OFF作为该类定义项的偏移值。更优选地,子检测装置可根据。
49、从DEX文件的文件头中读取到的类定义列表基地址,来获取类定义项的类数据偏移作为该类定义项的偏移值。0103例如,子检测装置根据类定义列表基地址0X0110,计算得到第一个类定义项的偏移值的基地址0X01100X00180X0128,从而根据该计算的到的基地址读取到第一个类定义项的类数据偏移,作为该类定义项的偏移值,其中,0X0018为可预先确定的固定值。0104需要说明的是,重打包应用程序中类定义项的偏移值的排序往往与正版应用程序中类定义项的偏移值的排序不一致,正版应用程序中类定义项的偏移值是按照从小到大的顺序来进行排序,而重打包应用程序中会出现相邻的两个类定义项的偏移值之间的差值大说明书CN104216946A1210/11页13于零的情况。01052检测装置1包括读取装置图未示、第七确定装置图未示和第八确定装置图未示。读取装置用于读取每个类定义项的偏移值;第七确定装置用于当各个类定义项的偏移值的排列为顺序时,计算机设备确定项的排布不符合所述规则二;第八确定装置用于当所述偏移值的排列为乱序时,计算机设备确定项的排布符合所述规则二。0106例如,DEX文件的数据部分包括4个类定义项,读取装置读取该4个类定义项的偏移值依次为0X0227、0X0247、0X0267、0X0287。第七确定装置确定该等偏移值的排列为顺序,则第七确定装置确定项的排布不符合规则二。0107又例如。