著录项信息
专利名称 | 一种用于确定重打包应用程序的方法和装置 |
申请号 | CN201410373867.1 | 申请日期 | 2014-07-31 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-12-17 | 公开/公告号 | CN104216946A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 百度在线网络技术(北京)有限公司 | 申请人地址 | 北京市海淀区上地十街10号百度大厦
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 百度在线网络技术(北京)有限公司 | 当前权利人 | 百度在线网络技术(北京)有限公司 |
发明人 | 周荣誉 |
代理机构 | 北京汉昊知识产权代理事务所(普通合伙) | 代理人 | 罗朋 |
摘要
本发明提供了一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤:a.仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;b.当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序。根据本发明的方案,不需要将应用程序与相应的正版应用程序进行比对,也不需要收集大量的正版应用程序,仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。
1.一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤:
a.仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;
b.当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序;
其中,所述数据部分中的项表示可执行文件的数据部分中所包含的Item,其中,不需要将所述应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对。
2.根据权利要求1所述的方法,其中,所述重打包排布规则包括以下至少一项:
规则一:所述数据部分中存在预定项且该预定项在预定位置上;
规则二:所述数据部分中的类定义项的排序不符合预定排序规则。
3.根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则一,所述步骤a包括以下步骤:
-在所述数据部分中查找所述预定项;
-当查找到所述预定项且所述预定项的位置在所述预定位置上时,确定所述项的排布符合所述规则一;
-当未能查找到所述预定项,或者,查找到所述预定项且所述预定项的位置不在所述预定位置时,确定所述项的排布不符合所述规则一。
4.根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则一,所述步骤a包括以下步骤:
-在所述数据部分中查找所述预定位置;
-当所述预定位置上存在所述预定项时,确定所述项的排布符合所述规则一;
-当所述预定位置上不存在所述预定项时,确定所述项的排布不符合所述规则一。
5.根据权利要求2至4中任一项所述的方法,其中,所述预定项包括所述数据部分的Map列表中的项。
6.根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则二,所述步骤a包括以下步骤:
a1检测当前相邻的两个类定义项的偏移值之间的差值;
a2当所述差值小于零时,将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并重复所述步骤a1;
a3当所述差值大于零时,确定所述项的排布符合规则二。
7.根据权利要求2所述的方法,其中,所述重打包排布规则包括所述规则二,所述步骤a包括以下步骤:
-读取每个类定义项的偏移值;
-当所述偏移值的排列为顺序时,确定项的排布不符合所述规则二;
-当所述偏移值的排列为乱序时,确定项的排布符合所述规则二。
8.根据权利要求1至4中任一项所述的方法,其中,所述应用程序适用于安卓系统。
9.根据权利要求8所述的方法,其中,所述可执行文件为dex文件。
10.一种在计算机设备中用于确定重打包应用程序的装置,其中,该装置包括以下装置:
用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置;
用于当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序的装置;
其中,所述数据部分中的项表示可执行文件的数据部分中所包含的Item,其中,不需要将所述应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对。
11.根据权利要求10所述的装置,其中,所述重打包排布规则包括以下至少一项:
规则一:所述数据部分中存在预定项且该预定项在预定位置上;
规则二:所述数据部分中的类定义项的排序不符合预定排序规则。
12.根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则一,所述用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置包括以下装置:
用于在所述数据部分中查找所述预定项的装置;
用于当查找到所述预定项且所述预定项的位置在所述预定位置上时,确定所述项的排布符合所述规则一的装置;
用于当未能查找到所述预定项,或者,查找到所述预定项且所述预定项的位置不在所述预定位置时,确定所述项的排布不符合所述规则一的装置。
13.根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则一,所述用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置包括以下装置:
用于在所述数据部分中查找所述预定位置的装置;
用于当所述预定位置上存在所述预定项时,确定所述项的排布符合所述规则一的装置;
用于当所述预定位置上不存在所述预定项时,确定所述项的排布不符合所述规则一的装置。
14.根据权利要求11至13中任一项所述的装置,其中,所述预定项包括所述数据部分的Map列表中的项。
15.根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则二,所述用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置包括以下装置:
用于检测当前相邻的两个类定义项的偏移值时间的差值的装置;
用于当所述差值小于零时,将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并触发用于检测差值的装置重复执行操作的装置;
用于当所述差值大于零时,确定所述项的排布符合规则二的装置。
16.根据权利要求11所述的装置,其中,所述重打包排布规则包括所述规则二,所述用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置包括以下装置:
用于读取每个类定义项的偏移值的装置;
用于当所述偏移值的排列为顺序时,确定项的排布不符合所述规则二的装置;
用于当所述偏移值的排列为乱序时,确定项的排布符合所述规则二的装置。
17.根据权利要求10至13中任一项所述的装置,其中,所述应用程序适用于安卓系统。
18.根据权利要求17所述的装置,其中,所述可执行文件为dex文件。
一种用于确定重打包应用程序的方法和装置\n技术领域\n[0001] 本发明涉及计算机技术领域,尤其涉及一种在计算机设备中用于确定重打包应用程序的方法和装置。\n背景技术\n[0002] 随着开放式系统更广泛的市场应用,出于各种目的,越来越多的正版应用程序在破解后被篡改,从而生成包含了篡改后的信息的重打包应用程序,也称山寨应用程序。这种重打包应用程序已成为安卓系统中病毒的主要来源之一,严重影响了安卓系统的安全性。\n[0003] 现有技术中,在确定一个应用程序是否为重打包应用程序时,往往需要借助除应用程序自身以外的各种信息。例如,作为一种方案,可收集大量正版应用程序来建立特征库,并通过将一个应用程序的数字签名等信息与特征库中正版应用程序的数字签名等信息进行比对,来判定该应用程序是否为重打包应用程序。又如,作为另一种方案,可将待确定的应用程序与正版应用程序或已确定的重打包应用程序进行比对分析,来确定该应用程序是否为重打包应用程序。\n[0004] 然而,市场上应用程序的数目在不断增加,很难收集到所有的正版应用程序或重打包应用程序,且收集速度很难跟上正版应用程序更新的速度,这使得上述方案存在一定的滞后性,从而通常仅适用于较为流行的少数应用程序。\n发明内容\n[0005] 本发明的目的是提供一种在计算机设备中用于确定重打包应用程序的方法和装置。\n[0006] 根据本发明的一个方面,提供一种在计算机设备中用于确定重打包应用程序的方法,其中,该方法包括以下步骤:\n[0007] a.仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则;\n[0008] b.当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序。\n[0009] 根据本发明的另一个方面,还提供了一种在计算机设备中用于确定重打包应用程序的装置,其中,该装置包括以下装置:\n[0010] 用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置;\n[0011] 用于当所述数据部分中的项的排布符合重打包排布规则时,确定所述应用程序为重打包应用程序的装置。\n[0012] 与现有技术相比,本发明具有以下优点:1)可仅根据一个应用程序的可执行文件,来判断该可执行文件的数据部分中的项的排布是否符合重新编译后的可执行文件通常具有的重打包排布规则,从而来确定一个应用程序是否是重打包应用程序;2)不需要将应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对,也即不需要收集大量正版应用程序或已确定的重打包应用程序,且仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。\n附图说明\n[0013] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:\n[0014] 图1为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的方法流程示意图;\n[0015] 图2为安卓应用程序的APK文件的结构示意图;\n[0016] 图3为DEX文件的结构示意图;\n[0017] 图4为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的装置的结构示意图。\n[0018] 附图中相同或相似的附图标记代表相同或相似的部件。\n具体实施方式\n[0019] 下面结合附图对本发明作进一步详细描述。\n[0020] 图1为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的方法流程示意图。\n[0021] 其中,本实施例的方法主要通过计算机设备来实现;所述计算机设备包括但不限于网络设备和用户设备;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机;所述网络设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。所述用户设备包括但不限于PC机、平板电脑、智能手机、PDA、IPTV等。\n[0022] 需要说明的是,所述计算机设备仅为举例,其他现有的或今后可能出现的计算设备如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。\n[0023] 根据本实施例的方法包括步骤S1和步骤S2。\n[0024] 在步骤S1中,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则。\n[0025] 其中,所述应用程序可优选地适用于开放式系统。更优选地,所述应用程序适用于安卓系统。\n[0026] 其中,所述可执行文件为能够由操作系统加载并执行的文件;优选地,所述可执行文件为DEX文件。作为一个示例,图2示出了安卓应用程序的APK(Android Package,安卓安装包)文件的一种目录结构,所述可执行文件可为其中所示的classes.dex文件。在图2中,res为存放资源文件的目录,res目录下的layout文件为被编译为屏幕布局(或屏幕的一部分)的XML文件,res目录下的drawable用于存放资源文件;META-INF为生成JAR文件时创建的文件,该目录下的MANIFEST.MF文件用于描述JAR文件的相关信息如属性信息等,CERT.SF和CERT.RSA文件为APK签名文件;resources.arsc为编译后的二进制资源文件,AndroidManifest.xml为程序全局配置文件,classes.dex为安卓应用程序的可执行文件。\n[0027] 其中,可执行文件可包括文件头、位于文件头之后的数据目录以及数据部分;其中,文件头可包括校验信息以及可执行文件中其他结构的偏移地址和长度信息,数据目录可包括数据索引信息,数据部分可包括数据目录中的索引所指向的数据。作为一个示例,图\n3示出了DEX文件的一种结构,DEX文件包括文件头(header),包括字符串列表(String Table)、类型列表(Type Table)、函数原型列表(Proto Table)、变量列表(Field Table)、函数列表(Method Table)、类定义列表(Class Definition Table)的数据目录,以及数据部分(Data);其中,数据部分包括数据段(data Section)和Map段(Map Section);其中,数据段包括注释项(annotation item)、代码项(code item)、注释目录(annotation directory)、接口(interface)、参数(parameter)、字符串(string)、调试项(debug item)、注释设置(annotation set)、静态值(static value)以及类数据(class data)等;其中,Map段包括Map列表(Map List)。\n[0028] 其中,所述数据部分中的项可包括可执行文件的数据部分中所包含的任何项;优选地,所述数据部分中的项包括DEX文件的数据部分所包含的项(Item),如Map段中的Map_Item、数据段中的Class_Def_Item等。\n[0029] 其中,所述重打包排布规则可包括任何用于指示重打包应用程序中的项的特有排布的规则;优选地,所述重打包排布规则包括以下至少一项:\n[0030] 1)规则一:所述数据部分中存在预定项且该预定项在预定位置上。\n[0031] 其中,所述预定项为数据部分中的一个被指定的项。其中,所述预定位置用于指示被指定的、数据部分中的一个位置;优选地,所述预定位置对应于数据部分中连续的多个位(bit)或字节(byte);更优选地,可使用可执行文件中的一个数据地址来表示该预定位置,如使用0x238表示所述预定位置,也即0x238为该预定位置的基地址。\n[0032] 优选地,所述预定项包括所述数据部分的Map列表中的项。更优选地,所述预定项为TYPE_DEBUG_INFO_ITEM;且所述预定项为TYPE_DEBUG_INFO_ITEM时,所述预定位置可为Map列表中的倒数第二个Map_Item所在的位置。\n[0033] 2)规则二:所述数据部分中的类定义项的排序不符合预定排序规则。优选地,规则二包括:所述数据部分中的类定义项的偏移值的排序为乱序。\n[0034] 其中,所述类定义项包括可执行文件中所使用的任何类的定义项;优选地,所述类定义项为DEX文件的数据部分中所包含的Class_Def_Item。\n[0035] 其中,所述预定排序规则包括任何预定的、各类定义项的排序规则。例如,所述预定排序规则为:各个类定义项按照类的名称的字母进行顺序排列,且类定义项的偏移值按照从小到大的顺序进行排序。\n[0036] 需要说明的是,上述重打包排布规则仅为举例,而非对本发明的限制,本领域技术人员应能理解,任何可指示重打包应用程序的特有排布的规则,均应包含在本发明所述的重打包排布规则内。\n[0037] 以下说明当重打包排布规则包括上述规则一时,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式。\n[0038] 具体地,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式包括但不限于:\n[0039] 1)计算机设备在可执行文件的数据部分中查找预定项;当查找到预定项且该预定项的位置在预定位置上时,计算机设备确定项的排布符合所述规则一;当未能查找到该预定项,或者,查找到该预定项且该预定项的位置不在预定位置时,计算机设备确定项的排布不符合所述规则一。\n[0040] 例如,规则一为:可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于Map列表中的倒数第二个Map Item所在的位置。计算机设备在DEX文件的数据部分中查找该预定项;当查找到该预定项且该预定项的位置在Map列表中的倒数第二个Map Item所在的位置时,计算机设备确定该预定项的排布符合规则一;当未能查找到该预定项,或者,该预定项的位置在Map列表中的倒数第二个Map Item所在的位置以外的其他位置上时,计算机设备确定该预定项的排布不符合规则一。\n[0041] 其中,计算机设备可通过在数据部分中查找预定项所对应的类型码(Type Code),来查找该预定项。\n[0042] 例如,预定项为Map列表中的TYPE_DEBUG_INFO_ITEM,且其类型码为0x2003,则计算机设备可通过在DEX文件的数据部分中查找Type Code为0x2003的项,来查找TYPE_DEBUG_INFO_ITEM。\n[0043] 2)计算机设备在所述数据部分中查找所述预定位置;当所述预定位置上存在所述预定项时,计算机设备确定项的排布符合所述规则一;当所述预定位置上不存在所述预定项时,计算机设备确定所述项的排布不符合所述规则一。\n[0044] 例如,规则一为:可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于Map列表中的倒数第二个Map Item所在的位置。计算机设备查找数据部分中Map列表的倒数第二个Map Item所在的位置;当该位置上的Type Code为0x2003(即TYPE_DEBUG_INFO_ITEM的类型码)时,计算机设备确定该预定项的排布符合规则一;当该位置上的Type Code非0x2003时,计算机设备确定该预定项的排布不符合规则一。\n[0045] 其中,计算机设备可从可执行文件的文件头中获取预定项所在列表的数据基地址,从而进一步计算出预定位置。\n[0046] 例如,计算机设备可从可执行文件的文件头中首先获取Map数据基地址(map_off),并根据该Map数据基地址读取Map列表中的Map Item的个数,从而计算出Map列表的倒数第二个Map Item所在的位置。\n[0047] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式,均应包含在本发明的范围内。\n[0048] 需要说明的是,当重打包排布规则仅包括规则一时,若计算机设备确定可执行文件的数据部分中的项的排布符合规则一,相当于计算机设备确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若计算机设备确定可执行文件的数据部分中的项的排布不符合规则一,相当于计算机设备确定可执行文件的数据部分中的项的排布不符合重打包排布规则。\n[0049] 以下说明当重打包排布规则包括上述规则二时,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式。\n[0050] 具体地,计算机设备仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式包括但不限于:\n[0051] 1)计算机设备检测当前相邻的两个类定义项的偏移值之间的差值;当所述差值小于零时,计算机设备将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并重复前一步骤来继续执行检测操作;并当所述差值大于零时,计算机设备确定所述项的排布符合规则二。\n[0052] 例如,计算机设备首先获得第一个类定义项和第二个类定义项的偏移值,并检测该相邻的两个类定义的偏移值之间的差值;当该差值小于零时,计算机设备将第二个类定义项与第三个类定义项作为当前相邻的两个类定义项,并在获得第三个类定义项的偏移值之后,检测第二个类定义项与第三个类定义项的偏移值之间的差值;如此重复,直至检测到存在相邻的两个类定义项的偏移值之间的差值大于零,或者,已检测完所有相邻的两个类定义项的偏移值之间的差值。\n[0053] 需要说明的是,当计算机设备已检测完所有相邻的两个类定义项的偏移值之间的差值,且所检测的所有差值均小于零时,计算机设备确定项的排布不符合规则二。\n[0054] 其中,所述类定义项用于表示数据部分中对该应用程序所使用的类的定义;优选地,所述类定义项为DEX文件数据部分的数据段的类数据中的Class_Def_Item。\n[0055] 其中,所述偏移值用于指示该类定义项的开始位置距离可执行文件的文件头的偏移。优选地,在DEX文件中,可直接获取类定义项的类数据偏移(Class_Data_Off)作为该类定义项的偏移值。更优选地,计算机设备根据从DEX文件的文件头中读取到的类定义列表基地址,来获取类定义项的类数据偏移作为该类定义项的偏移值。\n[0056] 例如,计算机设备根据类定义列表基地址0x0110,计算得到第一个类定义项的偏移值的基地址=0x0110+0x0018=0x0128,从而根据该计算的到的基地址读取到第一个类定义项的类数据偏移,作为该类定义项的偏移值,其中,0x0018为可预先确定的固定值。\n[0057] 需要说明的是,重打包应用程序中类定义项的偏移值的排序往往与正版应用程序中类定义项的偏移值的排序不一致,正版应用程序中类定义项的偏移值是按照从小到大的顺序来进行排序,而重打包应用程序中会出现相邻的两个类定义项的偏移值之间的差值大于零的情况。\n[0058] 2)计算机设备读取每个类定义项的偏移值;当各个类定义项的偏移值的排列为顺序时,计算机设备确定项的排布不符合所述规则二;当所述偏移值的排列为乱序时,计算机设备确定项的排布符合所述规则二。\n[0059] 例如,DEX文件的数据部分包括4个类定义项,计算机设备读取该4个类定义项的偏移值依次为:0x0227、0x0247、0x0267、0x0287。计算机设备确定该等偏移值的排列为顺序,则计算机设备确定项的排布不符合规则二。\n[0060] 又例如,DEX文件的数据部分包括4个类定义项,计算机设备读取该4个类定义项的偏移值依次为:0x0227、0x0267、0x0287、0x0247。计算机设备确定该等偏移值的排列为乱序,则计算机设备确定项的排布符合规则二。\n[0061] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式,均应包含在本发明的范围内。\n[0062] 需要说明的是,当重打包排布规则仅包括规则二时,若计算机设备确定可执行文件的数据部分中的项的排布符合规则二,相当于计算机设备确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若计算机设备确定可执行文件的数据部分中的项的排布不符合规则二,相当于计算机设备确定可执行文件的数据部分中的项的排布不符合重打包排布规则。\n[0063] 需要说明的是,当重打包排布规则包括上述规则一和规则二时,计算机设备可在可执行文件的数据部分中的项的排布同时符合规则一和规则二的情况下,才确定可执行文件的数据部分中的项的排布符合重打包排布规则;或者,计算机设备可在可执行文件的数据部分中的项的排布符合规则一或规则二中的一者的情况下,确定可执行文件的数据部分中的项的排布符合重打包排布规则。\n[0064] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的实现方式,均应包含在本发明的范围内。\n[0065] 在步骤S2中,当数据部分中的项的排布符合重打包排布规则时,计算机设备确定所述应用程序为重打包应用程序。\n[0066] 具体地,当可执行文件的数据部分中的项的排布符合重打包排布规则时,则计算机设备可确定该应用程序为重打包应用程序,即被破解并重新编译的程序。\n[0067] 现有技术中,通常采用重新编译可执行文件的方法来重打包一个应用程序。例如,对图2所示APK文件,通常采用Apktool工具将该APK文件中的classes.dex文件反编译成Smali文件,然后在该Smali文件进行一定的修改,再将修改后的Smali文件重新编译成Dex。\n[0068] 然而,在上述重新编译可执行文件的过程中,通常会引起可执行文件中项的排布发现变化。\n[0069] 根据本发明的方案,可仅根据一个应用程序的可执行文件,来判断该可执行文件的数据部分中的项的排布是否符合重新编译后的可执行文件通常具有的重打包排布规则,从而来确定一个应用程序是否是重打包应用程序;本发明的方案不需要将应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对,也即不需要收集大量正版应用程序或已确定的重打包应用程序,且仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。\n[0070] 图3为本发明一个优选实施例的在计算机设备中用于确定重打包应用程序的装置的结构示意图。本实施例的用于确定重打包应用程序的装置(以下简称“重打包确定装置”)包括用于仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的装置(以下简称“检测装置1”),以及用于当数据部分中的项的排布符合重打包排布规则时,确定用于程序为重打包应用程序的装置(以下简称“第一确定装置2”)。\n[0071] 检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则。\n[0072] 其中,所述应用程序可优选地适用于开放式系统。更优选地,所述应用程序适用于安卓系统。\n[0073] 其中,所述可执行文件为能够由操作系统加载并执行的文件;优选地,所述可执行文件为DEX文件。作为一个示例,图2示出了安卓应用程序的APK(Android Package,安卓安装包)文件的一种目录结构,所述可执行文件可为其中所示的classes.dex文件。在图2中,res为存放资源文件的目录,res目录下的layout文件为被编译为屏幕布局(或屏幕的一部分)的XML文件,res目录下的drawable用于存放资源文件;META-INF为生成JAR文件时创建的文件,该目录下的MANIFEST.MF文件用于描述JAR文件的相关信息如属性信息等,CERT.SF和CERT.RSA文件为APK签名文件;resources.arsc为编译后的二进制资源文件,AndroidManifest.xml为程序全局配置文件,classes.dex为安卓应用程序的可执行文件。\n[0074] 其中,可执行文件可包括文件头、位于文件头之后的数据目录以及数据部分;其中,文件头可包括校验信息以及可执行文件中其他结构的偏移地址和长度信息,数据目录可包括数据索引信息,数据部分可包括数据目录中的索引所指向的数据。作为一个示例,图\n3示出了DEX文件的一种结构,DEX文件包括文件头(header),包括字符串列表(String Table)、类型列表(Type Table)、函数原型列表(Proto Table)、变量列表(Field Table)、函数列表(Method Table)、类定义列表(Class Definition Table)的数据目录,以及数据部分(Data);其中,数据部分包括数据段(data Section)和Map段(Map Section);其中,数据段包括注释项(annotation item)、代码项(code item)、注释目录(annotation directory)、接口(interface)、参数(parameter)、字符串(string)、调试项(debug item)、注释设置(annotation set)、静态值(static value)以及类数据(class data)等;其中,Map段包括Map列表(Map List)。\n[0075] 其中,所述数据部分中的项可包括可执行文件的数据部分中所包含的任何项;优选地,所述数据部分中的项包括DEX文件的数据部分所包含的项(Item),如Map段中的Map_Item、数据段中的Class_Def_Item等。\n[0076] 其中,所述重打包排布规则可包括任何用于指示重打包应用程序中的项的特有排布的规则;优选地,所述重打包排布规则包括以下至少一项:\n[0077] 1)规则一:所述数据部分中存在预定项且该预定项在预定位置上。\n[0078] 其中,所述预定项为数据部分中的一个被指定的项。其中,所述预定位置用于指示被指定的、数据部分中的一个位置;优选地,所述预定位置对应于数据部分中连续的多个位(bit)或字节(byte);更优选地,可使用可执行文件中的一个数据地址来表示该预定位置,如使用0x238表示所述预定位置,也即0x238为该预定位置的基地址。\n[0079] 优选地,所述预定项包括所述数据部分的Map列表中的项。更优选地,所述预定项为TYPE_DEBUG_INFO_ITEM;且所述预定项为TYPE_DEBUG_INFO_ITEM时,所述预定位置可为Map列表中的倒数第二个Map_Item所在的位置。\n[0080] 2)规则二:所述数据部分中的类定义项的排序不符合预定排序规则。优选地,规则二包括:所述数据部分中的类定义项的偏移值的排序为乱序。\n[0081] 其中,所述类定义项包括可执行文件中所使用的任何类的定义项;优选地,所述类定义项为DEX文件的数据部分中所包含的Class_Def_Item。\n[0082] 其中,所述预定排序规则包括任何预定的、各类定义项的排序规则。例如,所述预定排序规则为:各个类定义项按照类的名称的字母进行顺序排列,且类定义项的偏移值按照从小到大的顺序进行排序。\n[0083] 需要说明的是,上述重打包排布规则仅为举例,而非对本发明的限制,本领域技术人员应能理解,任何可指示重打包应用程序的特有排布的规则,均应包含在本发明所述的重打包排布规则内。\n[0084] 以下说明当重打包排布规则包括上述规则一时,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式。\n[0085] 具体地,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式包括但不限于:\n[0086] 1)检测装置1包括第一查找装置(图未示)、第二确定装置(图未示)和第三确定装置(图未示)。第一查找装置用于在可执行文件的数据部分中查找预定项;第二确定装置用于当查找到预定项且该预定项的位置在预定位置上时,确定项的排布符合所述规则一;第三确定装置用于当未能查找到该预定项,或者,查找到该预定项且该预定项的位置不在预定位置时,确定项的排布不符合所述规则一。\n[0087] 例如,规则一为:可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于Map列表中的倒数第二个Map Item所在的位置。第一查找装置在DEX文件的数据部分中查找该预定项;当查找到该预定项且该预定项的位置在Map列表中的倒数第二个Map Item所在的位置时,第二确定装置确定该预定项的排布符合规则一;当未能查找到该预定项,或者,该预定项的位置在Map列表中的倒数第二个Map Item所在的位置以外的其他位置上时,第三确定装置确定该预定项的排布不符合规则一。\n[0088] 其中,第一查找装置可通过在数据部分中查找预定项所对应的类型码(Type Code),来查找该预定项。\n[0089] 例如,预定项为Map列表中的TYPE_DEBUG_INFO_ITEM,且其类型码为0x2003,第一查找装置可通过在DEX文件的数据部分中查找Type Code为0x2003的项,来查找TYPE_DEBUG_INFO_ITEM。\n[0090] 2)检测装置1包括第二查找装置(图未示)、第四确定装置(图未示)和第五确定装置(图未示)。第二查找装置用于在所述数据部分中查找所述预定位置;第四确定装置用于当所述预定位置上存在所述预定项时,确定项的排布符合所述规则一;第五确定装置用于当所述预定位置上不存在所述预定项时,确定所述项的排布不符合所述规则一。\n[0091] 例如,规则一为:可执行文件的数据部分中存在预定项TYPE_DEBUG_INFO_ITEM,且该预定项位于Map列表中的倒数第二个Map Item所在的位置。第二查找装置查找数据部分中Map列表的倒数第二个Map Item所在的位置;当该位置上的Type Code为0x2003(即TYPE_DEBUG_INFO_ITEM的类型码)时,第四确定装置确定该预定项的排布符合规则一;当该位置上的Type Code非0x2003时,第五确定装置确定该预定项的排布不符合规则一。\n[0092] 其中,第二查找装置可从可执行文件的文件头中获取预定项所在列表的数据基地址,从而进一步计算出预定位置。\n[0093] 例如,第二查找装置可从可执行文件的文件头中首先获取Map数据基地址(map_off),并根据该Map数据基地址读取Map列表中的Map Item的个数,从而计算出Map列表的倒数第二个Map Item所在的位置。\n[0094] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则一的实现方式,均应包含在本发明的范围内。\n[0095] 需要说明的是,当重打包排布规则仅包括规则一时,若检测装置1确定可执行文件的数据部分中的项的排布符合规则一,相当于检测装置1确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若检测装置1确定可执行文件的数据部分中的项的排布不符合规则一,相当于检测装置1确定可执行文件的数据部分中的项的排布不符合重打包排布规则。\n[0096] 以下说明当重打包排布规则包括上述规则二时,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式。\n[0097] 具体地,检测装置1仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式包括但不限于:\n[0098] 1)检测装置1包括子检测装置(图未示)、迭代装置(图未示)和第六确定装置(图未示)。子检测装置用于检测当前相邻的两个类定义项的偏移值之间的差值;迭代装置用于当所述差值小于零时,将下一个相邻的两个类定义项作为当前相邻的两个类定义项,并触发子检测装置重复执行操作;第六确定装置用于当所述差值大于零时,确定所述项的排布符合规则二。\n[0099] 例如,子检测装置首先获得第一个类定义项和第二个类定义项的偏移值,并检测该相邻的两个类定义的偏移值之间的差值;当该差值小于零时,迭代装置将第二个类定义项与第三个类定义项作为当前相邻的两个类定义项,并在获得第三个类定义项的偏移值之后,触发子检测装置重复执行操作来检测第二个类定义项与第三个类定义项的偏移值之间的差值;如此重复,直至检测到存在相邻的两个类定义项的偏移值之间的差值大于零,或者,已检测完所有相邻的两个类定义项的偏移值之间的差值。\n[0100] 需要说明的是,当已检测完所有相邻的两个类定义项的偏移值之间的差值,且所检测的所有差值均小于零时,检测装置1确定项的排布不符合规则二。\n[0101] 其中,所述类定义项用于表示数据部分中对该应用程序所使用的类的定义;优选地,所述类定义项为DEX文件数据部分的数据段的类数据中的Class_Def_Item。\n[0102] 其中,所述偏移值用于指示该类定义项的开始位置距离可执行文件的文件头的偏移。优选地,在DEX文件中,可直接获取类定义项的类数据偏移(Class_Data_Off)作为该类定义项的偏移值。更优选地,子检测装置可根据从DEX文件的文件头中读取到的类定义列表基地址,来获取类定义项的类数据偏移作为该类定义项的偏移值。\n[0103] 例如,子检测装置根据类定义列表基地址0x0110,计算得到第一个类定义项的偏移值的基地址=0x0110+0x0018=0x0128,从而根据该计算的到的基地址读取到第一个类定义项的类数据偏移,作为该类定义项的偏移值,其中,0x0018为可预先确定的固定值。\n[0104] 需要说明的是,重打包应用程序中类定义项的偏移值的排序往往与正版应用程序中类定义项的偏移值的排序不一致,正版应用程序中类定义项的偏移值是按照从小到大的顺序来进行排序,而重打包应用程序中会出现相邻的两个类定义项的偏移值之间的差值大于零的情况。\n[0105] 2)检测装置1包括读取装置(图未示)、第七确定装置(图未示)和第八确定装置(图未示)。读取装置用于读取每个类定义项的偏移值;第七确定装置用于当各个类定义项的偏移值的排列为顺序时,计算机设备确定项的排布不符合所述规则二;第八确定装置用于当所述偏移值的排列为乱序时,计算机设备确定项的排布符合所述规则二。\n[0106] 例如,DEX文件的数据部分包括4个类定义项,读取装置读取该4个类定义项的偏移值依次为:0x0227、0x0247、0x0267、0x0287。第七确定装置确定该等偏移值的排列为顺序,则第七确定装置确定项的排布不符合规则二。\n[0107] 又例如,DEX文件的数据部分包括4个类定义项,读取装置读取该4个类定义项的偏移值依次为:0x0227、0x0267、0x0287、0x0247。第八确定装置确定该等偏移值的排列为乱序,则第八确定装置确定项的排布符合规则二。\n[0108] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合规则二的实现方式,均应包含在本发明的范围内。\n[0109] 需要说明的是,当重打包排布规则仅包括规则二时,若检测装置1确定可执行文件的数据部分中的项的排布符合规则二,相当于检测装置1确定可执行文件的数据部分中的项的排布符合重打包排布规则,且若检测装置1确定可执行文件的数据部分中的项的排布不符合规则二,相当于检测装置1确定可执行文件的数据部分中的项的排布不符合重打包排布规则。\n[0110] 需要说明的是,当重打包排布规则包括上述规则一和规则二时,检测装置1可在可执行文件的数据部分中的项的排布同时符合规则一和规则二的情况下,才确定可执行文件的数据部分中的项的排布符合重打包排布规则;或者,检测装置1可在可执行文件的数据部分中的项的排布符合规则一或规则二中的一者的情况下,确定可执行文件的数据部分中的项的排布符合重打包排布规则。\n[0111] 需要说明的是,上述举例仅为更好地说明本发明的技术方案,而非对本发明的限制,本领域技术人员应该理解,任何仅根据一个应用程序的可执行文件,检测该可执行文件的数据部分中的项的排布是否符合重打包排布规则的实现方式,均应包含在本发明的范围内。\n[0112] 当数据部分中的项的排布符合重打包排布规则时,第一确定装置2确定所述应用程序为重打包应用程序。\n[0113] 具体地,当可执行文件的数据部分中的项的排布符合重打包排布规则时,则第一确定装置2可确定该应用程序为重打包应用程序,即被破解并重新编译的程序。\n[0114] 现有技术中,通常采用重新编译可执行文件的方法来重打包一个应用程序。例如,对图2所示APK文件,通常采用Apktool工具将该APK文件中的classes.dex文件反编译成Smali文件,然后在该Smali文件进行一定的修改,再将修改后的Smali文件重新编译成Dex。\n[0115] 然而,在上述重新编译可执行文件的过程中,通常会引起可执行文件中项的排布发现变化。\n[0116] 根据本发明的方案,可仅根据一个应用程序的可执行文件,来判断该可执行文件的数据部分中的项的排布是否符合重新编译后的可执行文件通常具有的重打包排布规则,从而来确定一个应用程序是否是重打包应用程序;本发明的方案不需要将应用程序与相应的正版应用程序或已确定的重打包应用程序进行比对,也即不需要收集大量正版应用程序或已确定的重打包应用程序,且仅根据应用程序的可执行文件即可确定该应用程序是否是重打包应用程序,其实现简单,操作方便,工作量小,且对计算机设备的性能不作特殊的要求。\n[0117] 需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,本发明的各个装置可采用专用集成电路(ASIC)或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。\n[0118] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
法律信息
- 2019-03-26
- 2015-01-07
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201410373867.1
申请日: 2014.07.31
- 2014-12-17
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-12-25
|
2013-09-24
| | |
2
| |
2006-11-15
|
2006-05-11
| | |
3
| |
2007-09-26
|
2006-03-22
| | |
4
| |
2008-02-06
|
2007-09-04
| | |
5
| |
2012-09-12
|
2012-03-21
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |