一种函数调用关系的识别方法及装置制造方法及图纸

技术编号:14924720 阅读:139 留言:0更新日期:2017-03-30 16:47
本发明专利技术公开了一种函数调用关系的识别方法及装置,该方法包括:S1、获取开发框架类库中的每个类;S2、依据每个类确定类继承关系;S3、依据类继承关系确定每个类中包含的四种函数,建立函数关系表,其中,四种函数分别为类白定义函数、协议函数、实例函数及分类函数;S4、从四种函数中去除协议函数;S5、识别任一函数的调用关系。该发明专利技术的有益效果为:通过构建并提取出iOS开发框架中公有类的类继承关系的完整模型,以及公有类与其类成员函数的完整对应关系,静态分析计算出iOS应用中所有函数问调用的完整关系,生成应用代码控制流图和函数调用路径,从而使隐私数据分析判定更加准确。

【技术实现步骤摘要】

本专利技术涉及计算机
,尤其涉及一种函数调用关系的识别方法及装置
技术介绍
iOS操作系统是由苹果公司开发的手持设备操作系统。苹果公司最早2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续使用到iPodtouch、iPad、iPadmini以及AppleTV等苹果产品。随着苹果iOS系统以及硬件设备的不断升级,用户的数量也在不断增加。另一方面,受跟踪门、棱镜门等事件影响,iOS系统及iOS应用程序的安全性和用户隐私保护的安全性也受到越来越多的关注。采用逆向分析技术,可以对iOS应用进行静态逻辑分析,通过逆向分析应用的Objective-C二进制文件,获得应用程序内部函数之间的调用关系,生成控制流图,可以定位敏感行为调用,追踪敏感信息流,分析敏感API调用路径,最终达到通过分析函数控制流图来判定应用程序是否存储泄漏用户隐私的目的。其中,最大的技术难点是如何有效的确定函数调用关系。由于苹果公司的封闭政策以及Objective-C语言的一些特性都给分析工作带来了很多挑战,相关的研究成果还相对较少。Objective-C的函数调用机制和C++有很大的区别。C++是编译时静态绑定,并通过嵌入类和虚函数表来模拟实现的;而Objective-C则提供了运行时动态绑定机制,在调用时并不使用虚函数表,而是通过动态分配机制接收到类指针和函数的名字,然后去遍历对象的类继承关系,当发生函数调用时,系统通过函数objc_msgSend去实现函数调用的消息传递。objc_msgSend函数有两个参数,消息接收者(receiver)和消息对应的方法名字(selector)。objc_msgSend的调用过程如下:首先通过第一个参数receiver找到它的isa指针,然后在isa指向的Class对象中使用第二个参数selector去查找方法;如果没有找到,就使用当前Class对象中的新的isa指针到上一级的父类的对象中查找;当找到方法后,再依据receiver中的self指针找到当前的对象,调用当前对象具体实现的函数(IMP指针函数),然后传递参数,调用实现函数;假如一直找到NSObject也没有找到调用的函数,就会报告不能识别发送消息的错误。因此,要确定函数调用关系,最重要的是找到这两个参数的内容。程序运行过程中,这两个值分别存在寄存器R0和R1中,R0寄存器存的是指向类的指针,R1寄存器存的是指向方法的指针。目前,通过静态分析的方式是无法直接获取到这两个指针。通过分析静态反编译的结果,能够得到R1的内容,但在大多数情况下,无法得到R0的内容,也就是说,只能获取到函数的名称,无法得到函数的类名。其中,其名为cdmjPaiViewGetPaiImage的函数,其调用了另一个名为GetPaiImage:withdirection:withifdown的函数,通过IDA的分析结果和提供的接口,能够直接得到R1寄存器的内容,也就是这个函数的名字,却无法直接得到R0存放的内容。这给确认函数调用关系带来困难。比如,函数A中调用了一个方法名为name的函数,假如类B有个方法名为name,类C也有个方法名为name,调用的到底是哪个类的name就无法判断。因此,要分析一个程序的函数调用结构,需要设计一种iOS应用的函数调用关系识别算法,获得被调用函数的函数名和所属的类名。
技术实现思路
本专利技术要解决的技术问题在于,针对上述现有技术中无法确定函数调用关系的问题,提供一种函数调用关系的识别方法及装置。本专利技术解决其技术问题所采用的技术方案是:一方面,构造一种函数调用关系的识别方法,包括以下步骤:S1、获取开发框架类库中的每个类;S2、依据所述每个类确定类继承关系;S3、依据所述类继承关系确定每个类中包含的四种函数,建立函数关系表,其中,四种函数分别为类自定义函数、协议函数、实例函数及分类函数;S4、从所述四种函数中去除所述协议函数;S5、识别任一函数的调用关系。在本专利技术所述的识别方法中,在所述步骤S1中,每个类包括公有类、自定义类及系统类。在本专利技术所述的识别方法中,所述步骤S1包括以下子步骤:S11、根据所述开发框架中的头文件获取所述公有类;S12、反编译所述开发框架中的二进制文件,获取所述自定义类及系统类。在本专利技术所述的识别方法中,在所述步骤S3中,从所述二进制文件中,通过自定义字段获取所述类自定义函数,通过协议字段获取所述协议函数,通过实例字段获取所述实例函数,通过分类字段获取所述分类函数。在本专利技术所述的识别方法中,所述步骤S5包括以下子步骤:S51、判断所述任一函数是否被调用,若是,则转至步骤S52;S52、识别所述任一函数的调用关系。在本专利技术所述的识别方法中,所述步骤S52包括以下子步骤:S521、遍历所述函数关系表,判断所述任一函数是否只包含在一个类中,若是,执行步骤S522,若否,转至步骤S523;S522、所述任一函数确定为被包含的类的成员函数;S523、遍历所述任一函数所属类的类名,判断所述任一函数所属的类名是否与所述任一函数所属类中所包含的类的类名相同,若是,执行步骤S524,若否,转至步骤S525;S524、所述任一函数确定为与其所属类中所包含的类名相同的类的成员函数;S525、遍历所述任一函数所属类的父类,判断所述父类中是否包含与所述任一函数所属的类名相同的类,若是,执行步骤S526;S526、所述任一函数确定为所述父类中包含与所述任一函数所属的类名相同的类的成员函数。另一方面,提供一种函数调用关系的识别装置,包括:获取模块,用于获取开发框架类库中的每个类;确定模块,用于依据所述每个类确定类继承关系;建立模块,用于依据所述类继承关系确定每个类中包含的四种函数,建立函数关系表,其中,四种函数分别为类自定义函数、协议函数、实例函数及分类函数;去除模块,用于从所述四种函数中去除所述协议函数;识别模块,用于识别任一函数的调用关系。在本专利技术所述的识别装置中,每个类包括公有类、自定义类及系统类;所述获取模块包括:第一获取子模块,用于根据所述开发框架中的头文件获取所述公有类;第二获取子模块,用于反编译所述开发框架中的二进制文件,获取所述自定义类及系统类。在本专利技术所述的识别装置中,所述建立模块还用于从所述二进制文件中,通过自本文档来自技高网
...
一种函数调用关系的识别方法及装置

