一种Android应用程序的描述和匹配方法组成比例

技术编号:11487904 阅读:102 留言:0更新日期:2015-05-21 07:27
本发明专利技术公开了一种Android应用程序的描述和匹配方法,该方法包括对Android应用程序的静态描述方法和基于此描述方法的应用程序匹配度比较方法,主要应用于Android应用程序的恶意代码静态检测。基于Android平台的应用程序核心文件classes.dex是由Class文件编译而来,基于此可以反编译分析出核心文件的代码层级结构,再通过这个结构中代码的相似度对比实现对应用程序的恶意性判断。本方法以应用程序功能实现所必需的权限为依托,反编译核心文件分析各函数中权限的使用情况并基于此构造树形结构来描述应用程序代码的层级结构,实现的细粒度比较方法有助于提高Android应用程序静态恶意性检测的准确率。

【技术实现步骤摘要】
一种Android应用程序的描述和匹配方法
本专利技术主要涉及Android恶意APK检测和归属领域,具体是一种Android应用程序(Androidapplicationpackage,APK)的描述和匹配方法。技术背景移动互联网的发展和移动智能设备的普及,带动了移动应用程序的火爆,也同时滋生了大量移动恶意应用程序和应用攻击方法,损害了移动互联网的资源和效率,侵犯了移动用户的数据安全和隐私。目前Android恶意代码的检测方法,根据检测流程和特征描述方法不同,大致可分为静态特征检测和动态行为检测两种。常用的APK静态特征包括权限声明、代码哈希、数据依赖关系、调用关系、程序组件等,检测效率比较高的是对数据依赖关系和调用关系的分析。Android应用程序对于敏感数据、系统资源、设备状态的使用和修改,都是通过调用相应的系统应用程序编程接口(ApplicationProgrammingInterface,API)API来实现的。不同代码范围和层次的API使用情况,反映了相应模块的代码功能,更能够大致推断出该模块在运行过程中的可能行为属性和表现形式。虽然基于系统API的调用情况已经被不同的研究者所尝试和采用,但现存方法只是针对单个API的简单调用过程和调用序列,没有结合程序自身的组织结构和代码模块之间的隶属关系,缺乏从程序结构的层面、从程序功能实现的角度来分析系统API调用情况,将API的调用情况结合代码层级结构进行分析,有助于对应用程序大致的功能进行推断,而应用程序同样的功能实现可能会使用不同的API调用,这样在API层面的细粒度比较方法出现的误差会比较大。
技术实现思路
本专利技术的目的是提出一种Android应用程序的描述和匹配方法,从而帮助实现对Android应用程序的恶意性检测和归属分类。实现本专利技术目的的技术方案为:解析APK源码分析其权限声明和使用情况及其和各函数之间的需求关系以及各类及函数的隶属关系,这其中要借用PScout将应用程序调用的API映射到其对应的权限。基于此想法,以权限为依托,将应用程序构造成一颗“应用-类-函数”的三层描述树,并逐层对权限的使用情况进行统计、分析和比较,最后计算出整个APK的匹配程度,并以此来达到APK的归属分类目标。其特征步骤如下:1)对Android应用程序APK进行解压缩;使用普通解压缩软件解压ZIP格式的APK文件,得到应用程序的核心二进制文件classes.dex和全局配置文件AndroidManifest.xml。2)提取AndroidManifest.xml文件中的权限声明列表,完成根节点的构造;3)分析classes.dex文件,提取应用程序的程序结构,得到APK中各函数和类的信息及其相关调用关系;根据Dalvik虚拟机上运行文件的字节码格式和文件结构解析得到应用程序的程序结构,即根据Dalvik虚拟机上执行文件的格式特征,分析classes.dex文件并提取出核心源码中的关键信息,包括包名、类名、方法名、程序的签名、系统调用的API名称、用户调用的API、API映射到的系统权限名称以及“类-函数-API”的隶属和调用关系。生成的文档包含的数据及各数据说明如下:文件名称数据内容meta.txtVersion,DexSigcstrs.txtclassID,strfuncMd5s.txtclassID,APINum,FuncMd5classes.txtclassID,superclass,className,APINum,FuncNum,APICountMaxclassFuncs.txtclassID,funcIDfuncs.txtfuncID,funcName,parameter,returnTypeallcalls.txtfuncID,calledAPIapis.txtapiID,apiName,parameter,returnType,permissionmeta.txt:包含当前所写反编译程序的版本号、当前反编译的APK的签名;cstrs.txt:包含类的编号classID、在此类中定义的字符串;funcMd5s.txt:包含函数的编号classID、此函数调用的API个数、此函数的MD5值;classes.txt:包括类的编号classID、父类名superclass、类名className、调用的API个数、此类中调用API的函数的个数、函数中调用的API个数的最大值;classFuncs.txt:包括类的编号classID、函数的编号funcID;funcs.txt:包括函数编号funcID、函数名称funcName、参数个数及类型parameter、返回值类型returnType;allcalls.txt:包括函数编号funcID、调用的API编号;apis.txt:包括API的编号apiID、API的名字apiNAme、调用此API的函数的参数parameter、其返回值类型returnType以及对应的所需的权限名称。4)构造APK的三层实例描述树;根据classFuncs.txt文档中包含的类和方法的调用关系,allcalls.txt文档中包含的方法和调用的API的编号的对应关系,apis.txt文档中包含的各API的编号和API对应的权限,构造“应用-类-函数”的三层实例描述树。根节点由AndroidManifest.xml文件中声明的权限经忽略处理后剩余权限组成。比如:AppNode{android.permission.CHANGE_WIFI_STATE,android.permission.READ_SMS,···,android.permission.INTERNET}(此处省略部分权限罗列)类节点由类所包含的方法编号的集合、父类名称、类编号以及类中使用的API个数组成,比如:ClassNode1{{974,975,976},java.lang.Object,8,2}函数节点由方法所包含的API编号的集合、参数个数、返回值类型、方法编号以及调用API的个数组成,比如:FunctionNode1{{19953,19492,19953,19947},2,V,1025,3}最后将函数节点中的API编号映射到权限,比如:{19953,android.webkit.WebViewClassic,android.permission.INTERNET}5)根据APK的实例描述树,计算APK的匹配程度;基于第(3)步得出的实例描述树,计算各个APK的匹配程度。APK的匹配程度由三个部分组成——根节点的匹配度、类层的匹配度、函数层的匹配度。各定义如下:使用的权限向量:P={P1,P2,P3,…,Pn},其中Pi(1≤i≤n)表示Android系统中所有权限;使用权限的权重向量:PVector={w1,w2,w3,…,wn},其中Wi(1≤i≤n)表示权限向量中权限Pi所对应的权重,权重由映射到此权限的API个数表示,如果此APK中未使用此权限或是为声明此权限,则它的权重为0;函数节点的匹配度:此方法借用jaccardsimilarity算法思想,其中(Pi,Wi)表示权限Pi和它对应的权重Wi,min(Pi,Wi)表示两个要比较的本文档来自技高网
...
一种Android应用程序的描述和匹配方法

【技术保护点】
一种Android应用程序的描述和匹配方法,其特征在于包括以下步骤:1)对Android应用程序APK进行解压缩得到AndroidManifest.xml文件和classes.dex文件;2)从AndroidManifest.xml文件中获取应用程序的权限声明列表;3)反编译classes.dex文件提取应用程序的程序结构,分析得到APK中各函数和类的信息及其相关调用关系;4)用PScout将相关调用关系中的应用程序编程接口API调用映射到对应的权限中,并以权限被需求的使用次数来设定此权限的权重;5)忽略步骤(2)中有声明的却并未出现在步骤(4)的分析结果中的权限,忽略步骤(4)中有的却并未出现在步骤(2)的权限声明中的API调用;6)根据步骤(3)中提取出的应用程序的程序结构,构造“应用‑类‑函数”的三层实例描述树,用以描述各类和函数的权限需求关系;7)根据APK的三层实例描述树,计算APK的相似度,并以此达到APK的归属分类目的。

【技术特征摘要】
1.一种Android应用程序的描述和匹配方法,其特征在于包括以下步骤:1)对Android应用程序APK进行解压缩得到AndroidManifest.xml文件和classes.dex文件;2)从AndroidManifest.xml文件中获取应用程序的权限声明列表;3)反编译classes.dex文件提取应用程序的程序结构,分析得到APK中各函数和类的信息及其相关调用关系;4)用PScout将相关调用关系中的应用程序编程接口API调用映射到对应的权限中,并以权限被需求的使用次数来设定此权限的权重;5)忽略步骤(2)中有声明的却并未出现在步骤(4)的分析结果中的权限,忽略步骤(4)中有的却并未出现在步骤(2)的权限声明中的API调用;6)根据步骤(3)中提取出的应用程序的程序结构,构造“应用-类-函数”的三层实例描述树,用以描述各类和函数的权限需求关系;7)根据APK的三层实例描述树,计算APK的相似度,并以此达到APK的归属分类目的;所述步骤(3)中,读取APK在Dalvik虚拟机上运行的文件字节码,即classes.dex文件,按照字节码结构反编译classes.dex文件生成8个txt文档用以描述应用程序的详细信息,文档包括该APK包含的所有对象类、函数、权限以及它们之间的各种隶属和需要关系,生成的8个txt文档所含内容如下:meta.txt:包含当前所写反编译程序的版本号、当前反编译的APK的签名;cstrs.txt:包含类的编号classID、在此类中定义的字符串;funcMd5s.txt:包含函数的编号classID、此函数调用的API个数、此函数的MD5值;classes.txt:包括类的编号classID、父类名superclass、类名className、调用的API个数、此类中调用API的函数的个数、函数中调用的API个数的最大值;classFuncs.txt:包括类的编号classID、函数的编号funcID;funcs.txt:包括函数编号funcID、函数名称funcName、参数个数及类型parameter、返回值类型returnType;allcalls.txt:包括函数编号funcID、调用的API编号;apis.txt:包括API的编号apiID、API的名字apiNAme、调用此API的方法的参数parameter、其返回值类型returnType以及对应的所需的权限名称。2.如权利要求1中所述的Android应用程序的描述和匹配方法,其特征在于:所述步骤(5)中,对于从AndroidManifest.xml中提取的任意一个权限声明,如果应用程序中没有API映射到此权限,则将此权限忽略;如果应用程序中调用的某API映射到的权限没有在此文件中出现,则将此API忽略。3.如权利要求1所述的...

【专利技术属性】
技术研发人员:魏松杰杨铃吴高翔周紫阳
申请(专利权)人:南京理工大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1