CN107545182A - 一种ios应用中绕过函数调用链检测的方法及系统 - Google Patents
一种ios应用中绕过函数调用链检测的方法及系统 Download PDFInfo
- Publication number
- CN107545182A CN107545182A CN201710797781.5A CN201710797781A CN107545182A CN 107545182 A CN107545182 A CN 107545182A CN 201710797781 A CN201710797781 A CN 201710797781A CN 107545182 A CN107545182 A CN 107545182A
- Authority
- CN
- China
- Prior art keywords
- function
- call chain
- function call
- backtrace
- ios
- 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
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
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种IOS应用中绕过函数调用链检测的方法及系统,本发明对目的IOS应用程序以及系统函数backtrace进行Hook操作,通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链,当源IOS应用程序的调用目的IOS应用程序的核心函数时,将当前函数调用链修改为合法的核心函数调用链,即对当前函数调用链进行伪造,以绕过核心函数调用堆栈的检测,能够实现一个IOS应用程序调用另一个IOS应用程序的核心函数。
Description
技术领域
本发明涉及堆栈链检测技术领域,更具体地,涉及一种IOS应用中绕过函数调用链检测的方法及系统。
背景技术
随着移动设备的日益普及,移动应用产业尤其是IOS应用得到飞速的发展,同时其开发模式和代码框架也都发生了巨大的变化。对于IOS平台,其程序主要分为主程序和模块文件,而模块文件则是dylib模块,dylib模块是IOS平台上的动态链接库文件,类似于Windows平台上的DLL文件或者类似于Android平台的SO文件。
当一个IOS应用想要获取另一个IOS应用的数据时,需要在IOS应用中编写一个dylib模块,例如一个IOS应用想要获取游戏程序的一些数据,或者调用游戏程序的解密函数,或者是获取游戏程序的资源解密等,是通过编写一个dylib模块,并且将dylib模块注入到对应的游戏程序中,通过dylib模块去调用应用程序的函数。而做为游戏方,为了防止其它的应用程序调用自己的核心函数,通常都会在核心函数中加入调用链检测的功能,通过堆栈检测来防止除了游戏程序之外的其它应用的dylib模块来调用核心函数。
这样,当其它的应用程序需要获取另一个应用程序的核心函数来获取一些数据,才能实现某个功能时,由于另一个应用程序会阻止其它的应用程序调用核心函数,而导致其它的应用程序获取不到数据,进而导致其它应用程序的功能无法实现。
发明内容
本发明提供一种克服上述问题或者至少部分地解决上述问题的IOS应用中绕过函数调用链检测的方法及系统。
根据本发明的第一方面,提供一种IOS应用中绕过函数调用链检测的方法,包括:
S1,对目的IOS应用程序以及系统函数backtrace进行Hook操作;
S2,通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;
S3,当源IOS应用程序调用目的IOS应用程序的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;
S4,若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用堆栈的检测,其中,函数调用链存储于调用堆栈中。
本发明的有益效果为:当一个IOS应用程序调用另一个IOS应用程序的核心函数时,将当前函数调用链修改为合法的核心函数调用链,即对当前函数调用链进行伪造,以绕过核心函数调用链的检测,能够实现一个IOS应用程序调用另一个IOS应用程序的核心函数,以获取对应的数据。
在上述技术方案的基础上,本发明还可以作如下改进。
进一步的,所述步骤S1中对目的IOS应用程序进行Hook操作进一步包括:
对目的IOS应用程序中的每一个Mach-o文件进行Hook操作,以实现对整个目的IOS应用程序的Hook操作。
进一步的,所述对每一个Mach-o文件进行Hook操作进一步包括:
针对目的IOS应用程序中的每一个Mach-o文件,找到每一个Mach-o文件的函数地址;
为每一个Mach-o文件编写对应的自定义函数,采用内存分配给所述自定义函数的函数地址替换该Mach-o文件的函数地址,实现每一个Mach-o文件的Hook操作。
进一步的,所述步骤S1中对系统函数backtrace进行Hook操作进一步包括:
在源IOS应用程序中编写dylib模块,且在所述dylib模块中编写Hook函数my_backtrace,采用my_backtrace函数对原有的系统函数backtrace函数进行Hook操作,实现当源IOS应用程序调用backtrace函数时跳转到my_backtrace函数。
进一步的,所述S3中判断当前函数调用链是否为合法的核心函数调用链进一步包括:
当源IOS应用程序调用目的IOS应用程序中的核心函数时,源IOS应用程序调用系统函数backtrace函数获取真实的当前函数调用链;
在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链。
进一步的,所述在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链进一步包括:
调用backtrace函数获取当前函数调用堆栈的所有内存地址以及调用地址的个数;
调用backtrace_symbols获取每个内存地址的函数名称;
根据每一个函数名称,在Hook函数my_backtrace中判断当前函数调用链是否为dylib模块中编写的函数调用链。
进一步的,所述步骤S3中将当前函数调用链修改为所述合法的核心函数调用链进一步包括:
若判断出当前函数调用链为dylib模块中编写的函数调用链,则在my_backtrace函数中利用合法的核心函数调用链的内存地址对当前函数调用链的内存地址进行修改,实现对当前函数调用链进行伪造。
根据本发明的第二方面,提供了一种IOS应用中绕过函数调用链检测的系统,包括:
操作模块,用于对目的IOS应用程序以及系统函数backtrace进行Hook操作;
分析模块,用于通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;
判断模块,用于当源IOS应用程序的调用目的IOS应用程序的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;
修改模块,用于若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用堆栈的检测,其中,函数调用链存储于调用堆栈中。
根据本发明的第三方面,提供了一种IOS应用中绕过函数调用链检测的方法的设备,包括处理器、存储器和总线;
所述处理器和存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上实施方法。
根据本发明的第四方面,提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上实施方法。
附图说明
图1为本发明一个实施例的IOS应用中绕过函数调用链检测的方法流程图;
图2为IOS应用程序中一个Mach-o文件的文件结构图;
图3为本发明另一个实施例的IOS应用绕过函数调用链检测的系统连接框图;
图4为本发明又一个实施例的IOS应用绕过函数调用链检测的系统整体连接框图;
图5为本发明再一个实施例的IOS应用中绕过函数调用链检测的方法的设备连接框图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1,提供了本发明一个实施例的IOS应用中绕过函数调用链检测的方法,该包括包括:S1,对目的IOS应用程序以及系统函数backtrace进行Hook操作;S2,通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;S3,当源IOS应用程序的调用目的IOS应用程序的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;S4,若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用堆栈的检测,其中,函数调用链存储于调用堆栈中。
在IOS应用程序开发过程中,通常会涉及到一个IOS应用程序调用另一个IOS应用程序的核心函数,IOS应用程序为了防止其它的IOS应用程序调用自身的核心函数,通常会在核心函数中加入调用链的检测,通过调用链的检测来防止其它的应用程序调用核心函数。
因此,本实施例提供了一套能够绕过函数调用链的检测方法,具体实现过程中,由于一个IOS应用程序需要调用另一个IOS应用程序的核心函数,为方便以下描述,将其中的一个IOS应用程序称之为源IOS应用程序,另一个IOS应用程序称之为目的IOS应用程序。在IOS应用程序中,通常会使用系统提供的API函数backtrace和backtrace_symbols来获取当前函数的调用堆栈,那么其它任何函数调用当前函数,则可以通过函数调用堆栈找到该函数,从而实现对核心函数的调用者的检测。
通过对系统函数backtrace函数以及目的IOS应用程序进行Hook操作,则在调用IOS应用程序的核心函数时,就能够得到函数调用链,简单来说,函数调用链即为核心函数的调用过程。
对系统函数backtrace函数和目的IOS应用程序进行了Hook操作后,通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链。当源IOS应用程序调用目的IOS应用程序中的核心函数时,通过核心函数backtrace函数获取当前函数调用链,并判断当前函数调用链是否为合法的核心函数调用链。若合法,则不作处理,直接去调用目的IOS应用程序的核心函数,若不合法,则将当前函数调用链修改为合法的核心函数调用链,以绕过目的IOS应用程序的核心函数调用链的检测,来实现一个IOS应用程序向另一个IOS应用程序的核心函数的调用,满足不同IOS应用程序之间的数据传输。
在上述实施例的基础上,本发明的一个实施例中,所述步骤S1中对目的IOS应用进行Hook操作进一步包括:对目的IOS应用程序中的每一个Mach-o文件进行Hook操作,以实现对整个目的IOS应用程序的Hook操作。
由于一个IOS应用程序会加载多个Mach-o文件,Mach-o文件是IOS应用程序上的可执行文件,由于源IOS应用程序在调用目的IOS应用程序的核心函数时,调用目的IOS应用程序的每一个Mach-o文件中的函数均有可能,因此,需要记录调用目的IOS应用程序的核心函数的函数调用链,就需要对目的IOS应用程序的每一个Mah-o文件进行Hook操作,以实现对整个目的IOS应用程序的Hook操作。
在上述各个实施例的基础上,本发明的另一个实施例中,所述对每一个Mach-o文件进行Hook操作进一步包括:针对目的IOS应用程序中的每一个Mach-o文件,找到每一个Mach-o文件的函数地址;为每一个Mach-o文件编写对应的自定义函数,采用内存分配给所述自定义函数的函数地址替换该Mach-o文件的函数地址,实现每一个Mach-o文件的Hook操作。
上述实施例已经说明,需要对整个目的IOS应用程序进行Hook操作,则需要对其中的每一个Mach-o文件进行Hook操作。Hook操作的原理即是对Mach-o文件的函数地址进行伪造,也即找到每一个Mach-o文件的函数地址,然后为每一个Mach-o文件编写对应的自定义函数,内存会为编写的每一个自定义函数分配对应的函数地址。采用内存为编写的自定义函数分配的函数地址替换每一个Mach-o文件的原始函数地址,实现对每一个Mach-o文件的函数地址的伪造,具体过程为,首先定义Hook函数的原型如下:
HOOK_Function(char*pFuncName,void*pNew,void**pSaveOrg);
其中,函数名称是HOOK_Function,参数char*pFuncName标示需要hook的函数名称,参数void*pNew标示替换后的函数地址,参数void**pSaveOrg标示替换前原始的函数地址。
可参见图2,为一个Mach-o的文件结构,一个mach-o文件包括三个基本区域,头部header structure、加载命令load command和段segment。其中,一个Mach-o文件中可以拥有多个段segment,每个段segment可以拥有零个或多个区域section,每一个段segment都拥有一段虚拟地址映射到进程的地址空间。一个完整的用户级Mach-o文件的末端是链接信息,其中包含了动态加载器用来链接可执行文件或者依赖库所需使用的符号表、字符串表等等。
对每一个Mach-o文件进行Hook操作主要分为两个步骤,第一个步骤是找到Mach-o文件的原始函数地址,第二个步骤是将Mach-o文件的原始函数地址更改为自定义的函数地址。
对于每一个mach-o文件进行Hook操作的过程是相同的,因此,下面对其中一个Mach-o文件进行Hook操作的流程进行说明,其中,包括以下步骤:
步骤1,获取每一个Mach-o文件的内存起始地址,其中,通过系统函数可以获取到系统中Mach-o文件的个数,以及每一个Mach-o文件的内存起始地址,具体实现如下:
uint32_t c=_dyld_image_count();
通过_dyld_image_count来获取IOS程序所加载的Mach-o的个数。
for(uint32_t i=0;i<c;i++)
{
通过for循环来遍历Mach-o文件;
const struct mach_header*header=_dyld_get_image_header(i);
通过函数_dyld_get_image_header获取该Mach-o文件的内存起始地址。
intptr_t slide=_dyld_get_image_vmaddr_slide(i);
通过函数_dyld_get_image_vmaddr_slide来获取mach-o文件在内存的中的虚拟内存地址。
}
步骤2,找到需要Hook操作的mach-o文件的函数地址。
首先对需要Hook的Mach-o文件进行解析,获取到Mach-o文件中加载命令loadcommands里的linkedit_segment、symtab_cmd、dysymtab_cmd,通过linkedit_segment则可以找到symtab_cmd中的symtab和strtab,其中strtab和symtab分别存储着每个函数的名称和索引,而函数指针则存储在每个section中,所以需要从Mach-o文件中解析出section,具体实现如下:
可以按照图2来解析Mach-o文件,获取到对应的cmd,并且Mach-o文件的解析是开源的,可以按照开源的代码来解析需要查找的linkedit_segment、symtab_cmd、dysymtab_cmd等cmd地址。具体实现则是遍历Mach-o文件的Load command来查找,最终则可以查找到section、symtab、strtab、indirect_symtab等。
有了上述的基础结构后,则可以通过symtab和strtab来查找到Mach-o文件的每一个函数的名称,通过函数名称来判断是否为需要Hook的函数,如果找到则通过第3步进行函数地址替换。
步骤3,对Mach-o文件中需要Hook的函数的函数地址进行替换。
通过步骤2已经从Mach-o文件中找到了需要替换的目标函数的内存地址,那么本步骤则是对目标函数地址进行替换,从而实现hook功能。
具体实现则是通过section和步骤1查找的slide内存虚拟地址来获取需要Hook的函数的内存地址,采用自定义的函数地址替换需要Hook的函数的函数地址,实现对目标函数的Hook功能。
在上述各实施例的基础上,本发明的另一个实施例中,所述步骤S1中对系统函数backtrace进行Hook操作进一步包括:在源IOS应用中编写dylib模块,且在所述dylib模块中编写Hook函数my_backtrace,采用my_backtrace函数对原有的系统函数backtrace函数进行Hook,实现当IOS应用调用backtrace函数时跳转到my_backtrace函数。
上述实施例描述了对目的IOS应用程序进行Hook的过程,本实施例描述一下对系统函数backtrace进行Hook操作的过程。源应用需要去调用目的应用的核心函数,需要在源应用中编写一个dylib模块,dylib模块中则会编写具体的函数去调用目的应用中的核心函数,假设目的应用中有一个核心函数Void DecodeData(char*data,int size),其函数实现对传入的数据data进行解密的功能。假设目的应用程序调用这个函数对其数据进行解密操作,那么函数调用堆栈则会是FuctionA调用FunctionB调用DecodeData,即是函数FuctionA会先调用FuctionB,然后调用最终的DecodeData函数,则此条函数调用链是正常合法的。
目的应用程序为了对该核心函数进行保护,通常会在此核心函数中加入堆栈检测的功能。那么如果采用编写的dylib模块调用DecodeData,假设函数调用堆栈为FuctionC调用FunctionD调用DecodeData。那么当前核心函数进行堆栈检测则会发现一条新的函数调用链,从而可以判断当前函数调用链是一个非法函数调用链,从而可以对其进行惩罚等措施。
为了绕过核心函数调用链的检测,在bylib模块中编写Hook函数my_backtrace,采用my_backtrace函数对原有的系统函数backtrace函数进行Hook,当应用程序调用系统函数backtrace时,会跳转到my_backtrace函数,在my_backtrace函数中进行函数调用链的伪造。
在上述各个实施例的基础上,本发明的一个实施例中,所述S3中判断当前函数调用链是否为核心函数合法的调用链进一步包括:当源IOS应用调用目的IOS应用中的核心函数时,调用系统函数backtrace函获取真实的当前函数调用链;在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链。
上述实施例中在dylib模块中编写了my_backtrace函数,当源IOS应用调用目的IOS应用中的核心函数时,通过调用原始的系统函数backtrace来获取真实的当前函数调用链。得到了当前函数调用链,在Hook函数my_backtrace中判断当前函数调用链是否为dylib模块中编写的函数调用链。
具体的判断过程为,调用backtrace函数获取当前函数调用堆栈的所有内存地址以及调用地址的个数;调用backtrace_symbols获取每个内存地址的函数名称;通过每一个函数名称判断当前函数调用链是否为dylib模块中编写的函数调用链。若是,则对当前函数调用链进行伪造,将当前函数调用链修改为合法的核心函数调用链,以绕过核心函数的调用链的检测。
在本发明的另一个实施例中,对当前函数调用链进行伪造的过程为,若判断出当前函数调用链为dylib模块中编写的函数调用链,则在my_backtrace函数中利用合法的核心函数调用链的内存地址对当前函数调用链的内存地址进行修改,实现对当前函数调用链进行伪造。
对伪造的过程具体实现如下,前述介绍了正常的IOS应用调用核心函数的调用链为Function A调用Function B调用Decodedata,可以通过系统函数backtrace获取正常的函数调用链的内存地址。那么在my_backtrace中则会将获取的当前函数调用链从FunctionC调用Function D调用Decodedata改成正常的函数调用链Function A调用Function B调用Decodedata,从而实现了对当前函数调用链的伪造,以实现绕过核心函数调用链的检测,实现一个IOS应用程序调用另一个IOS应用程序的核心函数的功能。
参见图3,提供了本发明另一个实施例的IOS平台绕过核心函数堆栈链检测的系统,包括操作模块31、分析模块332、判断模块33和修改模块34。
操作模块31,用于对目的IOS应用以及系统函数backtrace进行Hook操作。
分析模块332,用于通过系统函数backtrace记录目的IOS应用中核心函数的调用过程,以此分析得到一条合法的核心函数调用链。
判断模块33,用于当源IOS应用的调用目的IOS应用的核心函数时,判断当前函数调用链是否为合法的核心函数调用链。
修改模块34,用于若判断出当前函数调用链不是核心函数合法的调用链,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用链的检测。
其中,操作模块31,进一步用于:对目的IOS应用程序中的每一个Mach-o文件进行Hook操作,以实现对整个目的IOS应用程序的Hook操作。
参见图4,在上述实施例的基础上,本实施例提供的IOS平台绕过核心函数堆栈链检测的系统还包括获取模块35,用于针对目的IOS应用中的每一个Mach-o文件,获取每一个Mach-o文件的函数地址。
相应的,操作模块31,还用于:为每一个Mach-o文件编写对应的自定义函数,采用内存分配给所编写的自定义函数的函数地址替换该Mach-o文件的函数地址,实现每一个Mach-o文件的Hook操作。
所述操作模块31还用于:在源IOS应用中编写dylib模块,且在所述dylib模块中编写Hook函数my_backtrace,采用my_backtrace函数对原有的系统函数backtrace函数进行Hook,实现当源IOS应用调用backtrace函数时跳转到my_backtrace函数。
获取模块35,还用于当源IOS应用调用目的IOS应用中的核心函数时,调用系统函数backtrace函数获取真实的当前函数调用链;相应的,判断模块33,还用于:在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链。
获取模块35,还用于:调用backtrace函数获取当前函数调用堆栈的所有内存地址以及调用地址的个数;以及调用backtrace_symbols获取每个内存地址的函数名称。
相应的,判断模块33,还用于:通过每一个函数名称判断当前函数调用链是否为dylib模块中编写的函数调用链。
修改模块34,进一步用于:若判断出当前函数调用链为dylib模块中编写的函数调用链,则在my_backtrace函数中利用合法的核心函数调用链的内存地址对当前函数调用链的内存地址进行修改,实现对当前函数调用链进行伪造。
参见图5,示出本申请实施例的IOS应用中绕过函数调用链检测的方法的设备结构框图。
参照图5,IOS应用中绕过函数调用链检测的方法的设备包括:处理器(processor)501、存储器(memory)502和总线503;其中,所述处理器501和存储器502通过所述总线503完成相互间的通信。
所述处理器501用于调用所述存储器502中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:对目的IOS应用以及系统函数backtrace进行Hook操作;通过系统函数backtrace记录目的IOS应用中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;当源IOS应用的调用目的IOS应用的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用链的检测。
本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述对应实施例所提供的IOS应用中绕过函数调用链检测的方法,例如包括:对目的IOS应用以及系统函数backtrace进行Hook操作;通过系统函数backtrace记录目的IOS应用中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;当源IOS应用的调用目的IOS应用的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用链的检测。
本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述对应实施例所提供的IOS应用中绕过函数调用链检测的方法,例如包括:对目的IOS应用以及系统函数backtrace进行Hook操作;通过系统函数backtrace记录目的IOS应用中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;当源IOS应用的调用目的IOS应用的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用链的检测。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的IOS应用中绕过函数调用链检测的方法的设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。
本发明提供的IOS应用中绕过函数调用链检测的方法及系统,当一个IOS应用程序调用另一个IOS应用程序的核心函数时,将当前函数调用链修改为合法的核心函数调用链,即对当前函数调用链进行伪造,以绕过核心函数调用链的检测,能够实现一个IOS应用程序调用另一个IOS应用程序的核心函数。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种IOS应用中绕过函数调用链检测的方法,其特征在于,包括:
S1,对目的IOS应用程序以及系统函数backtrace进行Hook操作;
S2,通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;
S3,当源IOS应用程序调用目的IOS应用程序的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;
S4,若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用堆栈的检测。
2.如权利要求1所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述步骤S1中对目的IOS应用程序进行Hook操作进一步包括:
对目的IOS应用程序中的每一个Mach-o文件进行Hook操作,以实现对整个目的IOS应用程序的Hook操作。
3.如权利要求2所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述对每一个Mach-o文件进行Hook操作进一步包括:
针对目的IOS应用程序中的每一个Mach-o文件,找到每一个Mach-o文件的函数地址;
为每一个Mach-o文件编写对应的自定义函数,采用内存分配给所述自定义函数的函数地址替换该Mach-o文件的函数地址,实现每一个Mach-o文件的Hook操作。
4.如权利要求1所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述步骤S1中对系统函数backtrace进行Hook操作进一步包括:
在源IOS应用程序中编写dylib模块,且在所述dylib模块中编写Hook函数my_backtrace,采用my_backtrace函数对原有的系统函数backtrace函数进行Hook操作,实现当源IOS应用程序调用backtrace函数时跳转到my_backtrace函数。
5.如权利要求4所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述S3中判断当前函数调用链是否为合法的核心函数调用链进一步包括:
当源IOS应用程序调用目的IOS应用程序中的核心函数时,源IOS应用程序调用系统函数backtrace函数获取真实的当前函数调用链;
在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链。
6.如权利要求5所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述在Hook函数my_backtrace中判断当前函数调用链是否是dylib模块中编写的函数调用链进一步包括:
调用backtrace函数获取当前函数调用堆栈的所有内存地址以及调用地址的个数;
调用backtrace_symbols获取每个内存地址的函数名称;
根据每一个函数名称,在Hook函数my_backtrace中判断当前函数调用链是否为dylib模块中编写的函数调用链。
7.如权利要求6所述的IOS应用中绕过函数调用链检测的方法,其特征在于,所述步骤S3中将当前函数调用链修改为所述合法的核心函数调用链进一步包括:
若判断出当前函数调用链为dylib模块中编写的函数调用链,则在my_backtrace函数中利用合法的核心函数调用链的内存地址对当前函数调用链的内存地址进行修改,实现对当前函数调用链进行伪造。
8.一种IOS应用中绕过函数调用链检测的系统,其特征在于,包括:
操作模块,用于对目的IOS应用程序以及系统函数backtrace进行Hook操作;
分析模块,用于通过系统函数backtrace记录目的IOS应用程序中核心函数的调用过程,以此分析得到一条合法的核心函数调用链;
判断模块,用于当源IOS应用程序的调用目的IOS应用程序的核心函数时,判断当前函数调用链是否为合法的核心函数调用链;
修改模块,用于若合法,则不作处理,若不合法,则将当前函数调用链修改为所述合法的核心函数调用链,以绕过核心函数调用堆栈的检测,其中,函数调用链存储于调用堆栈中。
9.一种优化命名管道的通信方法的设备,其特征在于,包括处理器、存储器和总线;
所述处理器和存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1-7任一项所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7任一所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710797781.5A CN107545182B (zh) | 2017-09-06 | 2017-09-06 | 一种ios应用中绕过函数调用链检测的方法及系统 |
PCT/CN2017/120187 WO2019047442A1 (zh) | 2017-09-06 | 2017-12-29 | 一种ios应用中绕过函数调用链检测的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710797781.5A CN107545182B (zh) | 2017-09-06 | 2017-09-06 | 一种ios应用中绕过函数调用链检测的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107545182A true CN107545182A (zh) | 2018-01-05 |
CN107545182B CN107545182B (zh) | 2019-11-15 |
Family
ID=60958169
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710797781.5A Active CN107545182B (zh) | 2017-09-06 | 2017-09-06 | 一种ios应用中绕过函数调用链检测的方法及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107545182B (zh) |
WO (1) | WO2019047442A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933985A (zh) * | 2019-02-25 | 2019-06-25 | 百度在线网络技术(北京)有限公司 | 一种绕过挂钩的方法、装置、设备和计算机存储介质 |
CN110245464A (zh) * | 2018-10-10 | 2019-09-17 | 爱信诺征信有限公司 | 保护文件的方法和装置 |
CN110287123A (zh) * | 2019-07-03 | 2019-09-27 | 武汉斗鱼鱼乐网络科技有限公司 | 一种绕过ios系统调试检测的方法及装置 |
CN110737465A (zh) * | 2018-07-20 | 2020-01-31 | 武汉斗鱼网络科技有限公司 | 一种函数调用路径获取的方法和相关装置 |
CN112445683A (zh) * | 2019-08-27 | 2021-03-05 | 武汉瓯越网视有限公司 | 一种多开检测绕过方法、存储介质、设备及系统 |
CN113032108A (zh) * | 2021-05-26 | 2021-06-25 | 武汉深之度科技有限公司 | 一种应用程序的运行方法,计算设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484179A (zh) * | 2014-12-23 | 2015-04-01 | 上海斐讯数据通信技术有限公司 | 一种栈回溯方法 |
US9378117B2 (en) * | 2014-05-30 | 2016-06-28 | Apple Inc. | Queue debugging using stored backtrace information |
CN106649084A (zh) * | 2016-09-14 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 函数调用信息的获取方法及装置、测试设备 |
CN106650355A (zh) * | 2016-12-08 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种保护函数调用的方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120185881A1 (en) * | 2011-01-13 | 2012-07-19 | Begeman Nathaniel C | Debugging Support For Core Virtual Machine Server |
CN102831344B (zh) * | 2012-07-27 | 2015-04-15 | 北京奇虎科技有限公司 | 一种进程的处理方法和装置 |
CN105808251B (zh) * | 2016-03-03 | 2021-02-02 | 武汉斗鱼网络科技有限公司 | 一种基于虚函数表劫持绕过安全检测的方法与系统 |
CN105808256B (zh) * | 2016-03-08 | 2017-06-23 | 武汉斗鱼网络科技有限公司 | 一种构造合法堆栈返回值绕过函数调用检测的方法与系统 |
-
2017
- 2017-09-06 CN CN201710797781.5A patent/CN107545182B/zh active Active
- 2017-12-29 WO PCT/CN2017/120187 patent/WO2019047442A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378117B2 (en) * | 2014-05-30 | 2016-06-28 | Apple Inc. | Queue debugging using stored backtrace information |
CN104484179A (zh) * | 2014-12-23 | 2015-04-01 | 上海斐讯数据通信技术有限公司 | 一种栈回溯方法 |
CN106649084A (zh) * | 2016-09-14 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 函数调用信息的获取方法及装置、测试设备 |
CN106650355A (zh) * | 2016-12-08 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种保护函数调用的方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737465A (zh) * | 2018-07-20 | 2020-01-31 | 武汉斗鱼网络科技有限公司 | 一种函数调用路径获取的方法和相关装置 |
CN110737465B (zh) * | 2018-07-20 | 2023-09-22 | 深圳市大梦龙途网络科技有限公司 | 一种函数调用路径获取的方法和相关装置 |
CN110245464A (zh) * | 2018-10-10 | 2019-09-17 | 爱信诺征信有限公司 | 保护文件的方法和装置 |
CN109933985A (zh) * | 2019-02-25 | 2019-06-25 | 百度在线网络技术(北京)有限公司 | 一种绕过挂钩的方法、装置、设备和计算机存储介质 |
CN109933985B (zh) * | 2019-02-25 | 2022-02-25 | 百度在线网络技术(北京)有限公司 | 一种绕过挂钩的方法、装置、设备和计算机存储介质 |
CN110287123A (zh) * | 2019-07-03 | 2019-09-27 | 武汉斗鱼鱼乐网络科技有限公司 | 一种绕过ios系统调试检测的方法及装置 |
CN112445683A (zh) * | 2019-08-27 | 2021-03-05 | 武汉瓯越网视有限公司 | 一种多开检测绕过方法、存储介质、设备及系统 |
CN113032108A (zh) * | 2021-05-26 | 2021-06-25 | 武汉深之度科技有限公司 | 一种应用程序的运行方法,计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107545182B (zh) | 2019-11-15 |
WO2019047442A1 (zh) | 2019-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107545182B (zh) | 一种ios应用中绕过函数调用链检测的方法及系统 | |
CN107291480A (zh) | 一种函数调用方法及装置 | |
CN107644286A (zh) | 工作流处理方法及装置 | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
CN104346274B (zh) | 程序调试器及一种程序的调试方法 | |
CN104391787B (zh) | 一种针对目标方法的监控、热切入方法及装置 | |
CN106649084A (zh) | 函数调用信息的获取方法及装置、测试设备 | |
CN107832059A (zh) | 一种基于Makefile的代码静态分析方法和装置 | |
CN104346148A (zh) | 获取程序性能消耗信息的方法、装置及系统 | |
CN109408393A (zh) | 应用测试方法、装置及设备和计算机可读存储介质 | |
CN102981882B (zh) | 解析方法和装置 | |
CN105653949B (zh) | 一种恶意程序检测方法及装置 | |
CN107704436A (zh) | 数据抽样方法、终端、设备以及计算机可读存储介质 | |
CN104866734A (zh) | 一种dex文件的保护方法及装置 | |
CN106598828A (zh) | 一种源代码中的无效类确定方法及装置 | |
CN106951231A (zh) | 一种计算机软件开发方法及装置 | |
CN108654090A (zh) | 操作系统与游戏应用交互的方法及装置 | |
CN107544811A (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及系统 | |
CN107665167A (zh) | 程序调试方法、装置及程序开发设备 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN101937395B (zh) | 一种用于漏洞检测的检测对象程序特征提取方法 | |
CN103632099B (zh) | 未导出的Native API函数获取方法及装置 | |
CN109426496A (zh) | 程序日志写入文件的方法、存储介质、电子设备及系统 | |
CN106294530A (zh) | 规则匹配的方法和系统 | |
CN102693150B (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 |