CN107967203B - 基于可执行文件的函数判定方法及装置 - Google Patents
基于可执行文件的函数判定方法及装置 Download PDFInfo
- Publication number
- CN107967203B CN107967203B CN201610920945.4A CN201610920945A CN107967203B CN 107967203 B CN107967203 B CN 107967203B CN 201610920945 A CN201610920945 A CN 201610920945A CN 107967203 B CN107967203 B CN 107967203B
- Authority
- CN
- China
- Prior art keywords
- function
- assembly
- instruction
- file
- application program
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于可执行文件的函数判定方法及装置,属于计算机技术领域。所述方法包括:获取应用程序的可执行文件,可执行文件中包括函数;根据可执行文件生成应用程序的汇编文件;根据汇编文件中与函数相关的汇编指令片段检测函数是否满足预设条件;预设条件是对函数进行Hook时,应用程序出错的预警条件;若函数满足预设条件,则判定函数不支持Hook行为;解决了终端在通过调用函数以判定函数是否支持Hook行为时会导致应用程序频繁出错而影响终端正常使用的问题;达到了避免了应用程序频繁的出错,保证终端的正常运行,节约了终端资源的效果。
Description
技术领域
本发明实施例涉及计算机技术领域,特别涉及一种基于可执行文件的函数判定方法及装置。
背景技术
终端通过调用应用程序中的各个函数来运行该应用程序。在应用程序的运行过程中,当软件工程师需要对应用程序的运行情况进行分析时,通常需要获取应用程序中的函数的运行数据,目前常用的做法是对该函数进行Hook(钩子)行为,使终端在调用该函数时,先跳转至另一个回调函数,通过回调函数获取该函数的运行数据。
应用程序中的函数并不是都支持Hook行为,如果对不支持Hook行为的函数进行Hook,会导致终端在调用该函数并跳转至回调函数时,应用程序出错。因此,采用Hook技术对一个函数进行分析之前,需要先判定该函数是否支持Hook行为。目前常用的做法是先对函数试验性地进行Hook,若终端在调用该函数并跳转至回调函数时,应用程序出错,则判定该函数实际是不支持采用Hook技术的。
在现有技术中,当终端调用函数导致应用程序出错时,才能判定该函数不支持Hook行为,应用程序频繁出错会消耗较多的终端资源,且该应用程序出错时,可能会影响到终端中其他应用程序的正常运行,从而影响终端的正常使用。
发明内容
为了解决终端在判定函数是否支持Hook行为时会导致应用程序频繁出错而影响终端正常使用的问题,本发明实施例提供了一种基于可执行文件的函数判定方法及装置。所述技术方案如下:
第一方面,提供了一种基于可执行文件的函数判定方法,该方法包括:
获取应用程序的可执行文件,可执行文件中包括函数;
根据可执行文件生成应用程序的汇编文件;
根据汇编文件中与函数相关的汇编指令片段检测函数是否满足预设条件;预设条件是对函数进行Hook时,应用程序出错的预警条件;
若函数满足预设条件,则判定函数不支持Hook行为。
第二方面,提供了一种基于可执行文件的函数判定装置,该装置包括:
获取模块,用于获取应用程序的可执行文件,所述可执行文件中包括函数;
生成模块,用于根据所述可执行文件生成所述应用程序的汇编文件;
检测模块,用于根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件;所述预设条件是对所述函数进行钩子Hook时,所述应用程序出错的预警条件;
判定模块,用于若所述函数满足所述预设条件,则判定所述函数不支持Hook行为。
本发明实施例提供的技术方案带来的有益效果是:
终端根据应用程序的可执行文件生成应用程序的汇编文件,根据汇编文件中与某一个函数相关的汇编指令片段来检测对该函数进行Hook时是否会导致应用程序出错,当检测到对该函数进行Hook会导致应用程序出错时,即能判定该函数不支持Hook行为,而不需要在实际调用该函数导致应用程序出错时才能判定,避免了应用程序频繁的出错,保证终端的正常运行,节约了终端资源。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一示例性实施例提供的基于可执行文件的函数判定方法的流程图;
图2是本发明另一示例性实施例提供的基于可执行文件的函数判定方法的流程图;
图3是本发明另一示例性实施例提供的PDB文件解析的示意图;
图4是本发明另一示例性实施例提供的基于可执行文件的函数判定方法的流程图;
图5是本发明另一示例性实施例提供的基于可执行文件的函数判定方法的流程图;
图6是本发明另一示例性实施例提供的基于可执行文件的函数判定方法的流程图;
图7是本发明另一示例性实施例提供的基于可执行文件的函数判定方法的示意图;
图8是本发明一示例性实施例提供的基于可执行文件的函数判定装置的框图;
图9是本发明一示例性实施例提供的终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明各个实施例提供的基于可执行文件的函数判定方法,可以由诸如便携式计算机、台式计算机、智能手机和平板电脑之类的终端来实现,终端中安装有应用程序的可执行文件,终端通过加载和运行应用程序的可执行文件来调用应用程序中的各个函数,从而运行该应用程序。
图1是根据一示例性实施例示出的一种基于可执行文件的函数判定方法的流程图,本实施例以该方法应用于上述终端中进行举例说明,该方法可以包括如下几个步骤:
步骤101,获取应用程序的可执行文件。
可执行文件是可以由终端的操作系统加载运行的文件,可执行文件通常是包括应用程序的机器语言代码的文件。可执行文件中包括函数,可执行文件中包括的函数是应用程序中的各个函数。
可选的,当终端的操作系统是Windows操作系统时,可执行文件是exe文件(EXEFile)或DLL(Dynamic Link Library,动态链接库)文件。
步骤102,根据可执行文件生成应用程序的汇编文件。
可选的,汇编文件中包括应用程序中的函数所对应的汇编指令。
终端通过反汇编工具对可执行文件进行反汇编生成汇编文件,汇编文件是包括应用程序的汇编语言代码的文件。可选的,反汇编工具是IDA(Interactive Disassembler,交互式反汇编)、w32dasm和OllyICE等。
步骤103,根据汇编文件中与函数相关的汇编指令片段检测函数是否满足预设条件。
其中,预设条件是对函数进行Hook时,应用程序出错的预警条件。预设条件编写在脚本文件中,终端通过运行该脚本文件来检测汇编文件是否满足脚本文件中的预设条件。
步骤104,若函数满足预设条件,则判定函数不支持Hook行为。
综上所述,本发明实施例提供的基于可执行文件的函数判定方法,终端根据应用程序的可执行文件生成应用程序的汇编文件,根据汇编文件中与某一个函数相关的汇编指令片段来检测对该函数进行Hook时是否会导致应用程序出错,当检测到对该函数进行Hook会导致应用程序出错时,即能判定该函数不支持Hook行为,而不需要在实际调用该函数导致应用程序出错时才能判定,避免了应用程序频繁的出错,保证终端的正常运行,节约了终端资源。
在本发明实施例中,上述与函数相关的汇编指令片段的含义不同时,对应的预设条件的含义也不同,上述与函数相关的汇编指令片段及其对应的预设条件包括以下几种情况中的至少一种:
第一种情况:与函数相关的汇编指令片段包括函数的回调函数的汇编指令,则预设条件是函数的回调函数的返回地址不属于应用程序的地址空间。
第二种情况:与函数相关的汇编指令片段包括以函数为回调函数的调用函数的汇编指令,则预设条件是汇编文件中包括以该函数为回调函数的调用函数的汇编指令。
第三种情况:与函数相关的汇编指令片段包括函数的汇编指令,则预设条件是函数的汇编指令的起始字段中包括跳转指令。
图2是根据一示例性实施例示出的一种基于可执行文件的函数判定方法的流程图,本实施例以该方法应用于上述终端中,且以与函数有关的汇编指令片段和预设条件为上述第一种情况为例进行说明,该方法可以包括如下几个步骤:
步骤201,获取应用程序的可执行文件。
其中,可执行文件中包括应用程序中的函数。
步骤202,根据可执行文件生成应用程序的汇编文件。
可选的,汇编文件包括应用程序中的函数所对应的汇编指令。汇编指令通常包括操作符和助记符,在一些实施例中,汇编文件中通常还包括伪指令。函数的汇编指令通常从Push ebp指令开始,表示将当前地址压入堆栈,函数的汇编指令通常从retn指令结束,表示返回。
步骤203,根据回调函数的汇编指令确定函数的回调函数的返回地址。
在本发明实施例中,可选的,通过将函数的汇编指令的起始字段的内容替换为跳转指令和回调函数的函数地址来实现对函数的Hook,使终端在调用该函数之前先跳转至回调函数的函数地址,开始执行该函数地址对应的汇编指令,即执行回调函数的汇编指令;可选的,汇编指令的起始字段是汇编指令中从第1个字节开始的包括预定字节个数的字段,预定字节个数是系统预设值或用户自定义值,比如,汇编指令的起始字段是汇编指令中的前5个字节,通常将汇编指令中的第1个字节的内容替换为跳转指令,将后4个字节的内容替换为函数地址。其中,一个函数的函数地址指的是该函数的汇编指令的段的起始地址,函数地址是一个内存地址,通常包括基址和偏移地址,也可以写作“段:偏移量”的形式,这里的段是指段选择器。比如,将函数的汇编指令的起始字段的内容替换为JMP 55BA:8,表示跳转至段地址为55BA,偏移地址为8的函数地址,执行该函数地址对应的汇编指令。
因此,终端确定汇编指令中被替换的起始字段中的跳转指令所指向的函数地址,即为回调函数的函数地址,终端确定该回调函数的函数地址所对应的回调函数的汇编指令,并确定回调函数的汇编指令中包括的回调函数的返回地址,通常情况下,回调函数的汇编指令中包括返回指令,返回指令指向的地址即为回调函数的返回地址。
可选的,跳转指令是JMP系列指令,包括指令码为1个字节的JMP指令和指令码为2个字节的JMP指令。可选的,跳转指令是JO指令、JNO指令、JNS指令、JNZ指令、JNE指令、JMP指令和JMPF指令等指令中的任意一个。
步骤204,检测返回地址是否属于应用程序的地址空间。
其中,地址空间是一个地址段,表示该应用程序占用的内存地址的地址范围。终端检测返回地址是否在该地址段内,若返回地址在该地址段内,确定返回地址属于该地址空间,若返回地址不在该地址段内,确定返回地址不属于该地址空间。
步骤205,若返回地址不属于地址空间,则确定函数满足预设条件,判定函数不支持Hook行为。
可选的,在本实施例中,当回调函数的返回地址属于应用程序的地址空间时,汇编指令片段还可以包括回调函数的返回地址所对应的汇编指令,则对应的预设条件还包括在函数的回调函数的返回地址属于应用程序的地址空间时,返回地址对应的汇编指令的起始字段中包括跳转指令。则该方法还包括:
步骤206,若返回地址属于地址空间,则检测返回地址对应的汇编指令的起始字段中是否包括跳转指令。
通常情况下,回调函数的返回地址是原函数的函数地址,即终端在执行完回调函数后,再次返回该函数的函数地址并执行该函数的汇编指令。若返回地址对应的汇编指令的起始字段包括跳转指令,则表示终端在执行完回调函数返回该函数时,会再次跳转至另一个回调函数,由于同一个函数不能连续被Hook两次,此时会导致出错或崩溃,因此,终端需要检测返回地址对应的汇编指令的起始字段中是否包括跳转指令。
步骤207,若检测结果为包括跳转指令,则确定函数满足预设条件,判定函数不支持Hook行为。
步骤208,生成应用程序对应的第一配置文件和第二配置文件。
可选的,第一配置文件中包括判定得到的应用程序中不支持Hook行为的函数,第二配置文件中包括应用程序中支持Hook行为的函数,终端在判定得到不支持Hook行为的函数后,将应用程序中除这些函数之外的其他基于可执行文件的函数判定为支持Hook行为的函数。
可选的,第一配置文件是json(JavaScript Object Notation)格式的文件,通常是后缀为.json的文件。可选的,第二配置文件是protobuf格式的文件,通常是后缀为.flf的文件。
可选的,第一配置文件和第二配置文件中均包括函数名称和/或函数地址。通常情况下,终端在根据汇编文件对函数进行判定时,得到的结果通常是针对函数的偏移地址的判定结果,此时,生成的第一配置文件和第二配置文件中包括的是函数地址,比如,确定得到应用程序中偏移地址为957839、957964、957866和957952的函数不支持Hook行为,应用程序中的其他函数均支持Hook行为。
由于生成的第一配置文件和第二配置文件仅有偏移地址可读性较低,则可选的,该方法还可以包括如下两个步骤:
1、获取应用程序的PDB(Program Database,程序数据库)文件。
在应用程序的开发过程中,除了会生成应用程序的可执行文件,还会生成应用程序对应的PDB文件,对应的,终端在安装有一个应用程序的可执行文件的同时,通常还安装有该应用程序的PDB文件,终端可以通过该PDB文件对应用程序进行调试配置。
在实际实现时,该步骤可以是在上述步骤201之前执行,也可以在上述步骤201之后执行,或者,与上述步骤201同时执行,本实施例对此不作限定。
2、根据PDB文件确定函数的函数名称和函数地址。
可选的,PDB文件中包括应用程序的调试信息和状态信息,终端通过预定函数库对PDB文件进行解析获取到调试信息和状态信息等。可选的,预定函数库是DIA SDK(SoftwareDevelopment Kit,软件开发工具包)。可选的,状态信息包括应用程序的数据结构信息、应用程序中的各个函数的函数信息和模块名称等。可选的,函数信息包括应用程序中的各个函数的函数名称和函数地址,函数信息包括应用程序中的各个函数的函数大小、函数参数类型和函数参数个数等,其中,函数大小是函数占用的字节大小。终端对PDB文件进行解析的示意图如图3所示。
由于函数的基址通常在终端加载应用程序时即能确定,因此,终端可以通过偏移地址确定函数的函数地址,终端在通过上述两个步骤确定得到函数的函数名称和函数地址后,可以根据函数地址确定每个函数的函数名称,生成以函数名称,或者,以函数名称和函数地址进行表示的第一配置文件和第二配置文件。
终端在生成第一配置文件和第二配置文件后,可以将第一配置文件和第二配置文件以注册表的方式注入到执行该应用程序的进程中,软件工程师根据该第一配置文件和第二配置文件对函数进行Hook,从而获取到函数执行的数据。
综上所述,本发明实施例提供的基于可执行文件的函数判定方法,终端根据应用程序的可执行文件生成应用程序的汇编文件,根据汇编文件中与某一个函数相关的汇编指令片段来检测对该函数进行Hook时是否会导致应用程序出错,当检测到对该函数进行Hook会导致应用程序出错时,即能判定该函数不支持Hook行为,而不需要在实际调用该函数导致应用程序出错时才能判定,避免了应用程序频繁的出错,保证终端的正常运行,节约了终端资源。
本发明实施例提供的基于可执行文件的函数判定方法,通过解析PDB文件获取函数的函数名称和函数地址,从而可以生成包括函数名称的第一配置文件和第二配置文件,提高了第一配置文件和第二配置文件的可读性。
可选的,本实施例以与函数有关的汇编指令片段和预设条件为上述第二种情况为例进行说明,上述步骤203-207可被替换为如下步骤,如图4所示:
步骤401,检测汇编文件中是否包括调用函数的汇编指令。
终端检测汇编文件中的其他函数的汇编指令,检测是否存在汇编指令的起始字段的内容替换为跳转指令并指向该函数的函数地址,也即,检测是否存在通过跳转指令跳转至函数的汇编指令。
步骤402,若检测结果为包括调用函数的汇编指令,则确定函数满足预设条件,判定函数不支持Hook行为。
若检测到包括通过跳转指令跳转至函数的汇编指令,则确定汇编文件中存在以该函数为回调函数的调用函数的汇编指令,终端在执行其他函数时,会跳转至该函数的函数指令,此时若对该函数进行Hook,会使终端在执行其他函数并跳转至该函数时,再次进行跳转,容易出错或发生崩溃,因此,终端判定函数不支持Hook行为。
可选的,本实施例以与函数有关的汇编指令片段和预设条件为上述第三种情况为例进行说明,则上述步骤203-207可被替换为如下步骤,如图5所示:
步骤501,检测函数的汇编指令的起始字段中是否包括跳转指令。
步骤502,若汇编指令的起始字段中包括跳转指令,则确定函数满足预设条件,判定函数不支持Hook行为。
当终端检测到汇编指令的起始字段包括跳转指令时,若此时对汇编指令进行Hook,会将起始字段的内容进行替换,使汇编指令的起始字段中原先的跳转指令失效,导致出错或崩溃,因此,终端判定函数不支持Hook行为。
可选的,在基于上述实施例的其他可选实施例中,该方法还包括如下步骤,如图6所示:
步骤601,获取应用程序的PDB文件。
需要说明的是,在图2所示的实施例中,若步骤208中终端执行获取应用程序的PDB文件的步骤,则该步骤与上述步骤208中的获取应用程序的PDB文件是同一个步骤。
步骤602,根据PDB文件确定函数的函数大小。
终端根据PDB文件确定函数大小的方法可以结合上述步骤208中终端根据PDB文件确定函数名称和函数地址的方法,本实施例对此不再赘述。
步骤603,检测函数大小是否大于预定大小。
其中,预定大小是系统预设值,预定大小的取值通常与上述步骤203中汇编指令的起始字段所包括的字段的预定字节个数相同。由于本发明实施例中的Hook技术是将函数的汇编指令的起始字段的内容替换成跳转指令和回调函数的函数地址,且汇编指令的起始字段是汇编指令中的前5个字节,因此,可选的,预定大小为5个字节。
步骤604,若函数大小小于预定大小,则判定函数不支持Hook行为。
当终端检测到函数大小小于预定大小时,此时若对函数进行Hook,则函数的汇编指令不够足够的字节替换为跳转指令,因此,终端判定函数不支持Hook行为。
步骤605,若函数大小大于等于预定大小,则流程结束。
在实际实现时,终端在检测到函数大小大于等于预定大小时,可以通过上述图2、图4、图5或图6中示出的方法继续检测汇编文件是否满足预设条件。
在一个示例性的例子中,以应用程序是游戏程序为例,终端对游戏程序中的函数进行基于可执行文件的函数判定的流程图如图7所示,终端在获取到游戏程序的可执行文件和PDB文件后,对可执行文件进行反汇编,并使用脚本文件检测汇编文件;同时,对PDB文件进行解析。终端通过上述图2、图4、图5和图6所示的任意一个或多个实施例中的方法检测函数是否满足预设条件,从而判定函数是否支持Hook行为,并根据不支持Hook行为的函数生成游戏程序对应的第一配置文件,根据支持Hook行为的函数生成游戏程序对应的第二配置文件。
需要说明的是,本发明实施例对上述三种情况分别进行说明,在实际实现时,与函数相关的汇编指令片段和预设条件通常是上述三种情况中的任意几种的组合,则终端在检测到函数满足其中至少一种预设条件时,即判定函数不支持Hook行为。
另外需要说明的是,本发明实施例中是以采用Windows操作系统的终端为例,对于采用Windows操作系统的终端来说,美国的微软公司提供了一种函数库Detours,其用于提供拦截函数的Hook命令,本发明提供的基于可执行文件的函数判定方法中的函数Hook技术是基于Detours函数库中的Hook命令来实现的,在对函数进行Hook时,使用拦截代码替代函数的汇编指令的前几条指令,拦截代码在函数动态运行时加载,使终端在运行函数时,跳转至运行拦截代码,拦截代码通常是调用回调函数的代码,比如,是跳转至回调函数的地址的代码。在实际实现时,本发明实施例中的终端也可以采用其他的操作系统,以及基于其他函数库提供的Hook命令实现Hook技术,本实施例对此不作限定。
图8是根据一示例性实施例示出的一种基于可执行文件的函数判定装置的框图。该装置可以通过软件和硬件的结合实现成为终端的全部或一部分。该装置可以包括:
获取模块810,用于实现上述实施例中的步骤101和步骤201。
生成模块820,用于执行上述实施例中的步骤102和步骤202。
检测模块830,用于执行上述实施例中的步骤103。
判定模块840,用于执行上述实施例中的步骤104。
可选的,检测模块830包括:
第一确定单元,用于执行上述实施例中的步骤203。
第一检测单元,用于执行上述实施例中的步骤204。
第二确定单元,用于执行上述实施例中的步骤205。
可选的,检测模块830,还包括:
第二检测单元,用于执行上述实施例中的步骤206。
第三确定单元,用于执行上述实施例中的步骤207。
可选的,生成模块820,还用于执行上述实施例中的步骤208。
可选的,检测模块830,包括:
第三检测单元,用于执行上述实施例中的步骤401。
第四确定单元,用于执行上述实施例中的步骤402。
可选的,检测模块830包括:
第四检测单元,用于执行上述实施例中的步骤501。
第五确定单元,用于执行上述实施例中的步骤502。
可选的,该装置还包括:
确定模块,用于执行上述实施例中的步骤601和步骤602。
函数大小检测模块,用于执行上述实施例中的步骤603。
可选的,判定模块840,还用于执行上述实施例中的步骤604。
可选的,确定模块,包括:
获取单元,用于执行上述实施例中的步骤601。
第六确定单元,用于执行上述实施例中的步骤602。
相关细节可以结合参考上述图1、图2、图4、图5和图6所示的方法实施例。
综上所述,本发明实施例提供的基于可执行文件的函数判定装置,终端根据应用程序的可执行文件生成应用程序的汇编文件,根据汇编文件中与某一个函数相关的汇编指令片段来检测对该函数进行Hook时是否会导致应用程序出错,当检测到对该函数进行Hook会导致应用程序出错时,即能判定该函数不支持Hook行为,而不需要在实际调用该函数导致应用程序出错时才能判定,避免了应用程序频繁的出错,保证终端的正常运行,节约了终端资源。
图9其示出了本发明一个实施例提供的终端900的框图,该终端可以包括射频(RF,Radio Frequency)电路901、包括有一个或一个以上计算机可读存储介质的存储器902、输入单元903、显示单元904、传感器905、音频电路906、无线保真(WiFi,Wireless Fidelity)模块907、包括有一个或者一个以上处理核心的处理器908、以及电源909等部件。本领域技术人员可以理解,图9中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路901可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器908处理;另外,将涉及上行的数据发送给基站。通常,RF电路901包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM,Subscriber Identity Module)卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路901还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GSM,Global System of Mobile communication)、通用分组无线服务(GPRS,GeneralPacket Radio Service)、码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband Code Division Multiple Access)、长期演进(LTE,Long TermEvolution)、电子邮件、短消息服务(SMS,Short Messaging Service)等。
存储器902可用于存储软件程序以及模块,处理器908通过运行存储在存储器902的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器902可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器902可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器902还可以包括存储器控制器,以提供处理器908和输入单元903对存储器902的访问。
输入单元903可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元903可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器908,并能接收处理器908发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元903还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元904可用于显示由用户输入的信息或提供给用户的信息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元904可包括显示面板,可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器908以确定触摸事件的类型,随后处理器908根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图9中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
终端还可包括至少一种传感器905,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板的亮度,接近传感器可在终端移动到耳边时,关闭显示面板和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路906、扬声器,传声器可提供用户与终端之间的音频接口。音频电路906可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路906接收后转换为音频数据,再将音频数据输出处理器908处理后,经RF电路901以发送给比如另一终端,或者将音频数据输出至存储器902以便进一步处理。音频电路906还可能包括耳塞插孔,以提供外设耳机与终端的通信。
WiFi属于短距离无线传输技术,终端通过WiFi模块907可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图9示出了WiFi模块907,但是可以理解的是,其并不属于终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器908是终端的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器902内的软件程序和/或模块,以及调用存储在存储器902内的数据,执行终端的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器908可包括一个或多个处理核心;优选的,处理器908可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器908中。
终端还包括给各个部件供电的电源909(比如电池),优选的,电源可以通过电源管理系统与处理器908逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源909还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端中的处理器908会运行存储在存储器902中的一个或一个以上的程序指令,从而实现上述各个方法实施例中所提供的基于可执行文件的函数判定方法。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
需要说明的是:上述实施例提供的基于可执行文件的函数判定装置在判定函数是否支持Hook行为时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于可执行文件的函数判定装置和基于可执行文件的函数判定方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (17)
1.一种基于可执行文件的函数判定方法,其特征在于,所述方法包括:
获取应用程序的可执行文件,所述可执行文件中包括函数;
根据所述可执行文件生成所述应用程序的汇编文件;
根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件;所述预设条件是对所述函数进行钩子Hook时,所述应用程序出错的预警条件;
若所述函数满足所述预设条件,则判定所述函数不支持Hook行为,所述预设条件包括:所述函数的回调函数的返回地址属于所述应用程序的地址空间,且所述返回地址对应的汇编指令的起始字段中包括跳转指令、所述汇编文件中包括以所述函数为回调函数的调用函数的所述汇编指令以及所述函数的所述汇编指令的起始字段中包括跳转指令中的至少一种。
2.根据权利要求1所述的方法,其特征在于,
所述汇编指令片段包括所述函数的回调函数的汇编指令、以所述函数为回调函数的调用函数的汇编指令,以及所述函数的汇编指令中的至少一种。
3.根据权利要求2所述的方法,其特征在于,所述汇编指令片段包括所述函数的所述回调函数的所述汇编指令;
所述根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件,还包括:
根据所述回调函数的所述汇编指令确定所述回调函数的返回地址;
检测所述返回地址是否属于所述应用程序的所述地址空间;
若所述返回地址不属于所述地址空间,则确定所述函数满足所述预设条件。
4.根据权利要求3所述的方法,其特征在于,所述汇编指令片段还包括所述回调函数的所述返回地址所对应的汇编指令;所述方法还包括:
若所述返回地址属于所述地址空间,则检测所述返回地址对应的所述汇编指令的起始字段中是否包括跳转指令;
若检测结果为包括所述跳转指令,则确定所述函数满足所述预设条件。
5.根据权利要求2所述的方法,其特征在于,所述汇编指令片段包括以所述函数为回调函数的所述调用函数的所述汇编指令;
所述根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件,包括:
检测所述汇编文件中是否包括所述调用函数的所述汇编指令;
若检测结果为包括所述调用函数的所述汇编指令,则确定所述函数满足所述预设条件。
6.根据权利要求2所述的方法,其特征在于,所述汇编指令片段包括所述函数的汇编指令;
所述根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件,包括:
检测所述函数的所述汇编指令的起始字段中是否包括跳转指令;
若所述汇编指令的起始字段中包括所述跳转指令,则确定所述函数满足所述预设条件。
7.根据权利要求1至6任一所述的方法,其特征在于,所述方法还包括:
确定所述函数的函数大小,所述函数大小是所述函数占用的字节大小;
检测所述函数大小是否大于预定大小;
若所述函数大小小于所述预定大小,则判定所述函数不支持Hook行为。
8.根据权利要求7所述的方法,其特征在于,所述确定所述函数的函数大小,包括:
获取所述应用程序的程序数据库PDB文件;
根据所述PDB文件确定所述函数的所述函数大小。
9.一种基于可执行文件的函数判定装置,其特征在于,所述装置包括:
获取模块,用于获取应用程序的可执行文件,所述可执行文件中包括函数;
生成模块,用于根据所述可执行文件生成所述应用程序的汇编文件;
检测模块,用于根据所述汇编文件中与所述函数相关的汇编指令片段检测所述函数是否满足预设条件;所述预设条件是对所述函数进行钩子Hook时,所述应用程序出错的预警条件;
判定模块,用于若所述函数满足所述预设条件,则判定所述函数不支持Hook行为,所述预设条件包括:所述函数的回调函数的返回地址属于所述应用程序的地址空间,且所述返回地址对应的汇编指令的起始字段中包括跳转指令、所述汇编文件中包括以所述函数为回调函数的调用函数的所述汇编指令以及所述函数的所述汇编指令的起始字段中包括跳转指令中的至少一种。
10.根据权利要求9所述的装置,其特征在于,
所述汇编指令片段包括所述函数的回调函数的汇编指令、以所述函数为回调函数的调用函数的汇编指令,以及所述函数的汇编指令中的至少一种。
11.根据权利要求10所述的装置,其特征在于,所述汇编指令片段包括所述函数的所述回调函数的所述汇编指令,所述检测模块包括:
第一确定单元,用于根据所述回调函数的所述汇编指令确定所述回调函数的返回地址;
第一检测单元,用于检测所述返回地址是否属于所述应用程序的地址空间;
第二确定单元,用于若所述返回地址不属于所述地址空间,则确定所述函数满足所述预设条件。
12.根据权利要求11所述的装置,其特征在于,所述汇编指令片段还包括所述回调函数的所述返回地址所对应的汇编指令,所述检测模块,还包括:
第二检测单元,用于若所述返回地址属于所述地址空间,则检测所述返回地址对应的所述汇编指令的起始字段中是否包括跳转指令;
第三确定单元,用于若检测结果为包括所述跳转指令,则确定所述函数满足所述预设条件。
13.根据权利要求10所述的装置,其特征在于,所述汇编指令片段包括以所述函数为回调函数的所述调用函数的所述汇编指令;所述检测模块,包括:
第三检测单元,用于检测所述汇编文件中是否包括所述调用函数的所述汇编指令;
第四确定单元,用于若检测结果为包括所述调用函数的所述汇编指令,则确定所述函数满足所述预设条件。
14.根据权利要求10所述的装置,其特征在于,所述汇编指令片段包括所述函数的汇编指令,所述文件检测模块包括:
第四检测单元,用于检测所述函数的所述汇编指令的起始字段中是否包括跳转指令;
第五确定单元,用于若所述汇编指令的起始字段中包括所述跳转指令,则确定所述函数满足所述预设条件。
15.根据权利要求9至14任一所述的装置,其特征在于,所述装置还包括:
确定模块,用于确定所述函数的函数大小,所述函数大小是所述函数占用的字节大小;
函数大小检测模块,用于检测所述函数大小是否大于预定大小;
所述判定模块,还用于若所述函数大小小于所述预定大小,则判定所述函数不支持Hook行为。
16.根据权利要求15所述的装置,其特征在于,所述确定模块,包括:
获取单元,用于获取所述应用程序的程序数据库PDB文件;
第六确定单元,用于根据所述PDB文件确定所述函数的所述函数大小。
17.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一所述的基于可执行文件的函数判定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610920945.4A CN107967203B (zh) | 2016-10-20 | 2016-10-20 | 基于可执行文件的函数判定方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610920945.4A CN107967203B (zh) | 2016-10-20 | 2016-10-20 | 基于可执行文件的函数判定方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107967203A CN107967203A (zh) | 2018-04-27 |
CN107967203B true CN107967203B (zh) | 2020-07-28 |
Family
ID=61997309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610920945.4A Active CN107967203B (zh) | 2016-10-20 | 2016-10-20 | 基于可执行文件的函数判定方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107967203B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110516438B (zh) * | 2018-05-21 | 2023-11-07 | 深信服科技股份有限公司 | 一种可执行文件反汇编的方法、系统及相关组件 |
CN110688530B (zh) * | 2019-08-19 | 2022-04-26 | 天津开心生活科技有限公司 | 一种json数据的处理方法及装置 |
CN116483734B (zh) * | 2023-06-16 | 2024-03-19 | 荣耀终端有限公司 | 一种基于编译器的插桩方法、系统及相关电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102122330A (zh) * | 2011-01-24 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 基于虚拟机的“In-VM”恶意代码检测系统 |
CN102890641A (zh) * | 2012-08-30 | 2013-01-23 | 北京奇虎科技有限公司 | 一种进程行为控制的方法和装置 |
CN103559450A (zh) * | 2013-10-11 | 2014-02-05 | 南京邮电大学 | 一种基于内核驱动钩子技术的电子标签数据保护方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8127277B2 (en) * | 2007-05-21 | 2012-02-28 | International Business Machines Corporation | Framework for conditionally executing code in an application using conditions in the framework and in the application |
-
2016
- 2016-10-20 CN CN201610920945.4A patent/CN107967203B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102122330A (zh) * | 2011-01-24 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 基于虚拟机的“In-VM”恶意代码检测系统 |
CN102890641A (zh) * | 2012-08-30 | 2013-01-23 | 北京奇虎科技有限公司 | 一种进程行为控制的方法和装置 |
CN103559450A (zh) * | 2013-10-11 | 2014-02-05 | 南京邮电大学 | 一种基于内核驱动钩子技术的电子标签数据保护方法 |
Non-Patent Citations (1)
Title |
---|
《C++在Ring3下的通用API HOOK》;Anix;《https://www.cnblogs.com/AniX/archive/2010/10/26/1861693.html》;20101026;1-4 * |
Also Published As
Publication number | Publication date |
---|---|
CN107967203A (zh) | 2018-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857403B (zh) | 一种页面更新、页面处理方法及装置 | |
CN106708676B (zh) | 接口测试方法及装置 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN107329901B (zh) | 数据包抓取方法、终端、服务器和存储介质 | |
CN108536594B (zh) | 页面测试方法、装置及存储设备 | |
CN106775827B (zh) | 一种应用程序更新方法及装置、计算机设备 | |
CN106775828B (zh) | 应用程序安装方法及装置、计算机设备 | |
CN108595218B (zh) | 一种加载系统动态库的方法和装置 | |
CN108039963B (zh) | 一种容器配置方法、装置及存储介质 | |
CN106649126B (zh) | 一种对应用程序进行测试的方法和装置 | |
WO2015078342A1 (en) | Method for acquiring memory information, and terminal | |
CN108073495B (zh) | 应用程序崩溃原因的定位方法及装置 | |
CN109240902B (zh) | 一种获取电子设备的固件代码的方法和装置 | |
WO2014173211A1 (en) | Code coverage testing method, device and system | |
CN111723002A (zh) | 一种代码调试方法、装置、电子设备及存储介质 | |
CN105610878B (zh) | 目录上传方法、数据发布方法、终端及服务器 | |
EP2869604B1 (en) | Method, apparatus and device for processing a mobile terminal resource | |
CN107967203B (zh) | 基于可执行文件的函数判定方法及装置 | |
CN110046497B (zh) | 一种函数挂钩实现方法、装置和存储介质 | |
CN106919458B (zh) | Hook目标内核函数的方法及装置 | |
CN105278942B (zh) | 组件管理方法及装置 | |
US9928134B2 (en) | Method and apparatus for repairing dynamic link library file | |
CN110198324B (zh) | 数据监控方法、装置、浏览器及终端 | |
CN108874653B (zh) | 任务测试方法、测试机、共享服务器和可读存储介质 | |
CN106709330B (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 |