著录项信息
专利名称 | 检测安装包是否被二次打包的方法和装置 |
申请号 | CN201410601347.1 | 申请日期 | 2014-10-30 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2015-01-28 | 公开/公告号 | CN104317599A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/44 | IPC分类号 | G;0;6;F;9;/;4;4;;;G;0;6;F;2;1;/;1;0查看分类表>
|
申请人 | 北京奇虎科技有限公司;奇智软件(北京)有限公司 | 申请人地址 | 北京市西城区新街口外大街28号D座112室(德胜园区)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 | 当前权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 |
发明人 | 路轶 |
代理机构 | 北京智汇东方知识产权代理事务所(普通合伙) | 代理人 | 康正德;郭海彬 |
摘要
本发明提供了一种检测安装包是否被二次打包的方法和装置。方法包括:解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序;检测第一排序与第二排序是否相同,其中,第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。通过本发明,可以待检测出安装包是否经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。
1.一种检测安装包是否被二次打包的方法,包括:
解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;包括:根据所述指定安装包的压缩格式对所述安装包进行解压缩,得到其中的dex文件和/或MF文件;查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序,其中,所述二进制文件中的结构体至少包括字符表或方法表;
检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
2.根据权利要求1所述的方法,其中,所述对所述二进制文件进行解析得到其中的多个结构体,包括:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
3.根据权利要求1所述的方法,其中,在判定所述指定安装包为二次打包后的文件之前,还包括:
计算所述指定安装包的签名;
确定所述指定安装包的签名是否在预设的白名单中;
当所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
4.根据权利要求1所述的方法,其中,在判定所述指定安装包为二次打包后的文件之后,还包括:
将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;
和/或,
提示用户所述指定安装包为二次打包的文件;
和/或,
提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。
5.根据权利要求4所述的方法,其中,所述提示用户所述指定安装包为山寨应用,包括:
提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;
当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。
6.根据权利要求5所述的方法,其中,所述指定安装包的特征信息包括:
安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
7.根据权利要求4所述的方法,其中,所述推荐与所述指定安装包对应的正版应用,包括:
由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
8.一种检测安装包是否被二次打包的装置,包括:
解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;包括:解压单元,适于根据所述安装包的压缩格式对所述指定安装包进行解压缩,得到其中的dex文件和/或MF文件;排序单元,适于查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序,其中,所述二进制文件中的结构体至少包括字符表或方法表;
排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
9.根据权利要求8所述的装置,其中,所述排序单元适于按照如下方式对所述二进制文件进行解析得到其中的多个结构体:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
10.根据权利要求8所述的装置,其中,所述装置还包括:
签名检测模块,适于在判定所述指定安装包为二次打包后的文件之前,计算所述指定安装包的签名,并确定所述指定安装包的签名是否在预设的白名单中;
第二判定模块,适于当所述签名检测模块确定所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
11.根据权利要求8所述的装置,其中,所述装置还包括:
记录模块,适于在判定所述指定安装包为二次打包后的文件之后,将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;
和/或,
第一提示模块,适于在所述判定所述指定安装包为二次打包后的文件之后,提示用户所述安装包为二次打包的文件;
和/或,
第二提示模块,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。
12.根据权利要求11所述的装置,其中,所述第二提示模块具体适于按照如下方式提示用户所述指定安装包为山寨应用:
提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;
当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。
13.根据权利要求12所述的装置,其中,所述指定安装包的特征信息包括:
安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
14.根据权利要求11所述的装置,其中,所述第二提示模块具体适于按照如下方式推荐与所述指定安装包对应的正版应用:
由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
检测安装包是否被二次打包的方法和装置\n技术领域\n[0001] 本发明涉及计算机领域,具体涉及一种检测安装包是否被二次打包的方法和装置。\n背景技术\n[0002] 目前,手机、平板电脑等移动终端应用越来越广,基于移动终端进行开发的APP(Application,应用程序)也越来越多。并且,现在互联网上存在众多的应用市场,均能够提供APP的下载。\n[0003] 由于众多的应用市场的存在,导致对于APP的管理很混乱。因此,一些恶意开发者开始对APP的安装包(例如apk文件)进行二次打包,并再次发布。\n[0004] 具体地,二次打包也即恶意开发者拿到APP的正版安装包,将其反编译后,加入广告、恶意代码等,再次打包为安装包,并提供给网民下载,以达到其广告宣传等目的。\n[0005] 而在现有技术中,网民在对安装包进行安装前无法判断是否被二次打包,且目前市面上具有成熟的二次打包工具,进行二次打包的技术门槛很低,导致了安装包被二次打包的现象泛滥。\n发明内容\n[0006] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种检测安装包是否被二次打包的方法和相应地装置。\n[0007] 依据本发明的一个方面,提供一种检测安装包是否被二次打包的方法,包括:\n[0008] 解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;\n[0009] 检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;\n[0010] 当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。\n[0011] 可选地,所述解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序,包括:\n[0012] 根据所述指定安装包的压缩格式对所述安装包进行解压缩,得到其中的dex文件和/或MF文件;\n[0013] 查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。\n[0014] 可选地,所述二进制文件中的结构体至少包括:\n[0015] 字符表或方法表。\n[0016] 可选地,所述对所述二进制文件进行解析得到其中的多个结构体,包括:\n[0017] 根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。\n[0018] 可选地,在判定所述指定安装包为二次打包后的文件之前,还包括:\n[0019] 计算所述指定安装包的签名;\n[0020] 确定所述指定安装包的签名是否在预设的白名单中;\n[0021] 当所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。\n[0022] 可选地,在判定所述指定安装包为二次打包后的文件之后,还包括:\n[0023] 将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;\n[0024] 和/或,\n[0025] 提示用户所述指定安装包为二次打包的文件\n[0026] 和/或,\n[0027] 提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。\n[0028] 可选地,所述提示用户所述指定安装包为山寨应用,包括:\n[0029] 提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;\n[0030] 当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。\n[0031] 可选地,所述指定安装包的特征信息包括:\n[0032] 安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。\n[0033] 可选地,所述推荐与所述指定安装包对应的正版应用,包括:\n[0034] 由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。\n[0035] 依据本发明的另一个方面,提供一种检测安装包是否被二次打包的装置,包括:\n[0036] 解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;\n[0037] 排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;\n[0038] 第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。\n[0039] 可选地,所述解析模块包括:\n[0040] 解压单元,适于根据所述安装包的压缩格式对所述指定安装包进行解压缩,得到其中的dex文件和/或MF文件;\n[0041] 排序单元,适于查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。\n[0042] 可选地,所述二进制文件中的结构体至少包括:\n[0043] 字符表或方法表。\n[0044] 可选地,所述排序单元适于按照如下方式对所述二进制文件进行解析得到其中的多个结构体:\n[0045] 根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。\n[0046] 可选地,所述装置还包括:\n[0047] 签名检测模块,适于在判定所述指定安装包为二次打包后的文件之前,计算所述指定安装包的签名,并确定所述指定安装包的签名是否在预设的白名单中;\n[0048] 第二判定模块,适于当所述签名检测模块确定所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。\n[0049] 可选地,所述装置还包括:\n[0050] 记录模块,适于在判定所述指定安装包为二次打包后的文件之后,将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;\n[0051] 和/或,\n[0052] 第一提示模块,适于在所述判定所述安指定装包为二次打包后的文件之后,提示用户所述安装包为二次打包的文件;\n[0053] 和/或,\n[0054] 第二提示模块,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。\n[0055] 可选地,所述第二提示模块具体适于按照如下方式提示用户所述指定安装包为山寨应用:\n[0056] 提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;\n[0057] 当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。\n[0058] 可选地,所述指定安装包的特征信息包括:\n[0059] 安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。\n[0060] 可选地,所述第二提示模块具体适于按照如下方式推荐与所述指定安装包对应的正版应用:\n[0061] 由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。\n[0062] 本发明实施例提供了一种检测安装包是否被二次打包的方法和装置,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。\n[0063] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。\n[0064] 根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。\n附图说明\n[0065] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:\n[0066] 图1是本发明一个实施例提供的一种检测安装包是否被二次打包的方法流程图;\n[0067] 图2是本发明一个实施例提供的一种检测安装包是否被二次打包的具体方法流程图;\n[0068] 图3是本发明一个实施例提供的特征库与移动终端、云服务器的交互示意图;\n[0069] 图4是本发明一个实施例提供的一种检测安装包是否被二次打包的装置结构框图。\n具体实施方式\n[0070] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。\n[0071] 实施例一\n[0072] 本发明实施例提供了一种检测安装包是否被二次打包的方法。该方法能够判断指定的安装包文件是否被二次打包,进而防止用户因为安装二次打包的文件而受到安全威胁或广告骚扰,也可以为恶意程序的查杀提供参考。本方法可以通过检测工具实现在计算机后台中,例如PC机以及各种服务器中均可以实现。\n[0073] 图1是本发明一个实施例提供的一种检测安装包是否被二次打包的方法的流程图,该方法包括步骤S102至S106。\n[0074] S102,解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序。\n[0075] S104,检测第一排序与第二排序是否相同。\n[0076] 其中,第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序。\n[0077] S106,当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。\n[0078] 本发明实施例提供了一种检测安装包是否被二次打包的方法,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。\n[0079] 实施例二\n[0080] 本实施例为上述实施例一的一种具体应用场景,通过本实施例,能够更加清楚、具体地阐述本发明所提供的方法。在本实施例中,以对随机收集到的指定安装包文件为例进行检测,判断其是否为经过二次打包的安装包为例进行说明。\n[0081] 为了帮助说明本发明实施例,首先对应用程序的安装包进行说明如下:\n[0082] 在本发明的实施例中,安装包会包括如下信息:应用程序的安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串,安装包目录下各文件的MD5值,其中,所述可执行文件包括Dex文件,和/或,ELF文件;所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。\n[0083] 1)安装包的包名\n[0084] Android操作系统通过APK的包名(package name)对各个安装的APK进行管理。“包名”源自于Java的package的概念,按照Java的package的命名风格,例如某个Android安装包的包名是com.qihoo360.mobilesafe。Android系统要求每个应用程序都声明一个唯一的安装包的包名。如果要安装的APK的包名和当前手机上某个已有的应用程序的安装包的包名重复了,那么Android系统会拒绝安装。Android平台下的山寨应用程序也需要声明一个包名,因此,包名就可以作为识别山寨应用程序的一个特征。\n[0085] 2)开发者签名\n[0086] 出于安全性的目的,Android系统要求每个APK都要包含开发者签名(digital signature)。Android系统在安装APK文件的时候会检查APK内部各文件的开发者签名是否与其预先设定的开发者签名一致,如果不一致,或者没有开发者签名,则认为文件已被篡改,拒绝该APK的安装和运行。Android平台下的山寨应用程序也不例外,所以APK文件的开发者签名也可以作为识别山寨应用程序的一个特征。\n[0087] 上述应用程序的开发者签名,也可称为代码签名,是在应用程序上附加一个防伪和防篡改的开发者签名来保护应用程序不被恶意修改。如果已安装的应用程序的开发者签名与应用程序的官方的开发者签名不一致,则可以认为已安装的应用程序可能被恶意修改过,该应用程序是山寨应用程序。在提取开发者签名时,对于安卓应用而言,可以从程序安装包中的元信息(META-INF)目录下提取,META-INF目录用于存储包和扩展的配置数据,例如安全性信息和版本信息,其中开发者签名就存储于此。META-INF目录如下表所示:\n[0088]\n[0089] 3)AndroidManifest.xml中列出的各模块的入口信息\n[0090] AndroidManifest.xml是每个APK文件所必需的全局描述文件,里面列出了Android安装包中应用的每个模块的入口信息。在Android系统中,只有在AndroidManifest.xml中列出了的模块,才能够被系统调用。Android平台下的木马,往往会伪装成正常的应用或游戏来诱骗用户安装,其中有很多木马就是寄生在一个正常的应用或游戏中,用户运行它的时候,看上去是原来的软件或游戏,但寄生在其中的木马模块在合适的时机就被激活,从而感染用户的手机。而因为Android系统要求所有的模块都要在AndroidManifest.xml中列出,这就为寻找寄生的木马提高了重要线索。因此,AndroidManifest.xml中列出的各模块的信息,也是识别山寨应用程序的重要特征。\n[0091] 4)Dex文件和ELF文件\n[0092] 在Android系统的架构设计中,Android应用通常是用Java语言开发的,它用Android开发工具编译之后变成了二进制的字节码(byte code),这些字节码被打包成classes.dex文件,由Android平台的Dalvik虚拟机来解释执行。为了能够调用Android系统功能,Android系统提供了一套运行环境(Android Framework),Android应用调用系统各功能都是通过调用Android Framework的库来实现的。\n[0093] 另一方面,Android系统也支持应用程序通过JNI或者native executable直接运行。此时应用执行的是直接在CPU上运行的二进制机器码,不需要经过虚拟机解释,可以直接调用Android库如libc、WebKit、SQLite、OpenGL/ES等来调用系统各功能。如果Android应用要通过JNI或者native executable运行,就需要将要执行的代码编译成ELF文件格式。\nELF是Executable and Linkable Format的缩写,是Android/Linux操作系统中可执行程序、共享库的文件格式。\n[0094] 图2是本发明一个实施例提供的一种检测安装包是否被二次打包的方法流程图,该方法包括步骤S201至S208。\n[0095] 首先,执行步骤201,获取待检测的指定安装包文件。\n[0096] 本实施例中,待检测的安装包文件可以是用户下载的安装包文件,也可以是开发人员对各种应用市场提供的安装包文件进行收集得到、待检测的安装包文件。\n[0097] 以安卓系统为例,安装包文件可以是APK文件。\n[0098] 在获取待检测的指定安装包文件后,可以开始执行检测流程,即执行步骤S202,解析该指定安装包,查看其中的dex文件和/或mf文件的二进制文件。\n[0099] 需要说明的是,在对安装包文件进行检测时,并不需要对安装包文件的全部进行检测,依靠其中的指定部分即可完成检测,可以有效的增加对于二次打包文件的检测效率。\n[0100] 以apk为例,其实际为一个压缩包文件,在按照谷歌规定的解压格式对其进行解压后,可以得到多个文件:\n[0101] META-INF文件夹、res文件夹、AndroidManifest.xml文件、classes.dex文件、resources.arsc文件。\n[0102] 其中,\n[0103] META-INF文件夹里面存放的是证书文件,软件修改后需要将里面的证书文件删除,否则软件无法安装。并且,在该文件夹中还存在一个MANIFEST.MF文件,在该文件中记录了apk的众多配置信息,例如:manifest文件的版本、该文件的生成者、定义jar文件的签名版本、应用程序或者类装载器使用该值来构建内部的类搜索路径等。\n[0104] res文件夹里存放的大部分是软件所需的资源及布局文件,部分需要汉化的单词、语句会在这些***.xml文件里。\n[0105] AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。\n[0106] classes.dex文件是Java源码编译后的代码文件。\n[0107] resources.arsc文件是编译后的资源文件。\n[0108] 在本实施例中,安装包文件中的指定部分也即上述后缀名为dex和/或mf的文件,在得到该dex文件和/或mf文件后,通过工具可查看其二进制文件。\n[0109] 在后面的实施例中,以安装包中的指定部分为dex文件为例进行说明。\n[0110] 接下来执行步骤S203,获取上述二进制文件中所包括的结构体的排序为第一排序。\n[0111] 其中,apk文件为安卓系统中的安装文件,谷歌对其中的文件有严格的格式定义,例如在dex文件中,其会包括多种类型的结构体,例如会包括多个表,如方法表、字符表等。\n并且,规定了每种表的格式。\n[0112] 在方法表中,其记录了与该apk文件相关的多个方法的ID和偏移地址,以在程序运行时进行调用;\n[0113] 而在字符表中,其记录了该apk所需用到的字符串的ID和偏移地址,以供程序运行时,可以找到对应的字符串。\n[0114] 而正是由于谷歌规定了每种结构体的格式,因此,可以根据谷歌对于每种类型的结构体的格式,得到dex文件中的结构体的排序。\n[0115] 例如,通过对dex文件中的结构体进行分析,可以得到第一排序为:\n[0116] Method3、method2、method1、string3、string2、string1。\n[0117] 在得到第一排序后,执行步骤S204,检测第一排序与第二排序是否相同,若不相同,判定该安装包不是经二次打包的文件,若相同,执行步骤S205。\n[0118] 本实施例步骤S204中所述的第二排序即为市面上存在的二次打包工具对一般安装包的指定部分编译后所产生的结构体的排序。\n[0119] 需要说明的是,现有市面上存在二次打包工具,这些二次打包工具,可以在安装包中加入广告、恶意程序后,再次进行编译,得到二次打包后的安装包文件,供用户进行下载。\n[0120] 而这些二次打包工具有一个特点,即对安装包进行二次编译后,其dex文件中的结构体排序与原安装包是不同的,其具有一个特定的顺序(也即第二排序),区别于安卓开发者常用的编译工具所产生的正常排序。\n[0121] 因此,发明人使用了正常的安装包文件,使用二次打包工具进行打包,并进行反编译后,得到了其dex文件中结构体的特定排序,也即第二排序。通过检测待检测的安装包文件中dex文件中的结构体排序是否与第二排序相同,即可判断该待检测的安装包文件是否被二次打包。\n[0122] 需要说明的是,由于市面上存在多种二次打包工具,因此,第二排序也包括多种。\n[0123] 例如,第二排序可以是:\n[0124] Method3、method2、method1、string3、string2、string1;\n[0125] 或,\n[0126] Method2、method3、method1、string3、string2、string1;\n[0127] 或,\n[0128] Method1、method2、method3、string3、string2、string1。\n[0129] 在本实施例中,通过将第一排序与第二排序进行对比,可以得知,第一排序与第二排序中的第一种相同,因此,该待检测的指定安装包可能是经二次打包的文件。\n[0130] 在确定第一排序与第二排序相同后,执行步骤S205,判定该指定安装包为二次打包的文件,并计算该指定安装包的签名。\n[0131] 需要说明的是,有一些安装包文件虽然经过二次打包操作,但是却不一定是恶意软件。\n[0132] 例如,一些国外开发商开发的软件,在进入国内后,为了适应国内的语言环境,会进行汉化,会选择将其中的文件进行相应的修改,并再次打包。而这些安装包对于用户是不存在恶意的,因此,还需对其进行合法性认证。\n[0133] 又例如,一些应用程序为了进行加固,会在其安装包中插入用于加固的代码,并进行二次打包,这种经二次打包操作的安装包也是合法的。\n[0134] 对经二次打包的安装包文件进行合法性认证,主要依靠其签名进行验证。其中,在对安装包的签名进行计算时,可以采用MD5(Message Digest Algorithm 5,消息摘要算法第五版)算法、SHA(Secure Hash Algorithm,安全哈希算法)等。\n[0135] 计算得到上述指定安装包的签名后,执行步骤S206,判断指定安装包的签名是否在预设的白名单中。\n[0136] 其中,可以通过人工收集的方式,收集合法的二次打包的文件的签名,并将其存储在白名单中,如果安装包的签名在白名单中,即可将其放行。\n[0137] 具体地,所述白名单可以包含已知的受信任的应用程序的名称(包括应用程序的UID(唯一标识符)和应用程序的安装包的包名)。通过安装包的包名,即可唯一的区别安装包。\n[0138] 若指定安装包的签名在白名单中,则执行步骤S207,标记该安装包为合法的二次打包文件,将其放行。\n[0139] 若指定安装包的签名不在白名单中,则执行步骤S208,标记该安装包为非法的二次打包文件。\n[0140] 其中,在执行了上述步骤S208后,还可以继续执行如下操作:\n[0141] (1)提示安装包为非法的二次打包文件,以避免用户在安装恶意的二次打包的安装包后,被广告骚扰或遭到恶意代码的威胁。\n[0142] (2)将该非法的二次打包文件进行标记后,记录在特征库中,以使得杀毒工具在进行病毒扫描时,提升对这些二次打包文件的优先级,优先进行扫描。\n[0143] 由于二次打包工具获得简单,一些个人或团体很容易就能通过二次打包工具将安装包中插入恶意代码,并进行发布,导致用户中毒。因此,如果一个安装包经过二次打包,其成为恶意程序的几率就要提升很多。在进行病毒扫描时,优先扫描这些经过二次打包的安装包,就能够快速发现恶意程序,提升病毒的扫描效率。\n[0144] 其中,上述特征库可用于对于移动终端中的恶意程序进行扫描。如图3所示,为特征库与移动终端、云服务器的示意图。可选择的将特征库中的数据共享给移动终端、云服务器。存储于移动终端中的特征库可用于移动终端本地进行恶意程序的查杀,而存储于云服务器中的特征库可用于为移动终端等设备提供云查杀功能。\n[0145] (3)提示用户该安装包为山寨应用,并向用户推荐相应的正版应用。\n[0146] 其中,提示用户该安装包为山寨应用,可以采用如下方式:\n[0147] 提取安装包中的特征信息,并将特征信息上传给云服务器,由云服务器根据特征信息判断是否为山寨应用,如果是,则通知终端;\n[0148] 终端提示用户该安装包为山寨应用。\n[0149] 上述特征信息如在步骤S201之前所述,可以包括:安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。\n[0150] 向用户推荐相应的正版应用,可以采取如下形式:\n[0151] 由云服务器下载与指定安装包对于的正版应用的安装包,并推荐用户进行安装。\n[0152] 当用户选择安装时,则执行安装流程。\n[0153] 本发明实施例提供了一种检测安装包是否被二次打包的方法,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。\n[0154] 实施例三\n[0155] 图4是本发明一个实施例提供的一种检测安装包是否被二次打包的装置结构框图。该装置400包括:\n[0156] 解析模块410,适于解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序;\n[0157] 排序检测模块420,适于检测第一排序与第二排序是否相同,其中,第二排序为二次打包工具对安装包的指定部分进行编译后所产生的结构体的排序;\n[0158] 第一判定模块430,适于当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。\n[0159] 可选地,解析模块410包括:\n[0160] 解压单元411,适于根据安装包的压缩格式对指定安装包进行解压缩,得到其中的dex文件;\n[0161] 排序单元412,适于查看dex文件的二进制文件,对二进制文件进行解析得到其中的多个结构体,并获得结构体的第一排序。\n[0162] 可选地,二进制文件中的结构体至少包括:\n[0163] 字符表或方法表。\n[0164] 可选地,排序单元适于按照如下方式对二进制文件进行解析得到其中的多个结构体:\n[0165] 根据操作系统厂商对每种类型的结构体定义的格式在二进制文件中查找得到其中的多个结构体。\n[0166] 可选地,该装置400还包括:\n[0167] 签名检测模块440,适于在判定指定安装包为二次打包后的文件之前,计算指定安装包的签名,并确定指定安装包的签名是否在预设的白名单中;\n[0168] 第二判定模块450,适于当签名检测模块确定指定安装包的签名在预设的白名单中时,判定指定安装包为非二次打包文件。\n[0169] 可选地,该装置400还包括:\n[0170] 记录模块460,适于在判定指定安装包为二次打包后的文件之后,将指定安装包标记为经二次打包的文件,并记录在指定的特征库中;\n[0171] 和/或,\n[0172] 第一提示模块470,适于在判定安指定装包为二次打包后的文件之后,提示用户安装包为二次打包的文件;\n[0173] 和/或,\n[0174] 第二提示模块480,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。\n[0175] 可选地,第二提示模块480具体适于按照如下方式提示用户指定安装包为山寨应用:\n[0176] 提取指定安装包中的特征信息,并将特征信息上传给云服务器,由云服务器根据特征信息判断指定安装包是否为山寨应用;\n[0177] 当接收到云服务器返回的确认结果为指定安装包为山寨应用时,提示用户指定安装包为山寨应用。\n[0178] 可选地,指定安装包的特征信息包括:\n[0179] 安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。\n[0180] 可选地,第二提示模块480具体适于按照如下方式推荐与指定安装包对应的正版应用:\n[0181] 由云服务器下载与指定安装包对于的正版应用的安装包,并推荐用户进行安装。\n[0182] 本发明实施例提供了一种检测安装包是否被二次打包的装置,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。\n[0183] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。\n[0184] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。\n[0185] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。\n[0186] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。\n[0187] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的检测安装包是否被二次打包的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。\n[0188] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。\n[0189] 至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。\n[0190] 本发明实施例提供了A1.一种检测安装包是否被二次打包的方法,包括:解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。A2.根据A1所述的方法,其中,所述解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序,包括:根据所述指定安装包的压缩格式对所述安装包进行解压缩,得到其中的dex文件和/或MF文件;查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。A3.根据A2所述的方法,其中,所述二进制文件中的结构体至少包括:字符表或方法表。A4.根据A2或A3所述的方法,其中,所述对所述二进制文件进行解析得到其中的多个结构体,包括:根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。A5.根据A1至A4中任一项所述的方法,其中,在判定所述指定安装包为二次打包后的文件之前,还包括:计算所述指定安装包的签名;确定所述指定安装包的签名是否在预设的白名单中;当所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。A6.根据A1至A5中任一项所述的方法,其中,在判定所述指定安装包为二次打包后的文件之后,还包括:将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;和/或,提示用户所述指定安装包为二次打包的文件;和/或,提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。A7.根据A6所述的方法,其中,所述提示用户所述指定安装包为山寨应用,包括:提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。A8.根据A7所述的方法,其中,所述指定安装包的特征信息包括:安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。A9.根据A6所述的方法,其中,所述推荐与所述指定安装包对应的正版应用,包括:由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。\n[0191] 本发明实施例提供了B10.一种检测安装包是否被二次打包的装置,包括:\n[0192] 解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。B11.根据B10所述的装置,其中,所述解析模块包括:解压单元,适于根据所述安装包的压缩格式对所述指定安装包进行解压缩,得到其中的dex文件和/或MF文件;排序单元,适于查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。B12.根据B11所述的装置,其中,所述二进制文件中的结构体至少包括:字符表或方法表。B13.根据B11或B12所述的装置,其中,所述排序单元适于按照如下方式对所述二进制文件进行解析得到其中的多个结构体:根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。B14.根据B10至B13中任一项所述的装置,其中,所述装置还包括:签名检测模块,适于在判定所述指定安装包为二次打包后的文件之前,计算所述指定安装包的签名,并确定所述指定安装包的签名是否在预设的白名单中;第二判定模块,适于当所述签名检测模块确定所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。B15.根据B10至14中任一项所述的装置,其中,所述装置还包括:记录模块,适于在判定所述指定安装包为二次打包后的文件之后,将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;和/或,第一提示模块,适于在所述判定所述安指定装包为二次打包后的文件之后,提示用户所述安装包为二次打包的文件;和/或,第二提示模块,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。B16.根据B15所述的装置,其中,所述第二提示模块具体适于按照如下方式提示用户所述指定安装包为山寨应用:提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。B17.根据B16所述的装置,其中,所述指定安装包的特征信息包括:安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。B18.根据B15所述的装置,其中,所述第二提示模块具体适于按照如下方式推荐与所述指定安装包对应的正版应用:由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
法律信息
- 2022-07-26
专利权的转移
登记生效日: 2022.07.14
专利权人由北京奇虎科技有限公司变更为北京奇虎科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
专利权人由奇智软件(北京)有限公司 变更为空
- 2017-06-20
- 2015-02-25
实质审查的生效
IPC(主分类): G06F 9/44
专利申请号: 201410601347.1
申请日: 2014.10.30
- 2015-01-28
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2014-12-17
|
2014-07-31
| | |
2
| |
2013-12-25
|
2013-09-24
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |