CN112181540A - 一种在Linux应用层上实现hook的方法与系统 - Google Patents
一种在Linux应用层上实现hook的方法与系统 Download PDFInfo
- Publication number
- CN112181540A CN112181540A CN202011040244.4A CN202011040244A CN112181540A CN 112181540 A CN112181540 A CN 112181540A CN 202011040244 A CN202011040244 A CN 202011040244A CN 112181540 A CN112181540 A CN 112181540A
- Authority
- CN
- China
- Prior art keywords
- target process
- ptrace
- call
- target
- subcommand
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 161
- 230000008569 process Effects 0.000 claims abstract description 144
- 230000006870 function Effects 0.000 claims description 35
- 238000012544 monitoring process Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 239000000725 suspension Substances 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种在Linux应用层上实现hook的方法与系统,本发明通过PTRACE_ATTACH子命令设置目标进程的ptrace函数调用,并通过PTRACE_SYSCALL子命令设置目标进程的所有系统调用,当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行进程,重复执行完成跟踪目标进程的所有系统调用,从而实现对目标进程进行监控,本发明不依赖于特定的内核版本,适配方便,便于移植,且只对目标进程产生影响,不会影响其他无关进程,安全性高。
Description
技术领域
本发明涉及进程跟踪技术领域,特别是涉及一种在Linux应用层上实现hook的方法与系统。
背景技术
进程是一个具有一定功能的程序执行的一次过程,每一个进程都有自己的独立内存空间,在Linux上进程信息是一个很重要的信息,很多地方都需要获取,例如系统安全监控、系统资源监控等。在Linux系统上,实现进程行为跟踪,对系统api进行hook,大致有应用层hook和内核层hook两种途径。由于内核层hook需要一定的内核编码经验,门槛略高,实现一种便捷的应用层的hook框架,将有助于改善这一现状。
发明内容
本发明的目的是提供一种在Linux应用层上实现hook的方法与系统,旨在解决现有技术中内核层hook难度大的问题,实现应用层上hook,且只对目标进程产生影响,提高安全性。
为达到上述技术目的,本发明提供了一种在Linux应用层上实现hook的方法,所述方法包括以下操作:
轮询当前的运行进程,匹配被hook的目标进程;
设置目标进程的ptrace函数调用,等待进程中断;
设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
优选地,所述目标进程的ptrace函数调用通过PTRACE_ATTACH子命令执行;所述目标进程的所有系统调用通过PTRACE_SYSCALL子命令执行。
优选地,所述相关信息包括系统调用传递的参数以及内存数据。
本发明还提供了一种在Linux应用层上实现hook的系统,所述系统包括:
进程匹配模块,用于轮询当前的运行进程,匹配被hook的目标进程;
ptrace调用模块,用于设置目标进程的ptrace函数调用,等待进程中断;
系统调用模块,用于设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
跟踪模块,用于当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
优选地,所述目标进程的ptrace函数调用通过PTRACE_ATTACH子命令执行;所述目标进程的所有系统调用通过PTRACE_SYSCALL子命令执行。
优选地,所述相关信息包括系统调用传递的参数以及内存数据。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
与现有技术相比,本发明通过PTRACE_ATTACH子命令设置目标进程的ptrace函数调用,并通过PTRACE_SYSCALL子命令设置目标进程的所有系统调用,当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行进程,重复执行完成跟踪目标进程的所有系统调用,从而实现对目标进程进行监控,本发明不依赖于特定的内核版本,适配方便,便于移植,且只对目标进程产生影响,不会影响其他无关进程,安全性高。
附图说明
图1为本发明实施例中所提供的一种在Linux应用层上实现hook的方法流程图;
图2为本发明实施例中所提供的一种在Linux应用层上实现hook的系统框图。
具体实施方式
为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
下面结合附图对本发明实施例所提供的一种在Linux应用层上实现hook的方法与系统进行详细说明。
如图1所示,本发明实施例公开了一种在Linux应用层上实现hook的方法,所述方法包括以下操作:
轮询当前的运行进程,匹配被hook的目标进程;
设置目标进程的ptrace函数调用,等待进程中断;
设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
本发明实施例通过ptrace函数对进程进行跟踪,ptrace函数通过利用父进程控制子进程运行,从而实现断点调试。在一个被跟踪的进程运行中,直到发生一个信号,则进程被中止,并且通知其父进程。在进程中止的状态下,进程的内存空间可以被读写,父进程还可以使子进程继续执行,并选择是否是否忽略引起中止的信号。
轮询系统中当前的运行进程,并通过规则进行进程匹配,获取到被hook的进程pid,记为TRACEE。
将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_ATTACH子命令,该命令用于跟踪目标进程,被跟踪进程将成为当前进程的子进程,并进入中止状态,设置目标进程的ptrace调用,开始执行。
调用waitpid函数,等待进程中断。
将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_SYSCALL子命令,该命令用于继续执行被中止的进程,当被跟踪进程进行系统调用或者从系统调用中返回时,被跟踪进程将被中止,并通知调试进程,设置目标进程的所有系统调用,并都触发ptrace中断。
再次调用waitpid函数,等待目标进程执行系统调用时,触发中断。
当捕获到目标进程TRACEE的系统调用时,调用ptrace函数的PTRACE_GETREGS子命令,该命令用以读取寄存器值,从而读取系统调用传递的参数、内存数据等信息,或者调用ptrace函数的PTRACE_SETREGS子命令,该命令用以设置寄存器值,从而修改系统调用的参数、返回值以及内存数据等信息。在捕获到目标进程TRACEE的系统调用后,将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_CONT子命令,该命令用以继续执行目标进程TRACEE。
之后重复执行目标进程触发中断后的寄存器值读取以及目标进程TRACEE的继续执行,从而实现对目标进程TRACEE的所有系统调用的跟踪。
本发明实施例通过PTRACE_ATTACH子命令设置目标进程的ptrace函数调用,并通过PTRACE_SYSCALL子命令设置目标进程的所有系统调用,当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行进程,重复执行完成跟踪目标进程的所有系统调用,从而实现对目标进程进行监控,本发明不依赖于特定的内核版本,适配方便,便于移植,且只对目标进程产生影响,不会影响其他无关进程,安全性高。
如图2所示,本发明实施例还公开了一种在Linux应用层上实现hook的系统,所述系统包括:
进程匹配模块,用于轮询当前的运行进程,匹配被hook的目标进程;
ptrace调用模块,用于设置目标进程的ptrace函数调用,等待进程中断;
系统调用模块,用于设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
跟踪模块,用于当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
轮询系统中当前的运行进程,并通过规则进行进程匹配,获取到被hook的进程pid,记为TRACEE。
将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_ATTACH子命令,该命令用于跟踪目标进程,被跟踪进程将成为当前进程的子进程,并进入中止状态,设置目标进程的ptrace调用,开始执行。
调用waitpid函数,等待进程中断。
将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_SYSCALL子命令,该命令用于继续执行被中止的进程,当被跟踪进程进行系统调用或者从系统调用中返回时,被跟踪进程将被中止,并通知调试进程,设置目标进程的所有系统调用,并都触发ptrace中断。
再次调用waitpid函数,等待目标进程执行系统调用时,触发中断。
当捕获到目标进程TRACEE的系统调用时,调用ptrace函数的PTRACE_GETREGS子命令,该命令用以读取寄存器值,从而读取系统调用传递的参数、内存数据等信息,或者调用ptrace函数的PTRACE_SETREGS子命令,该命令用以设置寄存器值,从而修改系统调用的参数、返回值以及内存数据等信息。在捕获到目标进程TRACEE的系统调用后,将进程TRACEE作为参数,调用ptrace函数,ptrace函数中request参数选取PTRACE_CONT子命令,该命令用以继续执行目标进程TRACEE。
之后重复执行目标进程触发中断后的寄存器值读取以及目标进程TRACEE的继续执行,从而实现对目标进程TRACEE的所有系统调用的跟踪。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种在Linux应用层上实现hook的方法,其特征在于,所述方法包括以下操作:
轮询当前的运行进程,匹配被hook的目标进程;
设置目标进程的ptrace函数调用,等待进程中断;
设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
2.根据权利要求1所述的一种在Linux应用层上实现hook的方法,其特征在于,所述目标进程的ptrace函数调用通过PTRACE_ATTACH子命令执行;所述目标进程的所有系统调用通过PTRACE_SYSCALL子命令执行。
3.根据权利要求1所述的一种在Linux应用层上实现hook的方法,其特征在于,所述相关信息包括系统调用传递的参数以及内存数据。
4.一种在Linux应用层上实现hook的系统,其特征在于,所述系统包括:
进程匹配模块,用于轮询当前的运行进程,匹配被hook的目标进程;
ptrace调用模块,用于设置目标进程的ptrace函数调用,等待进程中断;
系统调用模块,用于设置目标进程的所有系统调用,等待目标进程执行系统调用时,触发中断;
跟踪模块,用于当捕获到目标进程的系统调用时,读取系统调用的相关信息,并继续运行目标进程,重复执行该操作,跟踪目标进程的所有系统调用。
5.根据权利要求4所述的一种在Linux应用层上实现hook的系统,其特征在于,所述目标进程的ptrace函数调用通过PTRACE_ATTACH子命令执行;所述目标进程的所有系统调用通过PTRACE_SYSCALL子命令执行。
6.根据权利要求4所述的一种在Linux应用层上实现hook的系统,其特征在于,所述相关信息包括系统调用传递的参数以及内存数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011040244.4A CN112181540A (zh) | 2020-09-28 | 2020-09-28 | 一种在Linux应用层上实现hook的方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011040244.4A CN112181540A (zh) | 2020-09-28 | 2020-09-28 | 一种在Linux应用层上实现hook的方法与系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112181540A true CN112181540A (zh) | 2021-01-05 |
Family
ID=73945210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011040244.4A Pending CN112181540A (zh) | 2020-09-28 | 2020-09-28 | 一种在Linux应用层上实现hook的方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181540A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117201072A (zh) * | 2023-07-31 | 2023-12-08 | 北京天融信网络安全技术有限公司 | 用户密码获取方法、装置、设备及存储介质 |
CN118194307A (zh) * | 2024-05-15 | 2024-06-14 | 浪潮云信息技术股份公司 | 一种提升信创操作系统安全性的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184372A (zh) * | 2011-05-27 | 2011-09-14 | 北京洋浦伟业科技发展有限公司 | 一种基于逆向沙箱的手机支付保护方法 |
CN104008337A (zh) * | 2014-05-07 | 2014-08-27 | 广州华多网络科技有限公司 | 一种基于Linux系统的主动防御方法及装置 |
US20180357068A1 (en) * | 2016-06-13 | 2018-12-13 | Dynatrace Llc | Method And System For Automated Agent Injection In Container Environments |
CN111273967A (zh) * | 2019-12-30 | 2020-06-12 | 上海上讯信息技术股份有限公司 | 适用于Android系统的远程钩子设置方法、装置及电子设备 |
-
2020
- 2020-09-28 CN CN202011040244.4A patent/CN112181540A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184372A (zh) * | 2011-05-27 | 2011-09-14 | 北京洋浦伟业科技发展有限公司 | 一种基于逆向沙箱的手机支付保护方法 |
CN104008337A (zh) * | 2014-05-07 | 2014-08-27 | 广州华多网络科技有限公司 | 一种基于Linux系统的主动防御方法及装置 |
US20180357068A1 (en) * | 2016-06-13 | 2018-12-13 | Dynatrace Llc | Method And System For Automated Agent Injection In Container Environments |
CN111273967A (zh) * | 2019-12-30 | 2020-06-12 | 上海上讯信息技术股份有限公司 | 适用于Android系统的远程钩子设置方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
鞠九滨等: "《机群计算》", 31 May 1999, 吉林大学出版社, pages: 56 - 57 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117201072A (zh) * | 2023-07-31 | 2023-12-08 | 北京天融信网络安全技术有限公司 | 用户密码获取方法、装置、设备及存储介质 |
CN117201072B (zh) * | 2023-07-31 | 2024-06-14 | 北京天融信网络安全技术有限公司 | 用户密码获取方法、装置、设备及存储介质 |
CN118194307A (zh) * | 2024-05-15 | 2024-06-14 | 浪潮云信息技术股份公司 | 一种提升信创操作系统安全性的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7992042B2 (en) | Debug support device, and program for directing computer to perform debugging method | |
KR101519845B1 (ko) | 안티디버깅 방법 | |
WO2019218458A1 (zh) | 一种应用程序测试方法、装置、移动终端及介质 | |
JP2016540268A (ja) | ウェイクロック使用を追跡する技術 | |
CN112181540A (zh) | 一种在Linux应用层上实现hook的方法与系统 | |
CN102761439B (zh) | Pon接入系统中基于看门狗的异常检测记录装置及方法 | |
EP2787444A2 (en) | Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method | |
CN104932972B (zh) | 一种反动态调试应用程序的方法及装置 | |
CN113010275B (zh) | 一种中断处理方法和装置 | |
KR20180125498A (ko) | 안드로이드 기반의 팝업 프롬프트 방법 및 디바이스 | |
JP2007128132A (ja) | スレッドデバッグ装置、スレッドデバッグ方法及びプログラム | |
CN107609120B (zh) | 日志信息上报方法、装置及存储介质、adsp和终端 | |
CN104426945B (zh) | 一种获取应用性能数据的方法、设备和系统 | |
CN113190427B (zh) | 卡顿监控方法、装置、电子设备及存储介质 | |
CN118503025A (zh) | 中断丢失检测方法、设备、主机及检测系统 | |
CN113821257B (zh) | 处理器内核调用栈信息查询方法及装置 | |
CN105095079B (zh) | 一种热点模块指令跟踪的方法及设备 | |
CN116991559B (zh) | 不可中断的睡眠状态进程的退出方法和装置 | |
RU2432601C2 (ru) | Метод внедрения детерминизма среди множества интервалов тактирования | |
US11507413B2 (en) | Tracking method, apparatus, device, and machine-readable medium | |
CN113535341B (zh) | Linux下CPU核间中断通信的实现方法及装置 | |
CN102549510B (zh) | 用于检查操作系统的实时特性的方法 | |
CN112416536B (zh) | 提取处理器执行上下文的方法及处理器 | |
CN109922014A (zh) | 一种交换机冷热启动判断方法及系统 | |
US20140115317A1 (en) | Electronic device and method for switching work mode of the electronic device |
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 |