CN104317599A - 检测安装包是否被二次打包的方法和装置 - Google Patents

检测安装包是否被二次打包的方法和装置 Download PDF

Info

Publication number
CN104317599A
CN104317599A CN201410601347.1A CN201410601347A CN104317599A CN 104317599 A CN104317599 A CN 104317599A CN 201410601347 A CN201410601347 A CN 201410601347A CN 104317599 A CN104317599 A CN 104317599A
Authority
CN
China
Prior art keywords
file
sequence
designated mounting
mounting bag
installation kit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410601347.1A
Other languages
English (en)
Other versions
CN104317599B (zh
Inventor
路轶
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201410601347.1A priority Critical patent/CN104317599B/zh
Publication of CN104317599A publication Critical patent/CN104317599A/zh
Application granted granted Critical
Publication of CN104317599B publication Critical patent/CN104317599B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种检测安装包是否被二次打包的方法和装置。方法包括:解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序;检测第一排序与第二排序是否相同,其中,第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。通过本发明,可以待检测出安装包是否经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。

Description

检测安装包是否被二次打包的方法和装置
技术领域
本发明涉及计算机领域,具体涉及一种检测安装包是否被二次打包的方法和装置。
背景技术
目前,手机、平板电脑等移动终端应用越来越广,基于移动终端进行开发的APP(Application,应用程序)也越来越多。并且,现在互联网上存在众多的应用市场,均能够提供APP的下载。
由于众多的应用市场的存在,导致对于APP的管理很混乱。因此,一些恶意开发者开始对APP的安装包(例如apk文件)进行二次打包,并再次发布。
具体地,二次打包也即恶意开发者拿到APP的正版安装包,将其反编译后,加入广告、恶意代码等,再次打包为安装包,并提供给网民下载,以达到其广告宣传等目的。
而在现有技术中,网民在对安装包进行安装前无法判断是否被二次打包,且目前市面上具有成熟的二次打包工具,进行二次打包的技术门槛很低,导致了安装包被二次打包的现象泛滥。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种检测安装包是否被二次打包的方法和相应地装置。
依据本发明的一个方面,提供一种检测安装包是否被二次打包的方法,包括:
解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;
检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
可选地,所述解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序,包括:
根据所述指定安装包的压缩格式对所述安装包进行解压缩,得到其中的dex文件和/或MF文件;
查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。
可选地,所述二进制文件中的结构体至少包括:
字符表或方法表。
可选地,所述对所述二进制文件进行解析得到其中的多个结构体,包括:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
可选地,在判定所述指定安装包为二次打包后的文件之前,还包括:
计算所述指定安装包的签名;
确定所述指定安装包的签名是否在预设的白名单中;
当所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
可选地,在判定所述指定安装包为二次打包后的文件之后,还包括:
将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;
和/或,
提示用户所述指定安装包为二次打包的文件
和/或,
提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。
可选地,所述提示用户所述指定安装包为山寨应用,包括:
提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;
当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。
可选地,所述指定安装包的特征信息包括:
安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
可选地,所述推荐与所述指定安装包对应的正版应用,包括:
由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
依据本发明的另一个方面,提供一种检测安装包是否被二次打包的装置,包括:
解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;
排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
可选地,所述解析模块包括:
解压单元,适于根据所述安装包的压缩格式对所述指定安装包进行解压缩,得到其中的dex文件和/或MF文件;
排序单元,适于查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。
可选地,所述二进制文件中的结构体至少包括:
字符表或方法表。
可选地,所述排序单元适于按照如下方式对所述二进制文件进行解析得到其中的多个结构体:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
可选地,所述装置还包括:
签名检测模块,适于在判定所述指定安装包为二次打包后的文件之前,计算所述指定安装包的签名,并确定所述指定安装包的签名是否在预设的白名单中;
第二判定模块,适于当所述签名检测模块确定所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
可选地,所述装置还包括:
记录模块,适于在判定所述指定安装包为二次打包后的文件之后,将所述指定安装包标记为经二次打包的文件,并记录在指定的特征库中;
和/或,
第一提示模块,适于在所述判定所述安指定装包为二次打包后的文件之后,提示用户所述安装包为二次打包的文件;
和/或,
第二提示模块,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。
可选地,所述第二提示模块具体适于按照如下方式提示用户所述指定安装包为山寨应用:
提取所述指定安装包中的特征信息,并将所述特征信息上传给云服务器,由所述云服务器根据所述特征信息判断所述指定安装包是否为山寨应用;
当接收到所述云服务器返回的确认结果为所述指定安装包为山寨应用时,提示用户所述指定安装包为山寨应用。
可选地,所述指定安装包的特征信息包括:
安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
可选地,所述第二提示模块具体适于按照如下方式推荐与所述指定安装包对应的正版应用:
由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
本发明实施例提供了一种检测安装包是否被二次打包的方法和装置,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明一个实施例提供的一种检测安装包是否被二次打包的方法流程图;
图2是本发明一个实施例提供的一种检测安装包是否被二次打包的具体方法流程图;
图3是本发明一个实施例提供的特征库与移动终端、云服务器的交互示意图;
图4是本发明一个实施例提供的一种检测安装包是否被二次打包的装置结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
本发明实施例提供了一种检测安装包是否被二次打包的方法。该方法能够判断指定的安装包文件是否被二次打包,进而防止用户因为安装二次打包的文件而受到安全威胁或广告骚扰,也可以为恶意程序的查杀提供参考。本方法可以通过检测工具实现在计算机后台中,例如PC机以及各种服务器中均可以实现。
图1是本发明一个实施例提供的一种检测安装包是否被二次打包的方法的流程图,该方法包括步骤S102至S106。
S102,解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序。
S104,检测第一排序与第二排序是否相同。
其中,第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序。
S106,当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。
本发明实施例提供了一种检测安装包是否被二次打包的方法,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。
实施例二
本实施例为上述实施例一的一种具体应用场景,通过本实施例,能够更加清楚、具体地阐述本发明所提供的方法。在本实施例中,以对随机收集到的指定安装包文件为例进行检测,判断其是否为经过二次打包的安装包为例进行说明。
为了帮助说明本发明实施例,首先对应用程序的安装包进行说明如下:
在本发明的实施例中,安装包会包括如下信息:应用程序的安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串,安装包目录下各文件的MD5值,其中,所述可执行文件包括Dex文件,和/或,ELF文件;所述Dex文件包括classes.dex文件,扩展名为.jar的文件,以及,Dex格式的文件。
1)安装包的包名
Android操作系统通过APK的包名(package name)对各个安装的APK进行管理。“包名”源自于Java的package的概念,按照Java的package的命名风格,例如某个Android安装包的包名是com.qihoo360.mobilesafe。Android系统要求每个应用程序都声明一个唯一的安装包的包名。如果要安装的APK的包名和当前手机上某个已有的应用程序的安装包的包名重复了,那么Android系统会拒绝安装。Android平台下的山寨应用程序也需要声明一个包名,因此,包名就可以作为识别山寨应用程序的一个特征。
2)开发者签名
出于安全性的目的,Android系统要求每个APK都要包含开发者签名(digital signature)。Android系统在安装APK文件的时候会检查APK内部各文件的开发者签名是否与其预先设定的开发者签名一致,如果不一致,或者没有开发者签名,则认为文件已被篡改,拒绝该APK的安装和运行。Android平台下的山寨应用程序也不例外,所以APK文件的开发者签名也可以作为识别山寨应用程序的一个特征。
上述应用程序的开发者签名,也可称为代码签名,是在应用程序上附加一个防伪和防篡改的开发者签名来保护应用程序不被恶意修改。如果已安装的应用程序的开发者签名与应用程序的官方的开发者签名不一致,则可以认为已安装的应用程序可能被恶意修改过,该应用程序是山寨应用程序。在提取开发者签名时,对于安卓应用而言,可以从程序安装包中的元信息(META-INF)目录下提取,META-INF目录用于存储包和扩展的配置数据,例如安全性信息和版本信息,其中开发者签名就存储于此。META-INF目录如下表所示:
3)AndroidManifest.xml中列出的各模块的入口信息
AndroidManifest.xml是每个APK文件所必需的全局描述文件,里面列出了Android安装包中应用的每个模块的入口信息。在Android系统中,只有在AndroidManifest.xml中列出了的模块,才能够被系统调用。Android平台下的木马,往往会伪装成正常的应用或游戏来诱骗用户安装,其中有很多木马就是寄生在一个正常的应用或游戏中,用户运行它的时候,看上去是原来的软件或游戏,但寄生在其中的木马模块在合适的时机就被激活,从而感染用户的手机。而因为Android系统要求所有的模块都要在AndroidManifest.xml中列出,这就为寻找寄生的木马提高了重要线索。因此,AndroidManifest.xml中列出的各模块的信息,也是识别山寨应用程序的重要特征。
4)Dex文件和ELF文件
在Android系统的架构设计中,Android应用通常是用Java语言开发的,它用Android开发工具编译之后变成了二进制的字节码(byte code),这些字节码被打包成classes.dex文件,由Android平台的Dalvik虚拟机来解释执行。为了能够调用Android系统功能,Android系统提供了一套运行环境(AndroidFramework),Android应用调用系统各功能都是通过调用Android Framework的库来实现的。
另一方面,Android系统也支持应用程序通过JNI或者native executable直接运行。此时应用执行的是直接在CPU上运行的二进制机器码,不需要经过虚拟机解释,可以直接调用Android库如libc、WebKit、SQLite、OpenGL/ES等来调用系统各功能。如果Android应用要通过JNI或者native executable运行,就需要将要执行的代码编译成ELF文件格式。ELF是Executable andLinkable Format的缩写,是Android/Linux操作系统中可执行程序、共享库的文件格式。
图2是本发明一个实施例提供的一种检测安装包是否被二次打包的方法流程图,该方法包括步骤S201至S208。
首先,执行步骤201,获取待检测的指定安装包文件。
本实施例中,待检测的安装包文件可以是用户下载的安装包文件,也可以是开发人员对各种应用市场提供的安装包文件进行收集得到、待检测的安装包文件。
以安卓系统为例,安装包文件可以是APK文件。
在获取待检测的指定安装包文件后,可以开始执行检测流程,即执行步骤S202,解析该指定安装包,查看其中的dex文件和/或mf文件的二进制文件。
需要说明的是,在对安装包文件进行检测时,并不需要对安装包文件的全部进行检测,依靠其中的指定部分即可完成检测,可以有效的增加对于二次打包文件的检测效率。
以apk为例,其实际为一个压缩包文件,在按照谷歌规定的解压格式对其进行解压后,可以得到多个文件:
META-INF文件夹、res文件夹、AndroidManifest.xml文件、classes.dex文件、resources.arsc文件。
其中,
META-INF文件夹里面存放的是证书文件,软件修改后需要将里面的证书文件删除,否则软件无法安装。并且,在该文件夹中还存在一个MANIFEST.MF文件,在该文件中记录了apk的众多配置信息,例如:manifest文件的版本、该文件的生成者、定义jar文件的签名版本、应用程序或者类装载器使用该值来构建内部的类搜索路径等。
res文件夹里存放的大部分是软件所需的资源及布局文件,部分需要汉化的单词、语句会在这些***.xml文件里。
AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。
classes.dex文件是Java源码编译后的代码文件。
resources.arsc文件是编译后的资源文件。
在本实施例中,安装包文件中的指定部分也即上述后缀名为dex和/或mf的文件,在得到该dex文件和/或mf文件后,通过工具可查看其二进制文件。
在后面的实施例中,以安装包中的指定部分为dex文件为例进行说明。
接下来执行步骤S203,获取上述二进制文件中所包括的结构体的排序为第一排序。
其中,apk文件为安卓系统中的安装文件,谷歌对其中的文件有严格的格式定义,例如在dex文件中,其会包括多种类型的结构体,例如会包括多个表,如方法表、字符表等。并且,规定了每种表的格式。
在方法表中,其记录了与该apk文件相关的多个方法的ID和偏移地址,以在程序运行时进行调用;
而在字符表中,其记录了该apk所需用到的字符串的ID和偏移地址,以供程序运行时,可以找到对应的字符串。
而正是由于谷歌规定了每种结构体的格式,因此,可以根据谷歌对于每种类型的结构体的格式,得到dex文件中的结构体的排序。
例如,通过对dex文件中的结构体进行分析,可以得到第一排序为:
Method3、method2、method1、string3、string2、string1。
在得到第一排序后,执行步骤S204,检测第一排序与第二排序是否相同,若不相同,判定该安装包不是经二次打包的文件,若相同,执行步骤S205。
本实施例步骤S204中所述的第二排序即为市面上存在的二次打包工具对一般安装包的指定部分编译后所产生的结构体的排序。
需要说明的是,现有市面上存在二次打包工具,这些二次打包工具,可以在安装包中加入广告、恶意程序后,再次进行编译,得到二次打包后的安装包文件,供用户进行下载。
而这些二次打包工具有一个特点,即对安装包进行二次编译后,其dex文件中的结构体排序与原安装包是不同的,其具有一个特定的顺序(也即第二排序),区别于安卓开发者常用的编译工具所产生的正常排序。
因此,发明人使用了正常的安装包文件,使用二次打包工具进行打包,并进行反编译后,得到了其dex文件中结构体的特定排序,也即第二排序。通过检测待检测的安装包文件中dex文件中的结构体排序是否与第二排序相同,即可判断该待检测的安装包文件是否被二次打包。
需要说明的是,由于市面上存在多种二次打包工具,因此,第二排序也包括多种。
例如,第二排序可以是:
Method3、method2、method1、string3、string2、string1;
或,
Method2、method3、method1、string3、string2、string1;
或,
Method1、method2、method3、string3、string2、string1。
在本实施例中,通过将第一排序与第二排序进行对比,可以得知,第一排序与第二排序中的第一种相同,因此,该待检测的指定安装包可能是经二次打包的文件。
在确定第一排序与第二排序相同后,执行步骤S205,判定该指定安装包为二次打包的文件,并计算该指定安装包的签名。
需要说明的是,有一些安装包文件虽然经过二次打包操作,但是却不一定是恶意软件。
例如,一些国外开发商开发的软件,在进入国内后,为了适应国内的语言环境,会进行汉化,会选择将其中的文件进行相应的修改,并再次打包。而这些安装包对于用户是不存在恶意的,因此,还需对其进行合法性认证。
又例如,一些应用程序为了进行加固,会在其安装包中插入用于加固的代码,并进行二次打包,这种经二次打包操作的安装包也是合法的。
对经二次打包的安装包文件进行合法性认证,主要依靠其签名进行验证。其中,在对安装包的签名进行计算时,可以采用MD5(Message DigestAlgorithm 5,消息摘要算法第五版)算法、SHA(Secure Hash Algorithm,安全哈希算法)等。
计算得到上述指定安装包的签名后,执行步骤S206,判断指定安装包的签名是否在预设的白名单中。
其中,可以通过人工收集的方式,收集合法的二次打包的文件的签名,并将其存储在白名单中,如果安装包的签名在白名单中,即可将其放行。
具体地,所述白名单可以包含已知的受信任的应用程序的名称(包括应用程序的UID(唯一标识符)和应用程序的安装包的包名)。通过安装包的包名,即可唯一的区别安装包。
若指定安装包的签名在白名单中,则执行步骤S207,标记该安装包为合法的二次打包文件,将其放行。
若指定安装包的签名不在白名单中,则执行步骤S208,标记该安装包为非法的二次打包文件。
其中,在执行了上述步骤S208后,还可以继续执行如下操作:
(1)提示安装包为非法的二次打包文件,以避免用户在安装恶意的二次打包的安装包后,被广告骚扰或遭到恶意代码的威胁。
(2)将该非法的二次打包文件进行标记后,记录在特征库中,以使得杀毒工具在进行病毒扫描时,提升对这些二次打包文件的优先级,优先进行扫描。
由于二次打包工具获得简单,一些个人或团体很容易就能通过二次打包工具将安装包中插入恶意代码,并进行发布,导致用户中毒。因此,如果一个安装包经过二次打包,其成为恶意程序的几率就要提升很多。在进行病毒扫描时,优先扫描这些经过二次打包的安装包,就能够快速发现恶意程序,提升病毒的扫描效率。
其中,上述特征库可用于对于移动终端中的恶意程序进行扫描。如图3所示,为特征库与移动终端、云服务器的示意图。可选择的将特征库中的数据共享给移动终端、云服务器。存储于移动终端中的特征库可用于移动终端本地进行恶意程序的查杀,而存储于云服务器中的特征库可用于为移动终端等设备提供云查杀功能。
(3)提示用户该安装包为山寨应用,并向用户推荐相应的正版应用。
其中,提示用户该安装包为山寨应用,可以采用如下方式:
提取安装包中的特征信息,并将特征信息上传给云服务器,由云服务器根据特征信息判断是否为山寨应用,如果是,则通知终端;
终端提示用户该安装包为山寨应用。
上述特征信息如在步骤S201之前所述,可以包括:安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
向用户推荐相应的正版应用,可以采取如下形式:
由云服务器下载与指定安装包对于的正版应用的安装包,并推荐用户进行安装。
当用户选择安装时,则执行安装流程。
本发明实施例提供了一种检测安装包是否被二次打包的方法,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。
实施例三
图4是本发明一个实施例提供的一种检测安装包是否被二次打包的装置结构框图。该装置400包括:
解析模块410,适于解析指定安装包中的指定部分的二进制文件,得到二进制文件中的结构体的第一排序;
排序检测模块420,适于检测第一排序与第二排序是否相同,其中,第二排序为二次打包工具对安装包的指定部分进行编译后所产生的结构体的排序;
第一判定模块430,适于当第一排序与第二排序相同时,判定指定安装包为二次打包后的文件。
可选地,解析模块410包括:
解压单元411,适于根据安装包的压缩格式对指定安装包进行解压缩,得到其中的dex文件;
排序单元412,适于查看dex文件的二进制文件,对二进制文件进行解析得到其中的多个结构体,并获得结构体的第一排序。
可选地,二进制文件中的结构体至少包括:
字符表或方法表。
可选地,排序单元适于按照如下方式对二进制文件进行解析得到其中的多个结构体:
根据操作系统厂商对每种类型的结构体定义的格式在二进制文件中查找得到其中的多个结构体。
可选地,该装置400还包括:
签名检测模块440,适于在判定指定安装包为二次打包后的文件之前,计算指定安装包的签名,并确定指定安装包的签名是否在预设的白名单中;
第二判定模块450,适于当签名检测模块确定指定安装包的签名在预设的白名单中时,判定指定安装包为非二次打包文件。
可选地,该装置400还包括:
记录模块460,适于在判定指定安装包为二次打包后的文件之后,将指定安装包标记为经二次打包的文件,并记录在指定的特征库中;
和/或,
第一提示模块470,适于在判定安指定装包为二次打包后的文件之后,提示用户安装包为二次打包的文件;
和/或,
第二提示模块480,适于提示用户所述指定安装包为山寨应用,并推荐与所述指定安装包对应的正版应用。
可选地,第二提示模块480具体适于按照如下方式提示用户指定安装包为山寨应用:
提取指定安装包中的特征信息,并将特征信息上传给云服务器,由云服务器根据特征信息判断指定安装包是否为山寨应用;
当接收到云服务器返回的确认结果为指定安装包为山寨应用时,提示用户指定安装包为山寨应用。
可选地,指定安装包的特征信息包括:
安装包的包名、版本号、开发者签名、Android组件receiver的特征,Android组件service的特征,Android组件activity的特征,可执行文件中的指令或字符串和安装包目录下各文件的校验值。
可选地,第二提示模块480具体适于按照如下方式推荐与指定安装包对应的正版应用:
由云服务器下载与指定安装包对于的正版应用的安装包,并推荐用户进行安装。
本发明实施例提供了一种检测安装包是否被二次打包的装置,通过检测待检测的安装包文件中的指定部分,获取其中的结构体的第一排序,判断其第一排序是否与市面上的二次打包工具对安装包进行编译时产生的结构体的第二排序相同,若相同,则说明待检测的安装包经过该二次打包工具进行了二次打包,进而可以在用户安装程序时,提示用户文件经过二次打包,具有威胁性,或将其存入病毒扫描工具的特征库,对这些被判定为二次打包的文件进行优先扫描,提高病毒扫描工具的查杀效率和准确性。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的检测安装包是否被二次打包的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本发明实施例提供了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所述的方法,其中,所述推荐与所述指定安装包对应的正版应用,包括:由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。
本发明实施例提供了B10.一种检测安装包是否被二次打包的装置,包括:
解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。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所述的装置,其中,所述第二提示模块具体适于按照如下方式推荐与所述指定安装包对应的正版应用:由云服务器下载与所述指定安装包对于的正版应用的安装包,并推荐用户进行安装。