【技术保护点】
一种函数调用关系的识别方法,其特征在于,包括以下步骤:S1、获取开发框架类库中的每个类;S2、依据所述每个类确定类继承关系;S3、依据所述类继承关系确定每个类中包含的四种函数,建立函数关系表,其中,四种函数分别为类自定义函数、协议函数、实例函数及分类函数;S4、从所述四种函数中去除所述协议函数;S5、识别任一函数的调用关系。

【技术特征摘要】
1.一种函数调用关系的识别方法,其特征在于,包括以下步骤:
S1、获取开发框架类库中的每个类;
S2、依据所述每个类确定类继承关系;
S3、依据所述类继承关系确定每个类中包含的四种函数,建立函数关系
表,其中,四种函数分别为类自定义函数、协议函数、实例函数及分类函数;
S4、从所述四种函数中去除所述协议函数;
S5、识别任一函数的调用关系。
2.根据权利要求1所述的识别方法,其特征在于,在所述步骤S1中,
每个类包括公有类、自定义类及系统类。
3.根据权利要求2所述的识别方法,其特征在于,所述步骤S1包括以
下子步骤:
S11、根据所述开发框架中的头文件获取所述公有类;
S12、反编译所述开发框架中的二进制文件,获取所述自定义类及系统类。
4.根据权利要求3所述的识别方法,其特征在于,在所述步骤S3中,
从所述二进制文件中,通过自定义字段获取所述类自定义函数,通过协议字段
获取所述协议函数,通过实例字段获取所述实例函数,通过分类字段获取所述
分类函数。
5.根据权利要求1所述的识别方法,其特征在于,所述步骤S5包括以
下子步骤:
S51、判断所述任一函数是否被调用,若是,则转至步骤S52;
S52、识别所述任一函数的调用关系。
6.根据权利要求5所述的识别方法,其特征在于,所述步骤S52包括以
下子步骤:
S521、遍历所述函数关系表,判断所述任一函数是否只包含在一个类中,
若是,执行步骤S522,若否,转至步骤S523;
S522、所述任一函数确定为被包含的类的成员函数;
S523、遍历所述任一函数所属类的类名,判断所述任一函数所属的类名

\t是否与所述任一函数所属类中所包含的类的类名相同,若是,执行步骤S524,
若否,转至步骤S525;
S524、所述任一函数确定为与其所属类中所包含的类名相同的类的成员
函数;
S525、遍历所述任一函数所属类的父类,判断所述父类中是否包含与所
述任一函数所属的类名相同的类,若是,执行步骤S526;
S526、所述任一函数确定为...

【专利技术属性】
技术研发人员:刘洪刚杨颖池垂富夏冰韩俊焜姚骏
申请(专利权)人:卓望数码技术深圳有限公司
类型:发明
国别省市:广东;44

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

1