CN103577324A - 移动应用中隐私信息泄露的静态检测方法 - Google Patents
移动应用中隐私信息泄露的静态检测方法 Download PDFInfo
- Publication number
- CN103577324A CN103577324A CN201310524093.3A CN201310524093A CN103577324A CN 103577324 A CN103577324 A CN 103577324A CN 201310524093 A CN201310524093 A CN 201310524093A CN 103577324 A CN103577324 A CN 103577324A
- Authority
- CN
- China
- Prior art keywords
- function
- state machine
- file
- privacy
- source code
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 55
- 230000003068 static effect Effects 0.000 title claims abstract description 27
- 230000006870 function Effects 0.000 claims abstract description 112
- 238000000034 method Methods 0.000 claims abstract description 19
- 230000000875 corresponding effect Effects 0.000 claims description 28
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000012360 testing method Methods 0.000 claims description 12
- 238000007689 inspection Methods 0.000 claims description 11
- 230000007704 transition Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 4
- 230000002596 correlated effect Effects 0.000 claims description 3
- 230000011514 reflex Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 238000011017 operating method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 244000035744 Hura crepitans Species 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000010230 functional analysis Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种移动应用中隐私信息泄露的静态检测方法,包括:首先检查代码的完备性,如果代码不完备则对源代码进行准备工作,加载隐私泄露对应的状态机描述文件,得到相关的状态机信息,对源代码进行编译,得到类和函数等的详细信息,对源代码进行预分析,生成抽象语法树等基本数据结构,得到函数间的调用关系。再以函数为单位进行检测分析,根据状态机中关联的方法来为各个状态机创建状态机实例,在函数对应的控制流图上进行状态机实例迭代,当状态机实例进入错误状态时,报告错误,在检测完成后人工对检测到的错误进行检查,确认检测结果。应用本发明能够有效检测不同操作系统平台的应用程序中存在的隐私泄露代码,有效防止用户隐私信息泄露。
Description
技术领域
本发明涉及软件测试技术和应用程序安全检测技术,尤其涉及移动应用中隐私信息泄露的静态检测方法。
背景技术
移动设备应用隐私泄露目前受到了很多研究机构和学者的重视,国内外已经有多家机构进行了相关的研究。根据是否运行被检测应用可以将检测技术划分为两种:动态检测和静态检测。
动态检测技术是在运行应用的过程中,检查应用是否对隐私泄露进行了泄露操作。由于是在应用运行过程中进行检测,所以动态检测对于实时性的要求比较高,因为必须要在恶意应用对用户的隐私泄露前检测出威胁。通常的动态检测解决方案是利用沙盒、虚拟机等来模拟执行应用,但是这样会带来很大的资源消耗。
静态检测技术是在运行应用之前进行的,并不运行应用本身,而是通过分析应用源程序的语法、结构、过程等来检测应用是否存在隐私泄露。对源程序做结构分析、控制流图分析、符号执行等来查找问题。静态检测对资源的需求相对于动态检测要少,而且对于实时性的要求更低,因为在应用执行之前检测已经完成。
对于常见移动终端(如手机、平板电脑等)的操作系统,如Android、ios、Windows Phone系统等,应用程序的隐私信息泄露主要包括两方面:读取隐私信息和发送隐私信息。根据隐私信息的读取方式将隐私信息划分为数据库型隐私、系统服务型隐私两大类,并且为两大类分别编写不同的检查条件。隐私发送类型包括网络连接类、短信类以及文件类,针对不同的泄露类型编写不同的发送检测条件。
目前,移动互联网隐私安全问题形式严峻,一旦发生隐私信息泄露,轻则会给智能移动终端使用者造成财产方面的损失,重则名誉、人格,甚至人身安全受到威胁,若不加以重视,任其发展的后果将十分严重。而现有常用手机安全软件查杀隐私泄露,由于运行平台繁多、须定期更新或升级等各种原因,很难从源头上防止手机隐私信息泄露。
发明内容
有鉴于此,本发明的主要目的在于提供一种移动应用中隐私信息泄露的静态检测方法,能够从源代码层面检测应用程序是否存在隐私泄露,可有效防止恶意泄露用户隐私及传播,并能够快速准确的发现应用程序中的隐私泄露隐患,提高检测效率和检测精度。
为达到上述目的,本发明的技术方案是这样实现的:
一种移动应用中隐私信息泄露的静态检测方法,包括如下步骤:
步骤A、取得源代码输入,根据操作系统的应用特征,对源代码进行完备性检查;
步骤B、根据步骤A中检查的结果,若代码完备则执行步骤D,否则执行步骤C;
步骤C、对源代码进行预处理工作,使得源代码能够正确的通过编译;
步骤D、加载要检测的隐私信息对应的状态机描述文件,得到对应的隐私泄露的状态机;
步骤E、编译源代码对源代码进行预分析,得到每个类的抽象语法树,并且在抽象语法树的基础上生成符号表,控制流图,定义使用链和函数调用关系等数据结构,为后续的分析做好准备工作;
步骤F、根据函数调用关系确定文件的调用关系,进而确定文件的分析顺序,在文件内部确定文件内的函数调用关系,以函数为单位生成函数摘要;
步骤G、以函数为单位进行隐私泄露的检测工作,根据加载的状态机在函数中创建状态机实例,在函数的控制流图上进行状态机实例的迭代,在每个控制流节点上计算该节点对状态机实例的影响,检查状态机实例的状态转换条件,如果符合条件就进行状态转换;如果转移到错误状态就报错;
步骤H、检查是否所有函数已经检查完毕,如果没有则继续执行步骤G,如果全部检测完毕就结束控制流迭代,继续步骤I;
步骤I、将检测结果写入文件中,人工对检测结果进行校对,检查是否存在误报等情况。
其中,所述步骤A具体包括:
通过程序入口参数获得源代码工程所在目录,对源代码进行检测;Android应用程序与Java普通应用稍有不同,它引入了资源文件和AIDL接口文件的概念,在编译的时候需要将资源文件和AIDL接口文件转换成对应的Java文件才能正常编译;具体包括:
A1、检查工程的project.properties文件,得到应用中所使用的Android SDK的版本信息;
A2、检查当前工程的源代码目录,查找是否存在gen目录,如果存在,则在gen目录中查找是否存在R.java文件,查看资源文件是否准备好;
A3、检查源代码目录中是否存在.aidl格式的文件,如果存在则在该目录和gen目录下查找是否存在相同路径相同名字的.java格式文件,查看接口文件是否准备好。
所述步骤B具体包括:步骤B主要是根据步骤A判断源代码是否需要进行预处理工作,若需要,则执行步骤C;否则执行步骤D。
所述步骤C包括:根据步骤A中的检查结果对应用程序源代码进行预处理工作,具体为:
C1、如果资源文件相关类R.java不存在,则调用aapt命令生成R.java文件,即关联资源文件;
C2、如果接口文件存在且没有被转换,则调用aidl命令生成.aidl文件对应的.java文件,完成接口文件的准备工作。
所述步骤D中进行状态机描述文件的加载工作,具体包括:
D1、扫描状态机描述文件的存放目录,得到需要检测的隐私信息对应的状态机描述文件(xml格式);
D2、调用状态机加载方法,读取每个状态机描述文件,生成状态机;每个状态机对应一个状态机类的对象,在对象中包含状态机包含的状态、转换、转换条件的集合以及状态机关联的动作类路径,最后将所有状态机放在待检测状态机集合中。
所述步骤E中的对源代码进行预分析工作,得到隐私泄露检测过程中需要用到的抽象语法树、控制流图等数据结构;具体包括:
E1、对应用程序源代码进行编译工作得到class文件;
E2、利用JavaCC生成的JavaParser对源代码进行语法解析,生成源代码对应的抽象语法树;
E3、在抽象语法树上利用访问者模式对抽象语法树进行访问,结合编译得到的class文件,利用Java反射机制得到抽象语法树上各个符号的函数以,生成符号表;
E4、在抽象语法树上对函数节点进行访问,为每个函数生成对应的控制流图;
E5、访问抽象语法树,找到函数调用节点,记录函数间的调用关系。
所述步骤F中按顺序为函数生成函数摘要,具体包括:
F1、根据函数调用关系得到函数所在文件的分析顺序;
F2、在文件内部检查文件内函数的调用关系,得到文件内函数的分析顺序;
F3、加载要生成的函数摘要的类型,对于隐私信息的读取和泄露,根据不同的类型有不同的函数摘要;
F4、对每个函数进行控制流图迭代访问,查看是否存在带检测类型的摘要信息,是否存在隐私信息读取特征和发送特征;具体包括:
F4.1、查找函数中是否存在隐私读取,如果存在,那么记录隐私信息在控制流图的迭代以及赋值情况,检查函数是否存在return语句,如果存在,检查return的返回值中是否包含隐私信息,如果包含,则在函数摘要中记录该信息;如果该隐私信息被赋值给了成员变量,那么将该成员变量加入到成员变量摘要中;
F4.2、检查函数中是否调用了可能造成隐私泄露的API;在函数的控制流图中记录函数形参的迭代过程,查找控制流图当前节点是否存在可能泄露隐私的API调用,如果存在,检查该调用的实参是否包含当前函数形参的别名,如果包含说明该函数具备信息发送的特征,将其记录到函数摘要中。
所述G步骤以函数为单位进行隐私泄露的检测,具体包括:
G1、在当前函数对应的抽象语法树上关联状态机实例的生成方法,在语法树上匹配,查找符合条件的节点,生成状态机实例,并关联对应的语法树节点;
G2、在函数对应的控制流图上对状态机实例进行状态机迭代;在控制流图的每个节点上汇总所有状态机实例的当前状态,并且计算当前节点是否满足状态转换的条件,如果满足,则进行状态转换,当状态转换到错误状态时,说明检测到隐私泄露,记录该节点以及被泄漏的变量信息。
所述H步骤是对检测是否结束进行判断具体包括:
是否所有的函数都已经检测完毕,如果没有则在下一个函数节点上执行步骤G,如果所有函数都检测完毕,那么执行步骤I。
所述步骤I中是对检测结果进行人工校对,具体包括:
将检测结果写入到文件中,人工检查文件中的记录,在应用程序对应的源代码上核对是否是误报。
本发明所提供的移动应用中隐私信息泄露的静态检测方法,具有以下优点:
本发明提出的缺陷模型在Android等平台应用隐私泄露的静态检测中的应用,能够针对源代码的特点,对源代码进行了相关处理,并为隐私泄露创建对应的状态机模型以及函数摘要的生成方法,相对于一般的静态处理方法(基于二进制代码进行分析),本发明针对源代码进行分析,并且将隐私信息进行汇总和分类,整理了可能造成隐私泄露的API调用。在源代码的层面对隐私泄露进行检测,将软件测试的思想应用到隐私泄露检测中,更加快速准确的发现应用程序中的隐私泄露,提高了检测效率和检测精度。
附图说明
图1为本发明移动应用中隐私信息泄露的静态检测方法流程示意图;
图2为本发明缺陷模式在Android应用隐私泄露的静态检测中应用的流程示意图;
图3为本发明手机基本信息状态机对应的状态转移图;
图4为本发明检测的某工程的代码图;
图5为Android应用程序的基本结构图;
图6为本发明示例代码中foo函数对应的控制流图。
具体实施方式
下面结合附图及本发明的实施例,以在Android平台下进行检测为例(其余移动终端操作系统与其类似),对本发明的移动应用中隐私信息泄露的静态检测方法作进一步详细的说明。
图1为本发明移动应用中隐私信息泄露的静态检测方法流程示意图。如图1所示,包括如下步骤:
步骤A、取得源代码输入,根据操作系统,如Android平台的应用特征,对源代码进行完备性检查。
这里,通过程序入口参数获得源代码工程所在目录,对源代码进行检测。其中,Android应用程序与Java普通应用在这里稍有不同,其需要引入资源文件和AIDL接口文件的概念,在编译的时候需要将资源文件和AIDL接口文件转换成对应的Java文件才能正常编译。
步骤B、根据步骤A中检查的结果,若代码完备则执行步骤D,否则执行步骤C。这里,需根据步骤A判断源代码是否需要进行预处理工作,若需要,则执行步骤C;否则执行步骤D。
步骤C、对源代码进行预处理工作,使得源代码能够正确的通过编译。
这里,步骤C具体包括:
C1、关联资源文件,根据project.properties文件得到应用使用的SDK版本,然后调用SDK提供的aapt命令生成R.java;
C2、检查应用中是否存在AIDL接口文件,如果存在AIDL接口文件,那么调用SDK提供的aidl工具生成AIDL接口文件对应的Java文件。
步骤D、加载要检测的隐私信息对应的状态机描述文件,得到对应的隐私泄露的状态机。
这里,所述步骤D具体包括:
D1、状态机描述文件存放在程序指定目录,读取指定目录的文件列表,得到需要检测的隐私信息对应的状态机描述文件;
D2、状态机描述文件是用xml语言编写的,调用状态机加载方法,读取每个状态机描述文件,生成状态机以及状态机包含的状态、转换以及转换条件的集合。
步骤E、编译源代码对源代码进行预分析,得到每个类的抽象语法树,并且在抽象语法树的基础上生成符号表,控制流图,定义使用链和函数调用关系等数据结构,为后续的分析做好准备工作。
这里,所述步骤E具体包括:
E1、对源代码进行编译,Java提供了反射机制,可以通过反射调用得到类、方法以及成员变量的特征信息;
E2、对源代码进行预分析,通过JavaCC解析Java文法得到的JavaParser语法解释器生成抽象语法树,在抽象语法树上通过访问者模式生成符号表和控制流图,并分析函数间的调用关系。
步骤F、根据函数调用关系确定文件的调用关系,进而确定文件的分析顺序,在文件内部确定文件内的函数调用关系,以函数为单位生成函数摘要。
这里,所述步骤F具体包括:
F1、根据函数调用关系,得到函数所在文件的调用关系,进而得到文件的分析顺序;
F2、得到文件内部的函数列表以及函数的调用关系,根据根据函数的调用关系的逆序来进行以函数为单位的分析,为每个函数根据不同的隐私类型生成读取类和泄漏类函数摘要。
步骤G、以函数为单位进行隐私泄露的检测工作,根据加载的状态机在函数中创建状态机实例,在函数的控制流图上进行状态机实例的迭代,在每个控制流节点上计算该节点对状态机实例的影响,检查状态机实例的状态转换条件,如果符合条件就进行状态转换;如果转移到错误状态就报错。
这里,所述步骤G具体内容如下:
以函数为单位开始进行隐私泄漏的检测,首先调用状态机中关联的状态机实例生成方法访问当前函数生成状态机实例;在函数控制流图上进行状态机迭代,在每个节点上维护当前节点的各个状态机实例的状态集合并计算当前节点是否满足状态转移条件,如果满足则进行状态转换,当状态跳转到错误状态时就代表检测到一个隐私泄漏,记录该信息并继续控制流迭代,直到当前函数结束。
步骤H、检查是否所有函数已经检查完毕,如果没有则继续执行步骤G,如果全部检测完毕就结束控制流迭代,继续步骤I。
这里,所述步骤H包括:
在一个函数检查完毕之后,检查函数列表总是还有未检测函数,如果有则继续在下一个函数中执行步骤G,如果没有就代表所有的函数方法已经检测结束,进行步骤I。
步骤I、将检测结果写入文件中,人工对检测结果进行校对,检查是否存在误报等情况。
这里,所述步骤I具体包括:将检测结果写入到文件中,对一个Android应用的自动检测结束,人工查看结果文件,查找文件中是否存在误报情况。
下面结合图2~图6对本发明的方法在Android系统的应用进行举例说明。
图2为本发明缺陷模式在Android应用隐私泄露的静态检测中应用的流程示意图。如图2所示,主要包括:
步骤1:检查工程目录(参考图5),找到project.properties文件,在文件中找到target属性对应的值就是应用使用的Android SDK版本,查找工程中是否存在gen目录,如果存在,继续检查gen目录的子目录中是否包含R.java文件,记录查找结果;在工程的src目录查找是否存在aidl接口文件,如果存在,则在aidl文件所在目录和gen目录查找是否存在相同路径和名称的java文件,记录查找结果。
步骤2:检查步骤1的查找结果,如果没有找到R.java或者aidl接口文件对应的java文件,那么进行步骤3.1或步骤3.2,否则进行步骤4。
步骤3.1:如果没有找到R.java文件,调用aapt命令,以步骤1中得到的Android SDK版本为参数生成R.java文件;
步骤3.2:如果找到aidl接口文件且未找到对应的java文件,那么调用aidl命令生成aidl接口文件对应的java文件。完成应用源代码的准备工作。
步骤4:加载状态机描述文件,我们定义了CIL(联系人信息泄漏)、PIL(手机基本信息泄露)、PKIL(安装软件信息泄露)等几种不同的隐私类型对应的状态机描述文件,在描述文件中定义了状态机包含的状态集合、状态间可能的转换、每个转换所需要满足的条件以及执行相关检测的关联动作(参考图3)。然后运行步骤5.1或步骤5.2。
步骤5.1:对源代码进行编译工作。编译器采用Java API提供的JavaCompiler,在编译过程中对文件编码进行了识别,并对不同的编码格式进行了编码转换,确保编译过程能够准确生成class文件;
步骤5.2:对源代码进行预分析,以文件为单位为源代码生成抽象语法树,并在抽象语法树上通过访问者模式进行遍历,生成符号表和控制流图以及函数间的调用关系。在图4中,函数调用关系为foo调用registerUser,registerUser调用doHTTPPost。然后运行步骤6.1或步骤6.2。
步骤6.1:确定文件分析顺序以及函数分析顺序。分析顺序是调用关系的逆序。如图4所示的函数的分析顺序为doHTTPPost、registerUser、foo。
步骤6.2:为每个函数生成函数摘要。在doHTTPPost函数中调用了HttpClient的execute()函数,此函数为网络连接API,并且该函数将doHTTPPost的形参的封装作为参数,发送到网络,所以doHTTPPost函数包含网络泄露的摘要信息。再分析registerUser函数,在registerUser函数中调用了doHTTPPost函数,而且将registerUser的形参作为doHTTPPost的实参进行了使用,发生了摘要传递,所以registerUser也包含了网络泄露的摘要信息。最后分析foo函数,函数没有虽然读取了手机的IMEI信息,但是没有对信息进行return,而且也没有对函数的形参进行泄漏,所以foo函数没有摘要信息。
步骤7:以函数为单位进行分析,先分析doHTTPPost函数,在doHTTPPost函数的语法树上查找是否有满足状态机实例的创建条件的节点,即是否有读取隐私信息的节点,发现该函数并不存在隐私读取,所以该函数上没有创建状态机实例。没有状态机实例则该函数的分析结束。然后运行步骤8。
这里,与doHTTPPost函数的检测相同,在registerUser函数中同样没有发现隐私读取时,继续步骤8。
步骤8:检查是否还有未分析函数,发现还有registerUser函数和foo函数未检测,在registerUser函数上运行步骤7。
这里,检查发现还有foo函数未检测,则在foo函数上继续执行步骤7。
步骤7.1:同前面两个函数一样,在foo的抽象语法树上检查是否存在隐私读取节点,发现在第3行的节点上获得了手机基本信息服务管理类,说明可能读取了隐私信息。为其创建PIL状态机实例,并将变量manager关联到状态机实例上。此时PIL的状态机实例处于Start状态;
步骤7.2:在foo函数对应的控制流上进行状态机实例的迭代,如图6所示,在迭代开始的func_head_0节点上状态机处于Start状态,在decl_1节点上,manager读取了隐私,并且manager就是当前PIL状态机实例关联的变量,所以符合状态机的状态转换条件,状态机实例跳转到InfoRead状态(参考图3);在后续的decl_2和decl_3节点上没有对manager做任何处理,所以在这两个节点上只是单纯的继承了各自前驱节点的状态,都是InfoRead状态。在decl_4节点上,调用了registerUser函数,registerUser函数是包含泄露摘要的,检查registerUser的实参发现是imei,包含了隐私信息,所以在此处程序通过调用registerUser函数将手机的IMEI码信息发送到网络上,造成了用户的隐私泄露,所以状态机跳转到ERROR状态,并记录该泄露信息。然后状态机重新跳转到InfoRead状态,继续检查func_out_5发现没有泄露信息,当前函数检查完毕,状态机实例销毁。继续步骤8。
步骤9:检查发现所有的函数都检测完毕,继续步骤10。
步骤10:将检测到的隐私泄露信息写入结果文件,人工校对后发现确实发生了隐私泄露,程序检测结果正确。至此对一个Android应用的检测到此结束。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种移动应用中隐私信息泄露的静态检测方法,其特征在于,包括如下步骤:
A、取得源代码输入,根据操作系统的应用特征,对源代码进行完备性检查;
B、根据步骤A中检查的结果,若代码完备则执行步骤D,否则执行步骤C;
C、对源代码进行预处理工作,使得源代码能够正确的通过编译,然后执行步骤D;
D、加载要检测的隐私信息对应的状态机描述文件,得到对应的隐私泄露的状态机;
E、编译源代码对源代码进行预分析,得到每个类的抽象语法树,并且在抽象语法树的基础上生成符号表,控制流图,定义使用链和函数调用关系的数据结构,为后续的分析做好准备工作;
F、根据函数调用关系确定文件的调用关系,进而确定文件的分析顺序,在文件内部确定文件内的函数调用关系,以函数为单位生成函数摘要;
G、以函数为单位进行隐私泄露的检测工作,根据加载的状态机在函数中创建状态机实例,在函数的控制流图上进行状态机实例的迭代,在每个控制流节点上计算该节点对状态机实例的影响,检查状态机实例的状态转换条件,如果符合条件就进行状态转换;如果转移到错误状态就报错;
H、检查是否所有函数已经检查完毕,如果没有则继续执行步骤G,如果全部检测完毕就结束控制流迭代,继续步骤I;
I、将检测结果写入文件中,人工对检测结果进行校对,检查是否存在误报情况。
2.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤A具体内容如下:
通过程序入口参数获得源代码工程所在目录,对源代码进行检测;Android应用程序与Java普通应用不同,其引入了资源文件和AIDL接口文件的概念,在编译的时候需要将资源文件和AIDL接口文件转换成对应的Java文件才能正常编译。
3.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤B具体包括:根据步骤A判断源代码是否需要进行预处理工作,若需要,则执行步骤C;否则执行步骤D。
4.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述步骤C具体包括:
C1、关联资源文件,根据project.properties文件得到应用使用的SDK版本,然后调用SDK提供的aapt命令生成R.java;
C2、检查应用中是否存在AIDL接口文件,如果存在AIDL接口文件,那么调用SDK提供的aidl工具生成AIDL接口文件对应的Java文件。
5.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤D具体包括:
D1、状态机描述文件存放在程序指定目录,读取指定目录的文件列表,得到需要检测的隐私信息对应的状态机描述文件;
D2、状态机描述文件是用xml语言编写的,调用状态机加载方法,读取每个状态机描述文件,生成状态机以及状态机包含的状态、转换以及转换条件的集合。
6.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤E具体包括:
E1、对源代码进行编译,Java提供了反射机制,可以通过反射调用得到类、方法以及成员变量的特征信息;
E2、对源代码进行预分析,通过JavaCC解析Java文法得到的JavaParser语法解释器生成抽象语法树,在抽象语法树上通过访问者模式生成符号表和控制流图,并分析函数间的调用关系。
7.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤F具体包括:
F1、根据函数调用关系,得到函数所在文件的调用关系,进而得到文件的分析顺序;
F2、得到文件内部的函数列表以及函数的调用关系,根据根据函数的调用关系的逆序来进行以函数为单位的分析,为每个函数根据不同的隐私类型生成读取类和泄漏类函数摘要。
8.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤G具体包括:
以函数为单位开始进行隐私泄漏的检测,首先调用状态机中关联的状态机实例生成方法访问当前函数生成状态机实例;在函数控制流图上进行状态机迭代,在每个节点上维护当前节点的各个状态机实例的状态集合并计算当前节点是否满足状态转移条件,如果满足则进行状态转换,当状态跳转到错误状态时就代表检测到一个隐私泄漏,记录该信息并继续控制流迭代,直到当前函数结束。
9.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述的步骤H包括:
在一个函数检查完毕之后,检查函数列表总是还有未检测函数,如果有则继续在下一个函数中执行步骤G,如果没有就代表所有的函数方法已经检测结束,进行步骤I。
10.根据权利要求1所述隐私信息泄露的静态检测方法,其特征在于,所述步骤I具体包括:将检测结果写入到文件中,对一个Android应用的自动检测结束,人工查看结果文件,查找文件中是否存在误报情况。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310524093.3A CN103577324B (zh) | 2013-10-30 | 2013-10-30 | 移动应用中隐私信息泄露的静态检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310524093.3A CN103577324B (zh) | 2013-10-30 | 2013-10-30 | 移动应用中隐私信息泄露的静态检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577324A true CN103577324A (zh) | 2014-02-12 |
CN103577324B CN103577324B (zh) | 2017-01-18 |
Family
ID=50049148
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310524093.3A Expired - Fee Related CN103577324B (zh) | 2013-10-30 | 2013-10-30 | 移动应用中隐私信息泄露的静态检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577324B (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239799A (zh) * | 2014-09-05 | 2014-12-24 | 清华大学 | 基于行为链的Android应用程序隐私窃取检测方法及系统 |
CN105184168A (zh) * | 2015-09-02 | 2015-12-23 | 青岛工业软件研究所(中国科学院软件研究所青岛分部) | Android系统源码漏洞关联影响的追踪方法 |
CN105677311A (zh) * | 2014-11-21 | 2016-06-15 | 卓望数码技术(深圳)有限公司 | 一种函数调用关系的识别方法及装置 |
CN106657096A (zh) * | 2016-12-29 | 2017-05-10 | 北京奇虎科技有限公司 | Web漏洞检测方法、装置及系统 |
CN106685966A (zh) * | 2016-12-29 | 2017-05-17 | 北京奇虎科技有限公司 | 泄露信息的检测方法、装置及系统 |
CN107168981A (zh) * | 2016-03-08 | 2017-09-15 | 慧荣科技股份有限公司 | 函式管理方法与内存装置 |
CN107273227A (zh) * | 2017-06-30 | 2017-10-20 | 百度在线网络技术(北京)有限公司 | 应用间的通信方法、装置、设备及存储介质 |
CN107969154A (zh) * | 2015-03-06 | 2018-04-27 | 诺基亚技术有限公司 | 隐私管理 |
CN109214188A (zh) * | 2017-06-30 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 一种漏洞分析方法和装置及数据处理方法和装置 |
CN109426601A (zh) * | 2017-07-17 | 2019-03-05 | 华为软件技术有限公司 | 一种对程序进行无状态检测的方法和装置 |
CN109739509A (zh) * | 2018-09-30 | 2019-05-10 | 北京奇虎科技有限公司 | 隐藏api调用的检测方法、装置及计算机存储介质 |
CN109829298A (zh) * | 2018-11-26 | 2019-05-31 | 努比亚技术有限公司 | 内存泄露风险检测方法、终端及计算机可读存储介质 |
CN110147235A (zh) * | 2019-03-29 | 2019-08-20 | 中国科学院信息工程研究所 | 一种源代码与二进制代码间的语义比对方法和装置 |
CN110781081A (zh) * | 2019-10-12 | 2020-02-11 | 南京信息职业技术学院 | 一种移动应用回调强制触发方法、系统及存储介质 |
CN111666218A (zh) * | 2020-06-08 | 2020-09-15 | 北京字节跳动网络技术有限公司 | 代码审计方法、装置、电子设备及介质 |
WO2020210989A1 (zh) * | 2019-04-16 | 2020-10-22 | 深圳市欢太科技有限公司 | 隐私合规检测方法及相关产品 |
CN112230935A (zh) * | 2020-11-03 | 2021-01-15 | 支付宝(杭州)信息技术有限公司 | 一种应用内的隐私风险检测方法、装置以及设备 |
CN113536305A (zh) * | 2020-04-17 | 2021-10-22 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN114595482A (zh) * | 2022-03-10 | 2022-06-07 | 北京邮电大学 | 一种基于静态检测的软件源代码隐私检测方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090132861A1 (en) * | 2007-11-16 | 2009-05-21 | Microsoft Corporation | Privacy Enhanced Error Reports |
CN101937388A (zh) * | 2009-12-17 | 2011-01-05 | 北京测腾信息技术有限公司 | 一种高可扩展性和可维护性的源代码缺陷检测方法及装置 |
CN102201845A (zh) * | 2011-04-21 | 2011-09-28 | 清华大学 | 基于蓝牙情境感知技术的移动交友系统 |
CN102945337A (zh) * | 2012-11-27 | 2013-02-27 | 国电南瑞科技股份有限公司 | Subversion用户密码在线自助管理方法和系统 |
-
2013
- 2013-10-30 CN CN201310524093.3A patent/CN103577324B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090132861A1 (en) * | 2007-11-16 | 2009-05-21 | Microsoft Corporation | Privacy Enhanced Error Reports |
CN101937388A (zh) * | 2009-12-17 | 2011-01-05 | 北京测腾信息技术有限公司 | 一种高可扩展性和可维护性的源代码缺陷检测方法及装置 |
CN102201845A (zh) * | 2011-04-21 | 2011-09-28 | 清华大学 | 基于蓝牙情境感知技术的移动交友系统 |
CN102945337A (zh) * | 2012-11-27 | 2013-02-27 | 国电南瑞科技股份有限公司 | Subversion用户密码在线自助管理方法和系统 |
Non-Patent Citations (1)
Title |
---|
于鹏洋: "Android应用隐私泄露静态代码分析", 《软件工程》 * |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239799A (zh) * | 2014-09-05 | 2014-12-24 | 清华大学 | 基于行为链的Android应用程序隐私窃取检测方法及系统 |
CN105677311A (zh) * | 2014-11-21 | 2016-06-15 | 卓望数码技术(深圳)有限公司 | 一种函数调用关系的识别方法及装置 |
CN105677311B (zh) * | 2014-11-21 | 2019-03-29 | 卓望数码技术(深圳)有限公司 | 一种函数调用关系的识别方法及装置 |
CN107969154A (zh) * | 2015-03-06 | 2018-04-27 | 诺基亚技术有限公司 | 隐私管理 |
CN105184168A (zh) * | 2015-09-02 | 2015-12-23 | 青岛工业软件研究所(中国科学院软件研究所青岛分部) | Android系统源码漏洞关联影响的追踪方法 |
US11308080B2 (en) | 2016-03-08 | 2022-04-19 | Silicon Motion, Inc. | Function management method and memory device |
CN107168981A (zh) * | 2016-03-08 | 2017-09-15 | 慧荣科技股份有限公司 | 函式管理方法与内存装置 |
CN106657096B (zh) * | 2016-12-29 | 2021-01-01 | 北京奇虎科技有限公司 | Web漏洞检测方法、装置及系统 |
CN106685966A (zh) * | 2016-12-29 | 2017-05-17 | 北京奇虎科技有限公司 | 泄露信息的检测方法、装置及系统 |
CN106657096A (zh) * | 2016-12-29 | 2017-05-10 | 北京奇虎科技有限公司 | Web漏洞检测方法、装置及系统 |
CN106685966B (zh) * | 2016-12-29 | 2020-08-04 | 北京奇虎科技有限公司 | 泄露信息的检测方法、装置及系统 |
CN109214188A (zh) * | 2017-06-30 | 2019-01-15 | 阿里巴巴集团控股有限公司 | 一种漏洞分析方法和装置及数据处理方法和装置 |
CN107273227A (zh) * | 2017-06-30 | 2017-10-20 | 百度在线网络技术(北京)有限公司 | 应用间的通信方法、装置、设备及存储介质 |
CN109214188B (zh) * | 2017-06-30 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 一种漏洞分析方法和装置及数据处理方法和装置 |
CN109426601A (zh) * | 2017-07-17 | 2019-03-05 | 华为软件技术有限公司 | 一种对程序进行无状态检测的方法和装置 |
CN109426601B (zh) * | 2017-07-17 | 2022-05-10 | 华为技术有限公司 | 一种对程序进行无状态检测的方法和装置 |
CN109739509A (zh) * | 2018-09-30 | 2019-05-10 | 北京奇虎科技有限公司 | 隐藏api调用的检测方法、装置及计算机存储介质 |
CN109829298A (zh) * | 2018-11-26 | 2019-05-31 | 努比亚技术有限公司 | 内存泄露风险检测方法、终端及计算机可读存储介质 |
CN110147235A (zh) * | 2019-03-29 | 2019-08-20 | 中国科学院信息工程研究所 | 一种源代码与二进制代码间的语义比对方法和装置 |
WO2020210989A1 (zh) * | 2019-04-16 | 2020-10-22 | 深圳市欢太科技有限公司 | 隐私合规检测方法及相关产品 |
CN110781081A (zh) * | 2019-10-12 | 2020-02-11 | 南京信息职业技术学院 | 一种移动应用回调强制触发方法、系统及存储介质 |
CN110781081B (zh) * | 2019-10-12 | 2024-04-09 | 南京信息职业技术学院 | 一种移动应用回调强制触发方法、系统及存储介质 |
CN113536305A (zh) * | 2020-04-17 | 2021-10-22 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN113536305B (zh) * | 2020-04-17 | 2022-09-09 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN111666218A (zh) * | 2020-06-08 | 2020-09-15 | 北京字节跳动网络技术有限公司 | 代码审计方法、装置、电子设备及介质 |
CN112230935A (zh) * | 2020-11-03 | 2021-01-15 | 支付宝(杭州)信息技术有限公司 | 一种应用内的隐私风险检测方法、装置以及设备 |
CN114595482A (zh) * | 2022-03-10 | 2022-06-07 | 北京邮电大学 | 一种基于静态检测的软件源代码隐私检测方法及系统 |
CN114595482B (zh) * | 2022-03-10 | 2024-06-11 | 北京邮电大学 | 一种基于静态检测的软件源代码隐私检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103577324B (zh) | 2017-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577324A (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN107832619B (zh) | Android平台下应用程序漏洞自动化挖掘系统及方法 | |
Yang et al. | Leakminer: Detect information leakage on android with static taint analysis | |
US7975257B2 (en) | Iterative static and dynamic software analysis | |
US9645912B2 (en) | In-place function modification | |
CN111488579B (zh) | 漏洞检测方法、装置、电子设备和计算机可读存储介质 | |
CN110013672B (zh) | 用于机器运行的游戏的自动化测试的方法、设备、装置以及计算机可读存储介质 | |
Mahmud et al. | Android compatibility issue detection using api differences | |
CN104732146A (zh) | 一种Android程序漏洞检测方法及系统 | |
EP2972828B1 (en) | Operating system support for contracts | |
Alves et al. | Prioritizing test cases for early detection of refactoring faults | |
KR101696694B1 (ko) | 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치 | |
CN103823665A (zh) | 一种sdk活跃度分析方法、网络服务器及系统 | |
He et al. | Context debloating for object-sensitive pointer analysis | |
CN108932199B (zh) | 一种基于用户界面分析的自动化污点分析系统 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
CN105786465A (zh) | 一种脚本语言执行方法及装置 | |
CN112632547A (zh) | 一种数据处理方法和相关装置 | |
CN101937389A (zh) | 一种让代码分析工具获取被检测软件包编译过程的方法 | |
CN107798244A (zh) | 一种检测远程代码执行漏洞的方法及装置 | |
CN116028495A (zh) | 智能合约的检测方法及装置 | |
Gu et al. | Vetting api usages in c programs with imchecker | |
Salehnamadi et al. | ER catcher: a static analysis framework for accurate and scalable event-race detection in Android | |
CN115495745A (zh) | 一种基于风险函数的工业软件源代码静态检测方法及系统 | |
CN111666216B (zh) | 一种智能合约分析方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170118 |