CN109657458B - Ios中保护钥匙串数据的方法、存储介质、设备及系统 - Google Patents
Ios中保护钥匙串数据的方法、存储介质、设备及系统 Download PDFInfo
- Publication number
- CN109657458B CN109657458B CN201710932706.5A CN201710932706A CN109657458B CN 109657458 B CN109657458 B CN 109657458B CN 201710932706 A CN201710932706 A CN 201710932706A CN 109657458 B CN109657458 B CN 109657458B
- Authority
- CN
- China
- Prior art keywords
- function
- stack information
- hook
- read
- implementation method
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种IOS中保护钥匙串数据的方法、存储介质、设备及系统,涉及IOS的数据保护技术领域。该方法包括:在当前IOS系统中创设HOOK功能;获取用于读取钥匙串数据的读取函数;获取用于获取当前函数调用堆栈信息的堆栈信息函数;使用创设的HOOK功能,对获取的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;每当读取函数的实现方法被调用时,会被拦截并执行自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;将获取到的调用堆栈信息上报至服务器进行合法性校验。本发明能有效防止黑客程序读取钥匙串中的绝密数据,保护了钥匙串数据的安全性。
Description
技术领域
本发明涉及IOS的数据保护技术领域,具体来讲是一种IOS中保护钥匙串数据的方法、存储介质、设备及系统。
背景技术
目前,随着移动设备的日益普及,移动应用产业尤其是IOS应用得到飞速的发展,同时其开发模式和代码框架也都发生了巨大的变化。对于IOS平台来说,其程序又分为主程序和模块文件,而模块文件则是dylib文件(dylib文件是IOS平台上的动态链接库文件,类似于Windows平台上的DLL文件,类似于Android平台的SO文件)。
通常,对于需要编写一些功能模块注入到对应的进程中时,都是编写一个dylib文件,然后将该dylib文件注入到对应的进程中运行。而对于一些想要获取另一个IOS应用的数据时也都是编写一个dylib文件。同时,IOS也希望能够免输入密码账号进行登录的功能,由于IOS系统存储的数据都是在sandbox里面,一旦删除APP,则sandbox也不存在了,为此苹果对开发者提供了一个keychain(钥匙串),其用于提供存储一些私密数据如密码、证书等方便用户免输入密码账号等进行登录。所以,IOS系统的应用开发者通常会使用钥匙串来存储关键数据。但是,一旦黑客通过注入dylib文件可以读取到钥匙串中保存的关键数据,这就会给用户造成严重的损失,安全风险较大。
因此,如何有效防止黑客程序读取IOS的钥匙串中的绝密数据,保护钥匙串数据的安全性是本领域技术人员亟待解决的问题。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种IOS中保护钥匙串数据的方法、存储介质、设备及系统,通过对钥匙串数据的访问者进行校验,有效防止黑客程序读取钥匙串中的绝密数据,保护了钥匙串数据的安全性。
为达到以上目的,本发明采取的技术方案是:提供一种IOS中保护钥匙串数据的方法,该方法包括以下步骤:
S1、在当前IOS系统中创设HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法;
S2、获取当前IOS系统中已有的用于读取钥匙串数据的读取函数;
S3、获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数;
S4、使用创设的HOOK功能,对获取的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;
S5、每当读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;
S6、将获取到的调用堆栈信息上报至服务器进行合法性校验。
在上述技术方案的基础上,步骤S1具体包括以下操作:在当前IOS系统中创建HOOK功能,并对该HOOK功能的实现进行设置,使其完成以下操作:通过传入参数和方法名获取原函数的类方法;根据获取的类方法的方法名,获取到该类方法所对应的IMP指针;在原函数中添加需要加入的新方法;通过替换原函数的类方法所对应的IMP指针,将新方法与原函数进行绑定,使得原函数被调用时会被拦截并执行该新方法。
在上述技术方案的基础上,步骤S4中,使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK的具体操作如下:根据读取函数的类名和该读取函数的实现方法名,获取该读取函数的实现方法;根据获取到的实现方法,获取该实现方法所对应的IMP指针;在读取函数中增设一个加入有堆栈信息函数的自定义实现方法;通过替换读取函数的实现方法所对应的IMP指针,将自定义实现方法与读取函数进行绑定,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法。
在上述技术方案的基础上,服务器进行合法性校验的具体操作为:服务器接收到上报的调用堆栈信息后,将该调用堆栈信息与预设好的正确信息列表进行比对;一旦上报的调用堆栈信息不在该正确信息列表中,则说明此读取操作不合法,服务器对该读取操作进行封禁或其他阻止措施。
本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述IOS中保护钥匙串数据的方法的步骤。
本发明还提供一种IOS中保护钥匙串数据的设备,包括存储器、处理器及存储在存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述IOS中保护钥匙串数据的方法的步骤。
本发明还提供一种IOS中保护钥匙串数据的系统,该系统包括HOOK功能创设模块、读取函数获取模块、堆栈信息函数获取模块、读取函数HOOK模块、堆栈信息获取模块和堆栈信息上报模块;
所述HOOK功能创设模块用于:在当前IOS系统中创设HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法;
所述读取函数获取模块用于:获取当前IOS系统中已有的用于读取钥匙串数据的读取函数;
所述堆栈信息函数获取模块用于:获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数;
所述读取函数HOOK模块用于:使用创设的HOOK功能,对获取的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;
所述堆栈信息获取模块用于:每当读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;
所述堆栈信息上报模块用于:将获取到的调用堆栈信息上报至服务器进行合法性校验。
在上述技术方案的基础上,所述HOOK功能创设模块创设HOOK功能的具体流程为:在当前IOS系统中创建HOOK功能,并对该HOOK功能的实现进行设置,使其完成以下操作:通过传入参数和方法名获取原函数的类方法;根据获取的类方法的方法名,获取到该类方法所对应的IMP指针;在原函数中添加需要加入的新方法;通过替换原函数的类方法所对应的IMP指针,将新方法与原函数进行绑定,使得原函数被调用时会被拦截并执行该新方法。
在上述技术方案的基础上,所述读取函数HOOK模块使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK的具体流程为:根据读取函数的类名和该读取函数的实现方法名,获取该读取函数的实现方法;根据获取到的实现方法,获取该实现方法所对应的IMP指针;在读取函数中增设一个加入有堆栈信息函数的自定义实现方法;通过替换读取函数的实现方法所对应的IMP指针,将自定义实现方法与读取函数进行绑定,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法。
在上述技术方案的基础上,服务器进行合法性校验的具体操作为:服务器接收到上报的调用堆栈信息后,将该调用堆栈信息与预设好的正确信息列表进行比对;一旦上报的调用堆栈信息不在该正确信息列表中,则说明此读取操作不合法,服务器对该读取操作进行封禁或其他阻止措施。
本发明的有益效果在于:
本发明中,通过创设的HOOK功能对系统的读取钥匙串的功能进行HOOK,使得该读取函数的实现方法被替换为加入有用于获取当前函数调用堆栈信息的堆栈信息函数的自定义实现方法,该自定义实现方法能在实现钥匙串数据读取功能的同时实现调用堆栈信息的获取功能。每当用于读取钥匙串数据的读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息,也就是说,知道了是哪些函数在读取钥匙串数据;再将获取到的调用堆栈信息上报至服务器进行合法性校验。
与现有技术相比,本发明能实现对钥匙串数据的访问者进行校验的目的,从而有效防止黑客通过注入一个dylib文件读取到钥匙串中保存的敏感数据,进而有效保护了钥匙串数据的安全性。
附图说明
图1为本发明实施例中IOS中保护钥匙串数据的方法的流程图;
图2为selector的名字和方法实现IMP映射关系的示意图;
图3为本发明实施例中IOS中保护钥匙串数据的设备的结构示意图;
图4为本发明实施例中IOS中保护钥匙串数据的系统的结构框图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
本发明的设计思路是:事先编写一个HOOK(钩子拦截)功能,该HOOK功能能在原函数内加入新的方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新的方法;然后,利用编写好的HOOK功能对系统的读取钥匙串数据的读取函数进行HOOK,在该读取函数内加入获取当前函数调用堆栈信息的函数,从而获取到所有读取钥匙串数据的函数调用堆栈信息;再将获取的读取钥匙串数据的函数调用堆栈信息上报给服务器进行合法性校验,对不符合合法性要求的读取操作进行封禁,从而达到有效防止黑客程序读取钥匙串中的绝密数据的目的,保护了钥匙串数据的安全性。
基于上述设计思路,参见图1所示,本发明实施例提供一种IOS中保护钥匙串数据的方法,该方法包括以下步骤:
步骤S1、HOOK功能的创设:在当前IOS系统中创设一个HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法。
可以理解的是,IOS的程序代码是使用Objective-C编程语言来编写的。在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector(选择器)的名字(如selectorA、selectorB、selectorC等)。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。而每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系,如图2所示;而其中的IMP有点类似函数指针,其用于指向具体的Method实现。因此,利用上述原理可实现步骤S1中HOOK功能的创设。
具体来说,在一种实施方式中,步骤S1具体包括以下操作:在当前IOS系统中创建一个HOOK功能,并对该HOOK功能的实现进行设置,使其完成以下操作:
1、通过传入参数和方法名获取原函数的类方法。其实现代码的原型结构可如下:Method class_getInstanceMethod(Class cls,SEL name);通过传入参数cls和方法名name来得到原函数的类方法。
2、根据获取的类方法的方法名,获取到该类方法所对应的IMP指针。其实现代码的原型结构可如下:IMP method_getImplementation(Method m);通过传入方法名m获取对应的IMP指针。
3、在原函数中添加需要加入的新方法。其实现代码的原型结构可如下:BOOLclass_addMethod(Class cls,SEL name,IMP imp,const charchar*types);通过参数cls类名,方法名name,以及方法的IMP和方法类型,从而在一个原函数中添加一个方法。
4、通过替换原函数的类方法所对应的IMP指针,将新方法与原函数进行绑定,即将原函数的类方法替换为加入的新方法,从而实现HOOK功能。其实现代码的原型结构可如下:IMP class_replaceMethod(Class cls,SEL name,IMP imp,const charchar*types);通过参数cls类名,方法名name,以及方法的IMP和方法类型来实现替换的功能,从而对原函数的类方法进行了HOOK。
通过上述操作,我们就完成了HOOK功能事先创设;接下来,我们就只需将创设好的HOOK功能应用到IOS系统的读取钥匙串数据的读取函数中进行HOOK即可。
步骤S2、读取函数的获取:获取当前IOS系统中已有的用于读取钥匙串数据的读取函数。该步骤S2中需要获取当前IOS系统中用于读取钥匙串数据的读取函数,是因为获取到读取函数后,就可以根据该读取函数进一步获取该读取函数的类方法、类方法的IMP指针等信息,从而为后续的读取函数的HOOK做准备。
可以理解的是,在IOS系统中提供了这样一些API函数来实现将数据存储到钥匙串和从钥匙串读取数据的功能。因此,我们获取当前IOS系统中已有的用于读取钥匙串数据的读取函数时,也就是获取实现读取钥匙串数据的API函数。而目前,在IOS系统中实现写入、读取钥匙串数据的实现功能通常如下:
1、写入钥匙串数据的实现功能:
通过调用苹果平台提供的类UICKeyChainStore中的方法keyChainStoreWithService来定义一个钥匙串对象。具体代码如下:
UICKeyChainStore*keychain=
[UICKeyChainStore keyChainStoreWithService:@"应用名称"];
其中,传入一个字符串参数“应用名称”本文则取名为此应用的名称作为钥匙串的对象名称,此名称在后续读取钥匙串时也会用到,只要写入和读取达到一致即可。
然后将敏感数据写入到创建的钥匙串对象中。具体代码如下:
keychain[@"密码"]=@"01234567";
其中,钥匙串是写入键值对的形式,其中键值是“密码”,而值则是“01234567”,代表具体的密码值,为了安全起见该值可以进行加密后再写入。
2、读取钥匙串数据的实现功能:
当要从钥匙串读取数据时则首先也会定义一个钥匙串的对象,同时钥匙串的对象名称则必须使用和写入时的钥匙串的对象的名称相同,否则不会读取到之前存储的数据,对应于上文则也是“应用名称”。具体代码如下:
UICKeyChainStore*keychainStore=[UICKeyChainStorekeyChainStoreWithService:@"应用名称"];
然后从钥匙串对象中获取数据,具体代码如下:
NSString*pass=[keychainStore stringForKey:@"密码"];
此例中是从钥匙串对象中使用键值为“密码”来读取钥匙串存储的密码数据。
从上述内容可知,我们要获取的读取钥匙串数据的读取函数即为上文中的UICKeyChainStore类的函数,具体来说,其实现方法即为上文中的keyChainStoreWithService方法。
步骤S3、堆栈信息函数的获取:获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数。同样,该步骤S3中需要获取当前IOS系统中的堆栈信息函数,也是为后续的在读取函数中加入堆栈信息函数进行HOOK做准备。
可以理解的是,在IOS系统中提供了获取当前函数调用堆栈的功能,用于获取当前函数的调用堆栈信息。具体则是使用IOS系统已有的API函数backtrace来获取函数的调用堆栈,然后,调用API函数backtrace_symbols来获取函数的名称信息。
函数backtrace原型如下:
int backtrace(void**buffer,int size);
其中,参数void**buffer用于接受函数调用堆栈的所有函数的内存地址;参数intsize用于告诉此函数只取多少层的堆栈信息;返回值则是实际获取到的堆栈层数。
函数backtrace_symbols原型如下:
char**backtrace_symbols(void*const*buffer,int size);
其中,参数void*const*buffer用来接收backtrace函数所获取到的函数调用堆栈的内存地址;参数int size则指明函数的堆栈层数;返回值char**则会存储所有的函数调用堆栈的内存地址对应的函数名称信息,具体则是函数的名称是什么。
通过以上的2个函数的调用则可以获取到函数调用堆栈的具体名称信息。也就是说,在后续对用于读取钥匙串数据的读取函数进行HOOK后,通过加入的堆栈信息函数即可得到所有读取钥匙串数据的函数的具体名称信息。
步骤S4、读取函数的HOOK:使用步骤S1中创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有用于获取当前函数调用堆栈信息的堆栈信息函数的自定义实现方法,该自定义实现方法能在实现钥匙串数据读取功能的同时实现调用堆栈信息的获取功能。
具体来说,在一种实施方式中,使用步骤S1中创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK的具体操作如下:
1、根据读取函数的类名(UICKeyChainStore类)和该读取函数的实现方法名(keyChainStoreWithService),获取该读取函数的实现方法;
2、根据获取到的实现方法,获取该实现方法所对应的IMP指针;
3、在读取函数中增设一个加入有堆栈信息函数的自定义实现方法;
4、通过替换读取函数的实现方法所对应的IMP指针,将自定义实现方法与读取函数进行绑定,即将读取函数的实现方法替换为加入有堆栈信息函数的自定义实现方法,从而实现HOOK功能。
步骤S5、调用堆栈信息的获取:每当用于读取钥匙串数据的读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息,也就是说,知道了是哪些函数在读取钥匙串数据。
步骤S6、调用堆栈信息的上报:将获取到的调用堆栈信息上报至服务器进行合法性校验。举例来说,在实际操作中,服务器进行合法性校验的具体操作可如下:服务器接收到上报的调用堆栈信息后,将该调用堆栈信息与预设好的正确信息列表进行比对;一旦上报的调用堆栈信息不在该正确信息列表中,则说明此读取操作不合法,服务器将对该读取操作进行封禁或其他阻止措施。
利用上述方法可以实现对钥匙串数据的有效保护,通过创设的HOOK功能对系统的读取钥匙串的功能进行HOOK,从而对所有调用钥匙串的调用者进行合法性判断,有效防止黑客程序读取钥匙串中的绝密数据,保护了钥匙串数据的安全性。
对应上述的IOS中保护钥匙串数据的方法,本发明实施例还提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时可实现上述各实施例中的IOS中保护钥匙串数据的方法的步骤。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
另外,参见图3所示,对应上述的IOS中保护钥匙串数据的方法,本发明实施例还提供一种IOS中保护钥匙串数据的设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时可实现上述各实施例中的IOS中保护钥匙串数据的方法的步骤。
参见图4所示,本发明实施例还提供一种IOS中保护钥匙串数据的系统,该系统包括HOOK功能创设模块、读取函数获取模块、堆栈信息函数获取模块、读取函数HOOK模块、堆栈信息获取模块和堆栈信息上报模块。
其中,HOOK功能创设模块用于:在当前IOS系统中创设HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法;
读取函数获取模块用于:获取当前IOS系统中已有的用于读取钥匙串数据的读取函数;
堆栈信息函数获取模块用于:获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数;
读取函数HOOK模块用于:使用创设的HOOK功能,对获取的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;
堆栈信息获取模块用于:每当读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;
堆栈信息上报模块用于:将获取到的调用堆栈信息上报至服务器进行合法性校验。
可以理解的是,IOS中保护钥匙串数据的系统的各功能模块的具体实现流程是与上文OS中保护钥匙串数据的方法的各步骤详细流程一一对应的,此处不再赘述。
需要说明的是:上述实施例提供的系统在IOS系统中实现对钥匙串数据的保护时,仅以上述各功能模块的划分进行举例说明,实际应用中,可根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (10)
1.一种IOS中保护钥匙串数据的方法,其特征在于,该方法包括以下步骤:
S1、在当前IOS系统中创设HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法;
S2、获取当前IOS系统中已有的用于读取钥匙串数据的读取函数;
S3、获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数;
S4、使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;
S5、每当读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;
S6、将获取到的调用堆栈信息上报至服务器进行合法性校验。
2.如权利要求1所述的IOS中保护钥匙串数据的方法,其特征在于,步骤S1具体包括以下操作:在当前IOS系统中创建HOOK功能,并对该HOOK功能的实现进行设置,使其完成以下操作:
通过传入参数和方法名获取原函数的类方法;
根据获取的类方法的方法名,获取到该类方法所对应的IMP指针;
在原函数中添加需要加入的新方法;
通过替换原函数的类方法所对应的IMP指针,将新方法与原函数进行绑定,使得原函数被调用时会被拦截并执行该新方法。
3.如权利要求1所述的IOS中保护钥匙串数据的方法,其特征在于:步骤S4中,使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK的具体操作如下:
根据读取函数的类名和该读取函数的实现方法名,获取该读取函数的实现方法;
根据获取到的实现方法,获取该实现方法所对应的IMP指针;
在读取函数中增设一个加入有堆栈信息函数的自定义实现方法;
通过替换读取函数的实现方法所对应的IMP指针,将自定义实现方法与读取函数进行绑定,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法。
4.如权利要求1所述的IOS中保护钥匙串数据的方法,其特征在于,服务器进行合法性校验的具体操作为:服务器接收到上报的调用堆栈信息后,将该调用堆栈信息与预设好的正确信息列表进行比对;一旦上报的调用堆栈信息不在该正确信息列表中,则说明此读取操作不合法,服务器对该读取操作进行封禁或其他阻止措施。
5.一种存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现上述权利要求1至4中任一项所述方法的步骤。
6.一种IOS中保护钥匙串数据的设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现上述权利要求1至4中任一项所述方法的步骤。
7.一种IOS中保护钥匙串数据的系统,其特征在于:该系统包括HOOK功能创设模块、读取函数获取模块、堆栈信息函数获取模块、读取函数HOOK模块、堆栈信息获取模块和堆栈信息上报模块;
所述HOOK功能创设模块用于:在当前IOS系统中创设HOOK功能,该HOOK功能用于实现:在原函数内加入新方法,并通过方法的绑定使得原函数被调用时会被拦截并执行加入的新方法;
所述读取函数获取模块用于:获取当前IOS系统中已有的用于读取钥匙串数据的读取函数;
所述堆栈信息函数获取模块用于:获取当前IOS系统中已有的用于获取当前函数调用堆栈信息的堆栈信息函数;
所述读取函数HOOK模块用于:使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法;
所述堆栈信息获取模块用于:每当读取函数的实现方法被调用时,会被拦截并执行加入有堆栈信息函数的自定义实现方法,从而获取到当前调用读取函数的调用堆栈信息;
所述堆栈信息上报模块用于:将获取到的调用堆栈信息上报至服务器进行合法性校验。
8.如权利要求7所述的IOS中保护钥匙串数据的系统,其特征在于,所述HOOK功能创设模块创设HOOK功能的具体流程为:
在当前IOS系统中创建HOOK功能,并对该HOOK功能的实现进行设置,使其完成以下操作:通过传入参数和方法名获取原函数的类方法;根据获取的类方法的方法名,获取到该类方法所对应的IMP指针;在原函数中添加需要加入的新方法;通过替换原函数的类方法所对应的IMP指针,将新方法与原函数进行绑定,使得原函数被调用时会被拦截并执行该新方法。
9.如权利要求7所述的IOS中保护钥匙串数据的系统,其特征在于,所述读取函数HOOK模块使用创设的HOOK功能,对获取的用于读取钥匙串数据的读取函数进行HOOK的具体流程为:
根据读取函数的类名和该读取函数的实现方法名,获取该读取函数的实现方法;
根据获取到的实现方法,获取该实现方法所对应的IMP指针;
在读取函数中增设一个加入有堆栈信息函数的自定义实现方法;
通过替换读取函数的实现方法所对应的IMP指针,将自定义实现方法与读取函数进行绑定,使得该读取函数的实现方法被替换为加入有堆栈信息函数的自定义实现方法。
10.如权利要求7所述的IOS中保护钥匙串数据的系统,其特征在于:服务器进行合法性校验的具体操作为:服务器接收到上报的调用堆栈信息后,将该调用堆栈信息与预设好的正确信息列表进行比对;一旦上报的调用堆栈信息不在该正确信息列表中,则说明此读取操作不合法,服务器对该读取操作进行封禁或其他阻止措施。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710932706.5A CN109657458B (zh) | 2017-10-10 | 2017-10-10 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710932706.5A CN109657458B (zh) | 2017-10-10 | 2017-10-10 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109657458A CN109657458A (zh) | 2019-04-19 |
CN109657458B true CN109657458B (zh) | 2021-01-01 |
Family
ID=66108542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710932706.5A Active CN109657458B (zh) | 2017-10-10 | 2017-10-10 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109657458B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110908869B (zh) * | 2019-11-27 | 2023-06-30 | 北京博睿宏远数据科技股份有限公司 | 一种应用程序数据监控方法、装置、设备及储存介质 |
CN112100570A (zh) * | 2020-08-20 | 2020-12-18 | 北京智游网安科技有限公司 | 指定函数被hook的处理方法、智能终端、存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885756A (zh) * | 2012-12-20 | 2014-06-25 | 腾讯科技(深圳)有限公司 | 智能终端的基础应用功能配置方法、实现方法和装置 |
CN103902857A (zh) * | 2012-12-25 | 2014-07-02 | 深圳市腾讯计算机系统有限公司 | 一种软件程序的保护方法和装置 |
CN106446672A (zh) * | 2016-07-25 | 2017-02-22 | 中国科学院大学 | 一种Android第三方类库权限隔离方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9916475B2 (en) * | 2014-08-11 | 2018-03-13 | North Carolina State University | Programmable interface for extending security of application-based operating system |
-
2017
- 2017-10-10 CN CN201710932706.5A patent/CN109657458B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885756A (zh) * | 2012-12-20 | 2014-06-25 | 腾讯科技(深圳)有限公司 | 智能终端的基础应用功能配置方法、实现方法和装置 |
CN103902857A (zh) * | 2012-12-25 | 2014-07-02 | 深圳市腾讯计算机系统有限公司 | 一种软件程序的保护方法和装置 |
CN106446672A (zh) * | 2016-07-25 | 2017-02-22 | 中国科学院大学 | 一种Android第三方类库权限隔离方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109657458A (zh) | 2019-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3044901B1 (en) | Keying infrastructure | |
US8769305B2 (en) | Secure execution of unsecured apps on a device | |
JP6227772B2 (ja) | 動的ライブラリを保護する方法及び装置 | |
CN111475824B (zh) | 数据访问方法、装置、设备和存储介质 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN105678192B (zh) | 一种基于智能卡的密钥应用方法及应用装置 | |
US9235584B2 (en) | Self-removal of enterprise app data | |
KR20140016897A (ko) | 디바이스 상의 앱들의 보안화 및 관리 | |
CN108229144B (zh) | 一种应用程序的验证方法、终端设备及存储介质 | |
CN103390026A (zh) | 一种移动智能终端安全浏览器及其工作方法 | |
CN112231702B (zh) | 应用保护方法、装置、设备及介质 | |
CN109891415B (zh) | 针对未经授权的客户端应用程序保护Web服务器 | |
CN101739361A (zh) | 访问控制方法、访问控制装置及终端设备 | |
KR20160020294A (ko) | 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템 | |
CN109657458B (zh) | Ios中保护钥匙串数据的方法、存储介质、设备及系统 | |
CN107092838A (zh) | 一种硬盘的安全访问控制方法及一种硬盘 | |
CN105279404A (zh) | 操作系统操作控制方法及装置 | |
CN104504309A (zh) | 应用程序数据加密的方法及终端 | |
CN105447398A (zh) | 数据安全保护方法及装置 | |
CN105653932A (zh) | 软件升级验证的方法和装置 | |
CN113114681B (zh) | 测试报文处理方法、装置、计算机系统及可读存储介质 | |
KR101862382B1 (ko) | 안드로이드 환경에서의 어플리케이션 데이터 관리 방법 및 장치 | |
CN115688120A (zh) | 安全芯片固件导入方法、安全芯片及计算机可读存储介质 | |
CN117009931A (zh) | 水印添加和水印应用方法、装置、设备及存储介质 | |
CN113836529A (zh) | 进程检测方法、装置、存储介质以及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |