CN106919458A - Hook目标内核函数的方法及装置 - Google Patents
Hook目标内核函数的方法及装置 Download PDFInfo
- Publication number
- CN106919458A CN106919458A CN201510991253.4A CN201510991253A CN106919458A CN 106919458 A CN106919458 A CN 106919458A CN 201510991253 A CN201510991253 A CN 201510991253A CN 106919458 A CN106919458 A CN 106919458A
- Authority
- CN
- China
- Prior art keywords
- function
- address
- specified function
- specified
- kernel
- 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
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephone Function (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功能的范围,提高了灵活性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种Hook目标内核函数的方法的流程图;
图2是本发明实施例提供的一种Hook目标内核函数的方法的流程图;
图3是本发明实施例提供的一种运行过程示意图;
图4是本发明实施例提供的一种运行过程示意图;
图5是本发明实施例提供的一种运行过程示意图;
图6是本发明实施例提供的一种Hook目标内核函数的装置结构示意图;
图7是本发明实施例提供的一种终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的一种Hook目标内核函数的方法的流程图。参见图1,该方法包括:
101、根据目标内核函数对应的第一系统调用号调用框架文件时,跳转至第一指定函数。
102、在第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,并根据第二系统调用号进行调用,跳转至该入口函数。
103、在该入口函数的运行过程中,将该系统调用表中目标内核函数的地址修改为第二指定函数的起始地址,使得根据该目标内核函数对应的第一系统调用号进行调用时运行该第二指定函数。
其中,该框架文件由第一指定函数、入口函数和第二指定函数封装得到,该框架文件用于Hook该目标内核函数;该目标内核函数位于内核空间,第一指定函数和入口函数位于用户空间,该系统调用表位于内核空间;该系统调用表包括系统调用号、函数与函数地址之间的对应关系。
本发明实施例提供的方法,通过根据目标内核函数对应的第一系统调用号调用框架文件,能够运行用户空间中的第一指定函数,将内核空间中的系统调用表中第二系统调用号对应的地址修改为入口函数的地址,从而保证入口函数具有访问内核空间的权限,并跳转至入口函数,在运行入口函数的过程中将系统调用表中目标内核函数的地址修改为第二指定函数的起始地址,从而能够在要调用内核空间中的目标内核函数时跳转至运行第二指定函数,实现了利用第二指定函数Hook目标内核函数的目的,扩展了Hook功能的范围,提高了灵活性。
可选地,该入口函数的运行过程包括:
在该内核空间中分配内存;
在分配的内存中存储该第二指定函数,并将该内存的起始地址作为该第二指定函数的起始地址;
将该系统调用表中该目标内核函数的地址修改为该第二指定函数的起始地址,使得根据该目标内核函数对应的第一系统调用号进行调用时运行该第二指定函数。
可选地,该在分配的内存中存储该第二指定函数,包括:
该在分配的内存中存储该第二指定函数,包括:
在分配的内存中,存储该第二指定函数所需的参数、该第二指定函数所需的内核函数地址以及该第二指定函数。
可选地,该入口函数的运行过程还包括:
在将该系统调用表中该目标内核函数的地址修改为该第二指定函数的起始地址之后,将该系统调用表中该第二系统调用号对应的地址还原为原始地址。
可选地,该在该第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,包括:
在该第一指定函数的运行过程中,获取该系统调用表的地址,并利用该内核空间的漏洞,根据该系统调用表的地址,将该系统调用表中该第二系统调用号对应的地址修改为该入口函数的地址。
可选地,该在该入口函数的运行过程中,将该系统调用表中目标内核函数的地址修改为第二指定函数的起始地址之后,该方法还包括:
当任一函数根据该第一系统调用号进行调用时,根据该系统调用表中该第一系统调用号对应的地址,运行该第二指定函数。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
图2是本发明实施例提供的一种Hook目标内核函数的方法的流程图。参见图2,该方法包括:
201、根据目标内核函数对应的第一系统调用号调用框架文件时,跳转至第一指定函数。
本发明实施例可以应用于计算机或者手机等终端中,该终端的操作系统可以为安卓系统或者其他系统,本发明实施例对此不做限定。该终端的操作系统包括用户空间和内核空间,用户空间是进程独立的,相互之间不可访问,而内核空间是进程共享的,操作系统中只有一份内核空间。
其中,该框架文件由第一指定函数、入口函数和第二指定函数封装得到,且该框架文件用于Hook内核函数,可以包括接口文件interFace.h和库文件librace.a等,本实施例对此不做限定。
那么,在技术人员的开发过程中,该终端可以为技术人员提供框架文件,技术人员要Hook目标内核函数时,可以输入调用该框架文件的指令,该指令携带目标内核函数对应的第一系统调用号,则该终端根据目标内核函数对应的第一系统调用号调用框架文件,此时即跳转至第一指定函数,第一指定函数开始运行。
其中,该第一指定函数和该入口函数位于用户空间,该目标内核函数位于内核空间,该目标内核函数可以由技术人员根据需求确定,可以为内核空间中的任一内核函数,本实施例对此不做限定。
202、在第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,并根据该第二系统调用号进行调用,从而跳转至该入口函数。
其中,该系统调用表位于内核空间,且该系统调用表包括系统调用号、函数与函数地址之间的对应关系,其中的函数地址是指函数的入口地址,当根据系统调用号进行调用时,会根据该系统调用号对应的函数地址进行跳转,开始运行该系统调用号对应的函数。
例如,该系统调用表sys_call_table可以如下表1所示,当根据系统调用号20进行调用时,会根据函数地址0xE0112214,运行Sys_getpid函数。
表1
系统调用号 | 函数 | 函数地址 |
20 | Sys_getpid | 0xE0112214 |
333 | Sys_fchmodat | 0xE011228c |
通常情况下,该系统调用表中的函数为位于内核空间的内核函数,用户空间的函数并不能Hook系统调用表中的内核函数。
而在本发明实施例中,为了实现在用户空间Hook内核空间中的目标内核函数,可以先运行用户空间中的第一指定函数。在第一指定函数的运行过程中,获取位于内核空间的系统调用表的地址,并利用内核空间的漏洞,根据该系统调用表的地址,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,该入口函数位于用户空间。
具体地,第一指定函数可以采用EXP(导出数据库)命令,利用操作系统的futex漏洞或者put user漏洞等,改写该系统调用表中系统调用号对应的函数地址,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址。修改地址之后,第一指定函数可以对第二系统调用号执行系统调用指令,根据该第二系统调用号进行调用,由于此时该系统调用表中存储的该第二系统调用号对应的地址为该入口函数的地址,则根据该第二系统调用号进行调用时会由第一指定函数跳转至入口函数,并运行入口函数,相当于该入口函数就具备了访问内核空间的权限。
其中,该第二系统调用号可以随机确定,或者由第一指定函数默认确定,入口函数以及入口函数的地址也可以由终端预先确定,本发明实施例对此不做限定。
基于表1的举例,参见图3,该第一指定函数的运行过程可以如下:
kHookFunction(){
1、获取sys_call_table地址
2、利用EXP改写sys_call_table中的地址
3、syscall(333);}
第一指定函数在运行过程中将系统调用表sys_call_table中的系统调用号333对应的地址由0xE011228c修改为入口函数的地址0x1011228c,如下表2所示。执行syscall(333)指令进行调用时,就会由第一指定函数跳转至入口函数,开始运行入口函数。
表2
系统调用号 | 函数 | 函数地址 |
20 | Sys_getpid | 0xE0112214 |
333 | Sys_fchmodat | 0x1011228c |
203、在该入口函数的运行过程中,将该系统调用表中目标内核函数的地址修改为第二指定函数的起始地址。
其中,该第二指定函数是指要Hook目标内核函数的函数,位于内核空间中,可以包括至少一个代码段,且该第二指定函数可以为二进制代码段,具体可以由技术人员在开发时设置,本实施例对该第二指定函数的具体内容不做限定。
为了便于利用第二指定函数Hook内核空间中的目标内核函数,在该入口函数的运行过程中,可以获取该系统调用表的地址,在该内核空间中分配内存,在分配的内存中存储该第二指定函数,并获取该第二指定函数的起始地址,根据该系统调用表的地址,将该系统调用表中存储的该目标内核函数的地址修改为该第二指定函数的起始地址,那么,当后续根据该目标内核函数对应的第一系统调用号进行调用时,不会运行该目标内核函数,而是会根据该第二指定函数的起始地址,运行该第二指定函数。
其中,实现内存的分配和第二指定函数的存储均需要调用系统函数,如vmalloc_exec函数等,则在该入口函数的运行过程中,在分配内存之前,可以先获取kallsyms_lookup_name函数的地址,根据kallsyms_lookup_name函数的地址,运行kallsyms_lookup_name函数,该kallsyms_lookup_name用于寻找系统函数的地址,通过运行kallsyms_lookup_name函数可以寻找到需要的系统函数,调用寻找的系统函数,从而实现内存的分配和第二指定函数的存储等过程。
另外,为了降低运行的计算量,可以将第二指定函数与第二指定函数运行时所需的字符串等参数分开存储,将运行时所需的参数也存储于内核空间中,以参数的形式传递给第二指定函数,而且,由于第二指定函数在用户空间中编译,编译过程中不可调用内核空间的函数,但第二指定函数需要在内核空间中运行,在运行过程中又不可调用用户空间的函数,因此,在第二指定函数运行之前可以将内核函数的地址存储于内核空间中,在运行过程中即可采用寻址的方式,将第二指定函数运行时所需的内核函数的地址传递给该第二指定函数。
因此,在入口函数的运行过程中,在分配内存之后,可以在该内存中存储该第二指定函数所需的参数、该第二指定函数所需的内核函数地址以及该第二指定函数。
进一步地,可以先存储该第二指定函数所需的参数,在该第二指定函数所需的参数之后,存储该第二指定函数所需的内核函数地址,在该第二指定函数所需的内核函数地址之后,存储该第二指定函数。
基于表1和表2的举例,参见图4,第一指定函数执行syscall(333)指令进行调用时,入口函数k_sys_entry开始运行,运行过程中在内核空间分配如图4所示的内存,即在内核空间中分配4k的内存,其中最前面的256字节用于存储第二指定函数shellcode函数所需要的参数,中间的768字节用于存储shellcode函数所需要的内核函数地址,最后的3k字节用于存储shellcode函数本身。之后,将系统调用表sys_call_table中的系统调用号20对应的地址由目标内核函数Sys_getpid的地址0xE0112214修改为shellcode的起始地址0xE0114444。入口函数的运行过程可以如下:
k_sys_entry(){
1、获取sys_call_table地址
2、获取kallsyms_lookup_name地址
3、寻找系统函数,vmaloc_exec……
4、在内核空间中分配内存
5、拼接shellcode
6、将shellcode与目标系统调用号关联
7、还原kHookFunction占用的系统调用号}
另外,将该系统调用表中存储的该目标内核函数的地址修改为该第二指定函数的起始地址之后,该入口函数即可将该系统调用表中该第二系统调用号对应的地址还原为原始地址,即还未修改系统调用表时该系统调用表中该第二系统调用号所对应的内核函数地址。
204、当任一函数根据该第一系统调用号进行调用时,根据该系统调用表中该第一系统调用号对应的、该第二指定函数的起始地址,运行该第二指定函数。
入口函数运行完成后,该系统调用表中该第一系统调用号对应的地址为该第二指定函数的起始地址,则当任一函数根据该第一系统调用号进行调用时,会根据该系统调用表中存储的该第一系统调用号对应的地址运行,即会运行该第二指定函数,而不是运行该目标内核函数,从而实现了Hook该目标内核函数。
参见图5,当myFunction函数要调用getpid函数时,会根据系统调用表中的系统调用号20对应的函数地址0xE0114444进行调用,也即是myFunction函数会跳转至第二指定函数,开始运行该第二指定函数。
在运行第二指定函数的过程中,会执行该第二指定函数中的指令,此时需要根据第二指定函数中的指令来确定后续是否要运行该目标内核函数。优选地,为了保证程序的健壮性,第二指定函数可以包括回调至目标内核函数的指令,使得在第二指定函数运行过程中可以回调至该目标内核函数。
基于上述步骤中的举例,第二指定函数可以包括“jump 0xE0112244”指令,当执行到该指令时,会跳转至目标内核函数的地址0xE0112244,开始运行目标内核函数。
系统调用是用户空间进入内核空间的唯一入口,可以把应用程序的请求传给内核空间,调用相应的内核函数完成所需的处理后,将处理结果返回给应用程序。本发明实施例利用了系统调用的功能,在操作系统漏洞的基础上进行。用户空间中的第一指定函数利用漏洞对内核空间的系统调用表进行修改,将系统调用表中某个系统调用号指向新分配的内存,在新分配的内存中填充编辑好的第二指定函数,从而通过系统调用达到了劫持系统调用的目的,实现了利用第二指定函数Hook目标内核函数。
本发明实施例提供的方法,通过将第一指定函数、入口函数和第二指定函数封装得到框架文件,在技术人员的开发过程中为技术人员提供框架文件,当技术人员要Hook目标内核函数时,可以根据目标内核函数对应的第一系统调用号调用该框架文件时,运行用户空间中的第一指定函数,将内核空间中的系统调用表中第二系统调用号对应的地址修改为入口函数的地址,从而保证入口函数具有访问内核空间的权限,并跳转至入口函数,在运行入口函数的过程中将系统调用表中目标内核函数的地址修改为第二指定函数的起始地址,从而能够在要调用内核空间中的目标内核函数时跳转至运行第二指定函数,实现了利用第二指定函数Hook目标内核函数的目的,扩展了Hook功能的范围,提高了灵活性。对于技术人员来说,在开发过程中无需关注框架的底层如何实现,只需掌握如何使用框架即可完成对内核空间的Hook需求,操作非常简便。
图6是本发明实施例提供的一种Hook目标内核函数的装置结构示意图,参见图6,该装置包括:
文件调用模块601,用于根据目标内核函数对应的第一系统调用号调用框架文件时,跳转至第一指定函数,该框架文件由该第一指定函数、入口函数和第二指定函数封装得到,该框架文件用于Hook该目标内核函数,该目标内核函数位于内核空间,该第一指定函数和该入口函数位于用户空间;
第一运行模块602,用于在第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,并根据该第二系统调用号进行调用,跳转至该入口函数,该系统调用表位于内核空间,且该系统调用表包括系统调用号、函数与函数地址之间的对应关系;
第二运行模块603,用于在该入口函数的运行过程中,将该系统调用表中目标内核函数的地址修改为第二指定函数的起始地址,使得根据该目标内核函数对应的第一系统调用号进行调用时运行该第二指定函数,该目标内核函数位于该内核空间。
本发明实施例提供的装置,通过根据目标内核函数对应的第一系统调用号调用框架文件,能够运行用户空间中的第一指定函数,将内核空间中的系统调用表中第二系统调用号对应的地址修改为入口函数的地址,从而保证入口函数具有访问内核空间的权限,并跳转至入口函数,在运行入口函数的过程中将系统调用表中目标内核函数的地址修改为第二指定函数的起始地址,从而能够在要调用内核空间中的目标内核函数时跳转至运行第二指定函数,实现了利用第二指定函数Hook目标内核函数的目的,扩展了Hook功能的范围,提高了灵活性。
可选地,该第二运行模块603还包括:
分配单元,用于在该内核空间中分配内存;
存储单元,用于在分配的内存中存储该第二指定函数,并将该内存的起始地址作为该第二指定函数的起始地址;
修改地址单元,用于将该系统调用表中该目标内核函数的地址修改为该第二指定函数的起始地址,使得根据该目标内核函数对应的第一系统调用号进行调用时运行该第二指定函数。
可选地,该存储单元用于在分配的内存中,存储该第二指定函数所需的参数、该第二指定函数所需的内核函数地址以及该第二指定函数。
可选地,该第二运行模块603还包括:
还原单元,用于在将该系统调用表中该目标内核函数的地址修改为该第二指定函数的起始地址之后,将该系统调用表中该第二系统调用号对应的地址还原为原始地址。
可选地,该第一运行模块602还用于在该第一指定函数的运行过程中,获取该系统调用表的地址,并利用该内核空间的漏洞,根据该系统调用表的地址,将该系统调用表中该第二系统调用号对应的地址修改为该入口函数的地址。
可选地,该装置还包括:
第三运行模块,用于当任一函数根据该第一系统调用号进行调用时,根据该系统调用表中该第一系统调用号对应的地址,运行该第二指定函数。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的Hook目标内核函数的装置在Hook目标内核函数时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的Hook目标内核函数的装置与Hook目标内核函数的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图7是本发明实施例提供的一种终端的结构示意图。该终端可以用于实施上述实施例所示出的Hook目标内核函数的方法中终端所执行的功能。具体来讲:
终端700可以包括RF(Radio Frequency,射频)电路110、包括有一个或一个以上计算机可读存储介质的存储器120、输入单元130、显示单元140、传感器150、音频电路160、传输模块170、包括有一个或者一个以上处理核心的处理器180、以及电源190等部件。本领域技术人员可以理解,图7中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路110可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器180处理;另外,将涉及上行的数据发送给基站。通常,RF电路110包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路110还可以通过无线通信与网络和其他终端通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband CodeDivision Multiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器120可用于存储软件程序以及模块,如上述示例性实施例所示出的终端所对应的软件程序以及模块,处理器180通过运行存储在存储器120的软件程序以及模块,从而执行各种功能应用以及数据处理,如实现基于视频的交互等。存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端700的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器120还可以包括存储器控制器,以提供处理器180和输入单元130对存储器120的访问。
输入单元130可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元130可包括触敏表面131以及其他输入终端132。触敏表面131,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面131上或在触敏表面131附近的操作),并根据预先设定的程式驱动相应的链接装置。可选的,触敏表面131可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器180,并能接收处理器180发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面131。除了触敏表面131,输入单元130还可以包括其他输入终端132。具体地,其他输入终端132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元140可用于显示由用户输入的信息或提供给用户的信息以及终端700的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元140可包括显示面板141,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板141。进一步的,触敏表面131可覆盖显示面板141,当触敏表面131检测到在其上或附近的触摸操作后,传送给处理器180以确定触摸事件的类型,随后处理器180根据触摸事件的类型在显示面板141上提供相应的视觉输出。虽然在图7中,触敏表面131与显示面板141是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面131与显示面板141集成而实现输入和输出功能。
终端700还可包括至少一种传感器150,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板141的亮度,接近传感器可在终端700移动到耳边时,关闭显示面板141和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端700还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路160、扬声器161,传声器162可提供用户与终端700之间的音频接口。音频电路160可将接收到的音频数据转换后的电信号,传输到扬声器161,由扬声器161转换为声音信号输出;另一方面,传声器162将收集的声音信号转换为电信号,由音频电路160接收后转换为音频数据,再将音频数据输出处理器180处理后,经RF电路110以发送给比如另一终端,或者将音频数据输出至存储器120以便进一步处理。音频电路160还可能包括耳塞插孔,以提供外设耳机与终端700的通信。
终端700通过传输模块170可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线或有线的宽带互联网访问。虽然图7示出了传输模块170,但是可以理解的是,其并不属于终端700的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器180是终端700的控制中心,利用各种接口和线路链接整个手机的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模块,以及调用存储在存储器120内的数据,执行终端700的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器180可包括一个或多个处理核心;优选的,处理器180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器180中。
终端700还包括给各个部件供电的电源190(比如电池),优选的,电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源190还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端700还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本发明实施例中,终端的显示单元是触摸屏显示器,终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行上述一个或者一个以上程序包含用于实施上述实施例中终端所执行操作的指令。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种Hook目标内核函数的方法,其特征在于,所述方法包括:
根据目标内核函数对应的第一系统调用号调用框架文件时,跳转至第一指定函数,所述框架文件由所述第一指定函数、入口函数和第二指定函数封装得到,所述框架文件用于Hook所述目标内核函数,所述目标内核函数位于内核空间,所述第一指定函数和所述入口函数位于用户空间;
在所述第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为所述入口函数的地址,并根据所述第二系统调用号进行调用,跳转至所述入口函数,所述系统调用表位于所述内核空间,且所述系统调用表包括系统调用号、函数与函数地址之间的对应关系;
在所述入口函数的运行过程中,将所述系统调用表中所述第一系统调用号对应的地址修改为所述第二指定函数的起始地址,使得根据所述第一系统调用号进行调用时运行所述第二指定函数。
2.根据权利要求1所述的方法,其特征在于,所述入口函数的运行过程包括:
在所述内核空间中分配内存;
在分配的内存中存储所述第二指定函数;
将所述系统调用表中所述目标内核函数的地址修改为所述第二指定函数的起始地址,使得根据所述目标内核函数对应的第一系统调用号进行调用时运行所述第二指定函数。
3.根据权利要求2所述的方法,其特征在于,所述在分配的内存中存储所述第二指定函数,包括:
在分配的内存中,存储所述第二指定函数所需的参数、所述第二指定函数所需的内核函数地址以及所述第二指定函数。
4.根据权利要求2所述的方法,其特征在于,所述入口函数的运行过程还包括:
在将所述系统调用表中所述目标内核函数的地址修改为所述第二指定函数的起始地址之后,将所述系统调用表中所述第二系统调用号对应的地址还原为原始地址。
5.根据权利要求1所述的方法,其特征在于,所述在所述第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为入口函数的地址,包括:
在所述第一指定函数的运行过程中,获取所述系统调用表的地址,并利用所述内核空间的漏洞,根据所述系统调用表的地址,将所述系统调用表中所述第二系统调用号对应的地址修改为所述入口函数的地址。
6.根据权利要求1所述的方法,其特征在于,所述在所述入口函数的运行过程中,将所述系统调用表中目标内核函数的地址修改为第二指定函数的起始地址之后,所述方法还包括:
当任一函数根据所述第一系统调用号进行调用时,根据所述系统调用表中所述第一系统调用号对应的地址,运行所述第二指定函数。
7.一种Hook目标内核函数的装置,其特征在于,所述装置包括:
文件调用模块,用于根据目标内核函数对应的第一系统调用号调用框架文件时,跳转至第一指定函数,所述框架文件由所述第一指定函数、入口函数和第二指定函数封装得到,所述框架文件用于Hook所述目标内核函数,所述目标内核函数位于内核空间,所述第一指定函数和所述入口函数位于用户空间;
第一运行模块,用于在所述第一指定函数的运行过程中,将系统调用表中第二系统调用号对应的地址修改为所述入口函数的地址,并根据所述第二系统调用号进行调用,跳转至所述入口函数,所述系统调用表位于所述内核空间,且所述系统调用表包括系统调用号、函数与函数地址之间的对应关系;
第二运行模块,用于在所述入口函数的运行过程中,将所述系统调用表中所述第一系统调用号对应的地址修改为所述第二指定函数的起始地址,使得根据所述第一系统调用号进行调用时运行所述第二指定函数。
8.根据权利要求7所述的装置,其特征在于,所述第二运行模块还包括:
分配单元,用于在所述内核空间中分配内存;
存储单元,用于在分配的内存中存储所述第二指定函数;
修改地址单元,用于将所述系统调用表中所述目标内核函数的地址修改为所述第二指定函数的起始地址,使得根据所述目标内核函数对应的第一系统调用号进行调用时运行所述第二指定函数。
9.根据权利要求8所述的装置,其特征在于,所述存储单元用于在分配的内存中,存储所述第二指定函数所需的参数、所述第二指定函数所需的内核函数地址以及所述第二指定函数。
10.根据权利要求8所述的装置,其特征在于,所述第二运行模块还包括:
还原单元,用于在将所述系统调用表中所述目标内核函数的地址修改为所述第二指定函数的起始地址之后,将所述系统调用表中所述第二系统调用号对应的地址还原为原始地址。
11.根据权利要求7所述的装置,其特征在于,所述第一运行模块还用于在所述第一指定函数的运行过程中,获取所述系统调用表的地址,并利用所述内核空间的漏洞,根据所述系统调用表的地址,将所述系统调用表中所述第二系统调用号对应的地址修改为所述入口函数的地址。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第三运行模块,用于当任一函数根据所述第一系统调用号进行调用时,根据所述系统调用表中所述第一系统调用号对应的地址,运行所述第二指定函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510991253.4A CN106919458B (zh) | 2015-12-25 | 2015-12-25 | Hook目标内核函数的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510991253.4A CN106919458B (zh) | 2015-12-25 | 2015-12-25 | Hook目标内核函数的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106919458A true CN106919458A (zh) | 2017-07-04 |
CN106919458B CN106919458B (zh) | 2020-09-01 |
Family
ID=59459194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510991253.4A Active CN106919458B (zh) | 2015-12-25 | 2015-12-25 | Hook目标内核函数的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106919458B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110046497A (zh) * | 2018-01-16 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 一种函数挂钩实现方法、装置和存储介质 |
CN110737637A (zh) * | 2019-09-26 | 2020-01-31 | 北京字节跳动网络技术有限公司 | 功能扩展方法、装置、电子设备及计算机可读存储介质 |
CN111919198A (zh) * | 2018-04-06 | 2020-11-10 | 北京嘀嘀无限科技发展有限公司 | 内核函数回调的方法和系统 |
CN113590360A (zh) * | 2021-08-03 | 2021-11-02 | 北京博睿宏远数据科技股份有限公司 | 一种实现函数hook的方法、装置、计算机设备及存储介质 |
CN113821439A (zh) * | 2021-09-23 | 2021-12-21 | 成都欧珀通信科技有限公司 | 将函数注册到探测点的方法、装置、存储介质以及终端 |
CN115952491A (zh) * | 2022-12-30 | 2023-04-11 | 北京基调网络股份有限公司 | hook目标函数的方法、装置、电子设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7296138B1 (en) * | 2005-03-08 | 2007-11-13 | Symantec Corporation | Method and apparatus to hook shared libraries across all processes on windows |
CN101620660A (zh) * | 2009-07-31 | 2010-01-06 | 北京大学 | 一种Windows操作系统下钩子的防御方法 |
CN103559450A (zh) * | 2013-10-11 | 2014-02-05 | 南京邮电大学 | 一种基于内核驱动钩子技术的电子标签数据保护方法 |
CN103632099A (zh) * | 2013-09-29 | 2014-03-12 | 广州华多网络科技有限公司 | 未导出的Native API函数获取方法及装置 |
CN104008337A (zh) * | 2014-05-07 | 2014-08-27 | 广州华多网络科技有限公司 | 一种基于Linux系统的主动防御方法及装置 |
-
2015
- 2015-12-25 CN CN201510991253.4A patent/CN106919458B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7296138B1 (en) * | 2005-03-08 | 2007-11-13 | Symantec Corporation | Method and apparatus to hook shared libraries across all processes on windows |
CN101620660A (zh) * | 2009-07-31 | 2010-01-06 | 北京大学 | 一种Windows操作系统下钩子的防御方法 |
CN103632099A (zh) * | 2013-09-29 | 2014-03-12 | 广州华多网络科技有限公司 | 未导出的Native API函数获取方法及装置 |
CN103559450A (zh) * | 2013-10-11 | 2014-02-05 | 南京邮电大学 | 一种基于内核驱动钩子技术的电子标签数据保护方法 |
CN104008337A (zh) * | 2014-05-07 | 2014-08-27 | 广州华多网络科技有限公司 | 一种基于Linux系统的主动防御方法及装置 |
Non-Patent Citations (4)
Title |
---|
KL222: "内核级HOOK的几种实现与应用", 《HTTPS://BLOG.CSDN.NET/KL222/ARTICLE/DETAILS/1658910》 * |
LITTLE HAN: "Linux System Calls Hooking Method Summary", 《HTTP://WEB.ARCHIVE.ORG/WEB/20150914070609/HTTP://WWW.CNBLOGS.COM:80/LITTLEHANN/P/3854977.HTML》 * |
LUCIEN: "高级Linux kernel inline hook技术", 《HTTPS://BLOG.CSDN.NET/LUCIEN_CC/ARTICLE/DETAILS/7544834》 * |
李珂泂等: "恶意脚本程序研究以及基于API HOOK的注册表监控技术", 《计算机应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110046497A (zh) * | 2018-01-16 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 一种函数挂钩实现方法、装置和存储介质 |
CN111919198A (zh) * | 2018-04-06 | 2020-11-10 | 北京嘀嘀无限科技发展有限公司 | 内核函数回调的方法和系统 |
CN111919198B (zh) * | 2018-04-06 | 2024-05-03 | 北京嘀嘀无限科技发展有限公司 | 内核函数回调的方法和系统 |
CN110737637A (zh) * | 2019-09-26 | 2020-01-31 | 北京字节跳动网络技术有限公司 | 功能扩展方法、装置、电子设备及计算机可读存储介质 |
CN110737637B (zh) * | 2019-09-26 | 2022-12-16 | 抖音视界有限公司 | 功能扩展方法、装置、电子设备及计算机可读存储介质 |
CN113590360A (zh) * | 2021-08-03 | 2021-11-02 | 北京博睿宏远数据科技股份有限公司 | 一种实现函数hook的方法、装置、计算机设备及存储介质 |
CN113821439A (zh) * | 2021-09-23 | 2021-12-21 | 成都欧珀通信科技有限公司 | 将函数注册到探测点的方法、装置、存储介质以及终端 |
CN115952491A (zh) * | 2022-12-30 | 2023-04-11 | 北京基调网络股份有限公司 | hook目标函数的方法、装置、电子设备及介质 |
CN115952491B (zh) * | 2022-12-30 | 2023-09-29 | 北京基调网络股份有限公司 | hook目标函数的方法、装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106919458B (zh) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106919458A (zh) | Hook目标内核函数的方法及装置 | |
CN104639672B (zh) | 进行域名解析的方法和装置 | |
EP3937016A1 (en) | Memory management method and apparatus | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN103631625B (zh) | 一种数据获取的方法、用户端、服务器及系统 | |
CN104598262A (zh) | 一种移动应用更新方法及装置 | |
CN106598584A (zh) | 一种处理资源文件的方法、装置和系统 | |
CN108920220B (zh) | 一种函数调用的方法、装置及终端 | |
CN104699501B (zh) | 一种运行应用程序的方法及装置 | |
CN106658354B (zh) | 一种数据传输方法及设备 | |
CN110046497A (zh) | 一种函数挂钩实现方法、装置和存储介质 | |
CN106713608A (zh) | 应用的功能状态修改方法、装置及终端 | |
CN104253870B (zh) | 控制数据访问周期的方法和装置 | |
CN106775828A (zh) | 应用程序安装方法及装置、计算机设备 | |
CN106155717A (zh) | 一种将sdk集成到第三方apk的方法和装置 | |
CN107219951A (zh) | 触控屏控制方法、装置、存储介质及终端设备 | |
CN106953898A (zh) | 一种获取软件包的方法和装置 | |
CN106959859A (zh) | 系统调用函数的调用方法与装置 | |
CN111966491A (zh) | 统计占用内存的方法及终端设备 | |
CN109429229A (zh) | 获取网络接入信息的方法、装置及计算机可读存储介质 | |
CN107025574A (zh) | 推广信息的展示方法及装置 | |
CN104636455B (zh) | 应用程序映射信息的获取方法及装置 | |
CN106681884A (zh) | 一种系统调用的监控方法和装置 | |
CN104978237B (zh) | 修复动态链接库文件的方法和装置 | |
CN107122036A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230925 Address after: 100191 Beijing Haidian District Zhichun Road 49 No. 3 West 309 Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 2, 518000, East 403 room, SEG science and Technology Park, Zhenxing Road, Shenzhen, Guangdong, Futian District Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |
|
TR01 | Transfer of patent right |