(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 201810482120.8
(22)申请日 2018.05.18
(71)申请人 北京智游网安科技有限公司
地址 100080 北京市海淀区知春路7号致真
大厦D座20层2002号
(72)发明人 杨元虎 郭荣超 
(74)专利代理机构 深圳市千纳专利代理有限公
司 44218
代理人 胡坚
(51)Int.Cl.
G06F  21/56(2013.01)
(54)发明名称
一种IOS用的SDK安全检测方法
(57)摘要
本发明公开了一种IOS用的SDK安全检测方
法,包括以下步骤:启动SDK、SDK自检测、重签名
检测、动态库注入检测和调试器注入检测和反反
调试检测,本发明提供的一种TOS用的SDK安全检
测方法是通过接口调用SDK,当IOS端应用启动后
在某一特定时机或场景下对IOS端应用的运行环
境进行安全分析,从而规避风险,利用SDK对IOS
端应用的安全性进行检测要比以往及市面上其
他应用的防护手段方面更加全面,SDK自身防护
等级更高,核心检测功能更加隐蔽,不容易被
hook绕过,
从而大大加强了对应用的保护等级。权利要求书1页  说明书3页  附图1页CN 108629184 A 2018.10.09
C N  108629184
A
1.一种IOS用的SDK安全检测方法,其特征在于:包括以下步骤:
启动SDK:将iOS端应用通过开发过程中集成SDK,并运行程序SDK;
SDK自检测:调用安全接口对自身安全性进行检测,如发现SDK安全防护功能被破解,则返回一个状态NO给指针,开发者根据业务需求进行定制处理,弹窗、数据上报、或者直接退出,如SDK状态安全,则进入下一步验证应用完整性;
重签名检测:SDK使用获取team  ID加bundle  ID的双重校验方式对应用进行验证,并对对前两个ID进行加密为一个key再硬编码进SDK,应用集成SDK后每次启动都会自动获取应用签名信息进行加密后与SDK中预留的key进行比对,用来判断是否对应用进行过重签;
动态库注入检测:SDK使用fishhook框架对动态库进行检查,如Hook存在风险的动态库,则按照开发者预设的结果处理方案进行处理;
调试器注入检测和反反调试检测:SDK使用ptrace()函数来检测应用是否在被调试,检测到调试器和反反调试则表明属于用户主动攻击,此时风险系数大,使用开发者预设的安全策略进行处理。
2.根据权利要求1所述一种IOS用的SDK安全检测方法,其特征在于:所述SDK采用objective -c语言进行开发。
3.根据权利要求1所述一种IOS用的SDK安全检测方法,其特征在于:所述安全策略是指开发人员根据实际的项目需求和SDK提供的安全检测接口实现不同的安全策略。
4.根据权利要求1或3所述一种IOS用的SDK安全检测方法,其特征在于:所述安全策略包括以下方法:
方法一:弹框提示用户,当前运行环境存在安全风险请退出调试器;
方法二:将检测结果携带设备运行信息发送到服务端,由服务端下发安全策略进行处理;
方法三:在业务层网络接口中携带检测结果,由服务端分析后决定是否拒绝服务;方法四:检测到风险级别较高的项后,应用调用安全退出的接口直接退出程序。
权 利 要 求 书1/1页CN 108629184 A
一种IOS用的SDK安全检测方法
技术领域
[0001]本发明涉及IOS端应用防护技术领域,具体为一种IOS用的SDK安全检测方法。
背景技术
[0002]一直以来,iOS由于系统闭源的原因让大部分普通开发者认为iOS系统很安全,但事实是相较于做了防护的安卓程序而言,iOS的安全问题更加严峻,由于iOS闭源的特性,所以无法像安卓程序一样对应用进行加壳,iOS程序使用IClutch等工具可以轻易为ipa进行脱壳处理,未做防护的ipa无异于裸奔,脱壳后使用class-dump可以很轻易的将应用的头文件导出,再结合动态调试等手段对应用进行分析,可以很容易的获取到想要的信息一般开发者使用的防护手段仅限于使用HTTPS进行数据传输,使用bundle ID验证应用是否被篡改,这些常规手段很容易被绕过或破解。
发明内容
[0003]本实发明的目的在于提供一种IOS用的SDK安全检测方法以解决上述背景技术中提出的问题。
[0004]为实现上述目的,本发明提供如下技术方案:一种IOS用的SDK安全检测方法,包括以下步骤:
(1)启动SDK:将iOS端应用通过开发过程中集成SDK,并运行程序SDK;
(2)SDK自检测:调用安全接口对自身安全性进行检测,如发现SDK安全防护功能被破解,则返回一
个状态NO给指针,开发者根据业务需求进行定制处理,弹窗、数据上报、或者直接退出,如SDK状态安全,则进入下一步验证应用完整性;
(3)重签名检测:SDK使用获取team ID加bundle ID的双重校验方式对应用进行验证,并对对前两个ID进行加密为一个key再硬编码进SDK,应用集成SDK后每次启动都会自动获取应用签名信息进行加密后与SDK中预留的key进行比对,用来判断是否对应用进行过重签;
(4)动态库注入检测:SDK使用fishhook框架对动态库进行检查,如Hook存在风险的动态库,则按照开发者预设的结果处理方案进行处理;
android获取真正的签名
(5)调试器注入检测和反反调试检测:SDK使用ptrace()函数来检测应用是否在被调试,检测到调试器和反反调试则表明属于用户主动攻击,此时风险系数大,使用开发者预设的安全策略进行处理。
[0005]优选的,所述SDK采用objective-c语言进行开发。
[0006]优选的,所述安全策略是指开发人员根据实际的项目需求和SDK提供的安全检测接口(verifyCompletionDetection)实现不同的安全策略。
[0007]优选的,所述安全策略包括以下方法:
方法一:弹框提示用户,当前运行环境存在安全风险请退出调试器;
方法二:将检测结果携带设备运行信息发送到服务端,由服务端下发安全策略进行处
理;
方法三:在业务层网络接口中携带检测结果,由服务端分析后决定是否拒绝服务;
方法四:检测到风险级别较高的项后,应用调用安全退出的接口直接退出程序。[0008]与现有技术相比,本发明的有益效果是:本发明提供的一种TOS用的SDK安全检测方法是通过接口调用SDK,当IOS端应用启动后在某一特定时机或场景下对IOS端应用的运行环境进行安全分析,从而规避风险,利用SDK对IOS端应用的安全性进行检测要比以往及市面上其他应用的防护手段方面更加全面,SDK自身防护等级更高,核心检测功能更加隐蔽,不容易被hook绕过,从而大大加强了对应用的保护等级。
附图说明
[0009]图1为本发明的工作原理流程图。
具体实施方式
[0010]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本
领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0011]请参阅图1,本发明提供的一种实施例:一种IOS用的SDK安全检测方法,包括以下步骤:
(1)启动SDK:将iOS端应用通过开发过程中集成SDK,并运行程序SDK,所述SDK采用objective-c语言进行开发;
(2)SDK自检测:调用安全接口对自身安全性进行检测,如发现SDK安全防护功能被破解,则返回一个状态NO给指针,开发者根据业务需求进行定制处理,弹窗、数据上报、或者直接退出,如SDK状态安全,则进入下一步验证应用完整性;
(3)重签名检测:SDK使用获取team ID加bundle ID的双重校验方式对应用进行验证,并对对前两个ID进行加密为一个key再硬编码进SDK,应用集成SDK后每次启动都会自动获取应用签名信息进行加密后与SDK中预留的key进行比对,用来判断是否对应用进行过重签;
(4)动态库注入检测:SDK使用fishhook框架对动态库进行检查,如Hook存在风险的动态库,则按照开发者预设的结果处理方案进行处理;
(5)调试器注入检测和反反调试检测:SDK使用ptrace()函数来检测应用是否在被调试,检测到调试
器和反反调试则表明属于用户主动攻击,此时风险系数大,使用开发者预设的安全策略进行处理,所述安全策略是指开发人员根据实际的项目需求和SDK提供的安全检测接口(verifyCompletionDetection)实现不同的安全策略,所述安全策略包括以下方法:
方法一:弹框提示用户,当前运行环境存在安全风险请退出调试器;
方法二:将检测结果携带设备运行信息发送到服务端,由服务端下发安全策略进行处理;
方法三:在业务层网络接口中携带检测结果,由服务端分析后决定是否拒绝服务;
方法四:检测到风险级别较高的项后,应用调用安全退出的接口直接退出程序。[0012]尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。