Claims (10)

1.一种检测安装包是否被二次打包的方法,包括:
解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;
检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
2.根据权利要求1所述的方法,其中,所述解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序,包括:
根据所述指定安装包的压缩格式对所述安装包进行解压缩,得到其中的dex文件和/或MF文件;
查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。
3.根据权利要求2所述的方法,其中,所述二进制文件中的结构体至少包括:
字符表或方法表。
4.根据权利要求2或3所述的方法,其中,所述对所述二进制文件进行解析得到其中的多个结构体,包括:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
5.根据权利要求1至4中任一项所述的方法,其中,在判定所述指定安装包为二次打包后的文件之前,还包括:
计算所述指定安装包的签名;
确定所述指定安装包的签名是否在预设的白名单中;
当所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
6.一种检测安装包是否被二次打包的装置,包括:
解析模块,适于解析指定安装包中的指定部分的二进制文件,得到所述二进制文件中的结构体的第一排序;
排序检测模块,适于检测所述第一排序与第二排序是否相同,其中,所述第二排序为二次打包工具对安装包的指定部分编译后所产生的结构体的排序;
第一判定模块,适于当所述第一排序与所述第二排序相同时,判定所述指定安装包为二次打包后的文件。
7.根据权利要求6所述的装置,其中,所述解析模块包括:
解压单元,适于根据所述安装包的压缩格式对所述指定安装包进行解压缩,得到其中的dex文件和/或MF文件;
排序单元,适于查看所述dex文件和/或MF文件的二进制文件,对所述二进制文件进行解析得到其中的多个结构体,并获得所述结构体的第一排序。
8.根据权利要求7所述的装置,其中,所述二进制文件中的结构体至少包括:
字符表或方法表。
9.根据权利要求7或8所述的装置,其中,所述排序单元适于按照如下方式对所述二进制文件进行解析得到其中的多个结构体:
根据操作系统厂商对每种类型的结构体定义的格式在所述二进制文件中查找得到其中的多个结构体。
10.根据权利要求6至9中任一项所述的装置,其中,所述装置还包括:
签名检测模块,适于在判定所述指定安装包为二次打包后的文件之前,计算所述指定安装包的签名,并确定所述指定安装包的签名是否在预设的白名单中;
第二判定模块,适于当所述签名检测模块确定所述指定安装包的签名在所述预设的白名单中时,判定所述指定安装包为非二次打包文件。
CN201410601347.1A 2014-10-30 2014-10-30 检测安装包是否被二次打包的方法和装置 Active CN104317599B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410601347.1A CN104317599B (zh) 2014-10-30 2014-10-30 检测安装包是否被二次打包的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410601347.1A CN104317599B (zh) 2014-10-30 2014-10-30 检测安装包是否被二次打包的方法和装置

