论文部分内容阅读
近年来,随着科技的迅速发展,智能手机已经占据大部分手机市场,并为人们提供便利的生活方式。其中Android系统受到越来越多用户的欢迎,为了更加方便地服务于人们的生活,安装Android系统的手机中集成了许多硬件模块,例如:WIFI、GPS、照相机、NFC(Near Field Communication)等,其中NFC是近几年来发展速度较快的一个模块,获得了包括三星,华为,HTC,Nexus等手机的支持,随着越来越多的Android手机集成NFC硬件模块,这促使众多软件开发者为其开发软件,从而使用NFC硬件模块的软件在数量上得到了提升。但同时NFC应用程序可能存在下面的问题:1)NFC应用软件中存在着一种特殊的字符串AID(Application Identifier),使用AID可以标识不同的应用程序。AID在程序编码过程中需要遵守先申请后使用的原则,但是在有些软件中,会出现申请的AID没有全都使用的情况,导致软件中出现冗余的AID,消耗了系统资源。2)NFC应用软件在控制NFC硬件时,首先需要获取到NFC硬件对应的接口。但不是所有的手机都集成了NFC硬件模块,因此在编码的过程中需要判断接口返回值是否为空,否则应用软件可能会由于空指针异常而导致崩溃。本文针对上述两个问题,提出了一种Android NFC应用程序静态分析的方法。由于NFC应用软件的源码往往难以获得,我们从分析反编译后对应的字节码入手,设计并实现了,基于Androguard,Relda2的两个静态分析工具:NFC应用软件冗余AID静态分析工具以及特定空指针异常风险评估工具。在冗余AID静态分析工具中,我们提出一种基于Relda2的静态分析框架,并将问题转换为在?-NFA(带空转移的非确定有穷状态自动机)中构造字符串问题,再转换为在DFA(确定性有穷状态自动机)中构造字符串问题,最终通过DFA模型来分析软件中是否存在冗余AID。为了提高工具的效率,我们还对Relda2生成的函数调用图进行了轻量化处理。在特定空指针异常风险评估工具中,我们提出一种基于Androguard和Apktool的静态分析框架,并且提出了一种衡量特定空指针异常风险大小的量度RL(Risk Length),通过框架中的各个模块对软件进行分析,最终计算出RL对应值,用以评估软件中存在特定空指针异常的风险大小。为了评估工具的有效性,我们对28个国内外商业NFC软件使用冗余AID静态分析工具进行分析,发现9个软件存在冗余AID,人工验证结果表明确实存在冗余AID,并且发现多数冗余AID出现在申请AID较多的软件中。另外,通过对275个国内外商业NFC软件处理后得到91个实验软件,利用空指针异常风险评估工具计算对应的风险参数(RL),之后在真机上通过自动化测试工具Monkey分别测试该91个实验软件,最终发现14个软件因特定空指针异常问题而崩溃,占实验软件的15.38%,说明NFC软件中特定空指针异常问题确实存在,同时实验结果表明当RL值越大软件越容易出现因特定空指针异常问题而崩溃,RL对应的高风险区段内有87.5%的软件会因为特定空指针异常而发生崩溃,说明了RL在检测NFC软件特定空指针异常时的准确性。