Publications (2)

Publication Number Publication Date
CN104317599A true CN104317599A (zh) 2015-01-28
CN104317599B CN104317599B (zh) 2017-06-20

Family

ID=52372834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410601347.1A Active CN104317599B (zh) 2014-10-30 2014-10-30 检测安装包是否被二次打包的方法和装置

Country Status (1)

Country Link
CN (1) CN104317599B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354496A (zh) * 2015-10-10 2016-02-24 邱寅峰 Android平台自动生成的恶意程序的检测方法及系统
CN105825085A (zh) * 2016-03-16 2016-08-03 广州彩瞳网络技术有限公司 应用程序的处理方法及装置
CN107239678A (zh) * 2017-05-10 2017-10-10 东南大学 一种基于Java文件目录结构的Android应用重打包检测方法
CN107341393A (zh) * 2016-04-29 2017-11-10 腾讯科技(深圳)有限公司 应用程序安装包的检测方法和装置
CN107479939A (zh) * 2017-09-29 2017-12-15 厦门天锐科技股份有限公司 一种apk安装包重复打包的实现方法
CN107656742A (zh) * 2017-09-27 2018-02-02 北京奇虎科技有限公司 一种软件产品发布方法和装置
CN109791483A (zh) * 2017-03-14 2019-05-21 谷歌有限责任公司 用于计算设备的共享软件库
CN109858249A (zh) * 2019-02-18 2019-06-07 暨南大学 移动恶意软件大数据的快速智能比对和安全检测方法
CN110058871A (zh) * 2019-04-23 2019-07-26 湖南快乐阳光互动娱乐传媒有限公司 检测程序非法反编译和更新正式版本的方法及系统
CN110287087A (zh) * 2018-03-19 2019-09-27 百度在线网络技术(北京)有限公司 用于检测应用的方法和装置
CN112818348A (zh) * 2021-02-24 2021-05-18 北京安信天行科技有限公司 一种勒索病毒文件识别与检测方法及系统
WO2022001344A1 (zh) * 2020-06-30 2022-01-06 北京奇虎科技有限公司 取证流程中验证应用来源的方法、系统、存储介质及其计算机设备
CN114238153A (zh) * 2022-02-21 2022-03-25 麒麟软件有限公司 一种Linux系统中二进制文件检测方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103473104A (zh) * 2013-09-24 2013-12-25 北京大学 一种基于关键词上下文频率矩阵的应用重打包辨别方法
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN104216946A (zh) * 2014-07-31 2014-12-17 百度在线网络技术(北京)有限公司 一种用于确定重打包应用程序的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN103473104A (zh) * 2013-09-24 2013-12-25 北京大学 一种基于关键词上下文频率矩阵的应用重打包辨别方法
CN104216946A (zh) * 2014-07-31 2014-12-17 百度在线网络技术(北京)有限公司 一种用于确定重打包应用程序的方法和装置

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354496A (zh) * 2015-10-10 2016-02-24 邱寅峰 Android平台自动生成的恶意程序的检测方法及系统
CN105354496B (zh) * 2015-10-10 2018-05-25 北京顶象技术有限公司 Android平台自动生成的恶意程序的检测方法及系统
CN105825085A (zh) * 2016-03-16 2016-08-03 广州彩瞳网络技术有限公司 应用程序的处理方法及装置
CN105825085B (zh) * 2016-03-16 2019-02-15 广州优视网络科技有限公司 应用程序的处理方法及装置
CN107341393A (zh) * 2016-04-29 2017-11-10 腾讯科技(深圳)有限公司 应用程序安装包的检测方法和装置
CN109791483A (zh) * 2017-03-14 2019-05-21 谷歌有限责任公司 用于计算设备的共享软件库
CN107239678A (zh) * 2017-05-10 2017-10-10 东南大学 一种基于Java文件目录结构的Android应用重打包检测方法
CN107656742A (zh) * 2017-09-27 2018-02-02 北京奇虎科技有限公司 一种软件产品发布方法和装置
CN107479939A (zh) * 2017-09-29 2017-12-15 厦门天锐科技股份有限公司 一种apk安装包重复打包的实现方法
CN110287087A (zh) * 2018-03-19 2019-09-27 百度在线网络技术(北京)有限公司 用于检测应用的方法和装置
CN110287087B (zh) * 2018-03-19 2023-06-13 百度在线网络技术(北京)有限公司 用于检测应用的方法和装置
CN109858249A (zh) * 2019-02-18 2019-06-07 暨南大学 移动恶意软件大数据的快速智能比对和安全检测方法
CN109858249B (zh) * 2019-02-18 2020-08-07 暨南大学 移动恶意软件大数据的快速智能比对和安全检测方法
CN110058871A (zh) * 2019-04-23 2019-07-26 湖南快乐阳光互动娱乐传媒有限公司 检测程序非法反编译和更新正式版本的方法及系统
WO2022001344A1 (zh) * 2020-06-30 2022-01-06 北京奇虎科技有限公司 取证流程中验证应用来源的方法、系统、存储介质及其计算机设备
CN112818348A (zh) * 2021-02-24 2021-05-18 北京安信天行科技有限公司 一种勒索病毒文件识别与检测方法及系统
CN112818348B (zh) * 2021-02-24 2023-09-08 北京安信天行科技有限公司 一种勒索病毒文件识别与检测方法及系统
CN114238153A (zh) * 2022-02-21 2022-03-25 麒麟软件有限公司 一种Linux系统中二进制文件检测方法
CN114238153B (zh) * 2022-02-21 2022-07-08 麒麟软件有限公司 一种Linux系统中二进制文件检测方法

Also Published As

Publication number Publication date
CN104317599B (zh) 2017-06-20

Similar Documents

Publication Publication Date Title
CN104317599A (zh) 检测安装包是否被二次打包的方法和装置
US10152594B2 (en) Method and device for identifying virus APK
KR101402057B1 (ko) 위험도 계산을 통한 리패키지 애플리케이션의 분석시스템 및 분석방법
US9600668B2 (en) Method and device for extracting characteristic code of APK virus
Egele et al. Pios: Detecting privacy leaks in ios applications.
KR101246623B1 (ko) 악성 애플리케이션 진단 장치 및 방법
Zhou et al. Fast, scalable detection of" piggybacked" mobile applications
Preda et al. Testing android malware detectors against code obfuscation: a systematization of knowledge and unified methodology
CN104517054B (zh) 一种检测恶意apk的方法、装置、客户端和服务器
CN108536451B (zh) 应用程序的埋点注入方法和装置
CN104462971B (zh) 根据应用程序声明特征识别恶意应用程序的方法和装置
Glanz et al. CodeMatch: obfuscation won't conceal your repackaged app
Sejfia et al. Practical automated detection of malicious npm packages
CN104462959A (zh) 一种安卓应用的加固保护方法、服务器和系统
CN103679029A (zh) 一种修复山寨应用程序的方法及装置
CN104484585A (zh) 一种应用程序安装包的处理方法、装置及移动设备
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN104933366A (zh) 一种移动终端应用程序处理方法
CN104318160A (zh) 查杀恶意程序的方法和装置
CN103559447A (zh) 一种基于病毒样本特征的检测方法、检测装置及检测系统
Blázquez et al. Trouble over-the-air: An analysis of fota apps in the android ecosystem
CN112115473A (zh) 一种用于Java开源组件安全检测的方法
Li Mining androzoo: A retrospect
CN106648788A (zh) 应用程序的安装方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220714

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.