CN116755999A - 一种应用于Windows系统的调试服务进程的启动方法 - Google Patents
一种应用于Windows系统的调试服务进程的启动方法 Download PDFInfo
- Publication number
- CN116755999A CN116755999A CN202310558423.4A CN202310558423A CN116755999A CN 116755999 A CN116755999 A CN 116755999A CN 202310558423 A CN202310558423 A CN 202310558423A CN 116755999 A CN116755999 A CN 116755999A
- Authority
- CN
- China
- Prior art keywords
- service process
- debugging
- debugged
- service
- starting
- 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
- 238000000034 method Methods 0.000 title claims abstract description 196
- 230000008569 process Effects 0.000 title claims abstract description 156
- 238000001514 detection method Methods 0.000 claims abstract description 18
- 230000000007 visual effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 31
- 238000004590 computer program Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 7
- 239000000243 solution Substances 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明的实施例公开了一种应用于Windows系统的调试服务进程的启动方法,包括:创建dll动态链接库;在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程;在所述dll动态链接库中设置调试断点;启动服务进程时,将所述dll动态链接库注入所述服务进程中;重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行;若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。本发明通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
Description
技术领域
本发明涉及Windows软件调试技术领域,特别涉及一种应用于Windows系统的调试服务进程的启动方法。
背景技术
在windows系统环境下,几乎每一种高级语言都拥有专门的调试器,供程序员进行侦错或跟踪自己的程序。Windows平台下的调试器,根据待调试进程的调试时机主要可分为两种:(1)在待调试进程启动时进行调试,待调试进程以暂停的方式启动调试子程序,调试子程序拥有与待调试进程相同的权限以及会话;(2)在待调试进程运行时进行附加调试,将调试子程序附加到正在运行的待调试进程中,待调试进程可以拥有与调试子程序不同的权限与会话。第一种调试器,针对无法修改代码的待调试服务进程,这种待调试服务进程由服务管理器启动,如果需要待调试服务进程的启动逻辑,则无法通过进程启动时调试的方法实现调试。第二种调试器,在待调试进程运行时进行附加调试,可能出现由于附加时机过晚,无法调试服务进程的情况。
发明内容
有鉴于此,本发明实施例的目的在于提供一种应用于Windows系统的调试服务进程的启动方法,通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
第一方面,本发明实施例提供了一种应用于Windows系统的调试服务进程的启动方法,其中,包括:
创建dll动态链接库。
在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程。
在所述dll动态链接库中设置调试断点。
启动服务进程时,将所述dll动态链接库注入所述服务进程中。
重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行。
若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述在所述dll动态链接库中添加检测代码包括:
在所述dll动态链接库的主函数中的启动入口处添加检测代码。
所述主函数为dllmain函数。
所述启动入口的函数为DLL_PROCESS_ATTACH。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述检测代码的函数为IsDebuggerPresent。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述在所述dll动态链接库中设置调试断点包括:
所述调试断点设置在所述dll动态链接库的主函数中的启动入口后。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,还包括:
若当前执行的服务进程为待调试进程,则检测所述待调试进程是否处于调试状态。
若所述待调试进程处于调试状态,则继续执行服务启动逻辑。
结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,所述将所述dll动态链接库注入所述待调试进程中包括:
在Windows系统的注册表下修改启动项,将所述dll动态链接库文件的全路径填入AppInit_DLLs的键值中。
windows系统提供了AppInit_DLLs机制,该机制允许通过将自定义DLL加载到每个应用程序的地址空间,AppInit_DLLs基础结构提供了一种用于挂钩系统API的简单方法。利用该机制,我们可以在服务启动时,将动态库注入到服务进程中,具体方法是在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows下修改键AppInit_DLLs,将需要注入的dll动态库文件全路径填入AppInit_DLLs值中,比如C:\Windows\System32\wait_for_debug.dll。
结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述dll动态链接库采用visual studio创建。
结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,所述调试断点采用visual studio设置。
结合第一方面,本发明实施例提供了第一方面的第八种可能的实施方式,其中,还包括:
进程启动前,判断当前执行的服务进程是否为待调试进程,若为待调试进程,则需要注入所述dll动态链接库。
判断所述待调试进程是否为敏感进程或者是需要防泄密的进程,如果是,则需要注入所述dll动态链接库进行安全调试。
结合第一方面,本发明实施例提供了第一方面的第九种可能的实施方式,其中,所述判断当前执行的服务进程是否为待调试进程包括:
在进程空间中,获取预设系统函数的地址,所述预设系统函数为Windows系统中的调用函数。
操作系统在管理内存时,每个进程都有一个独立的进程地址的空间,称作进程空间。所述预设系统函数为Windows系统中的调用函数,包括创建进程的函数ZwCreateUserProcess、分配进程的函数ZwAllocateVirtualMemory和写入进程内存空间的函数ZwWriteVirtualMemory等。
判断判断当前执行的服务进程是否在获取的所述预设系统函数的地址中,若是,则说明当前执行的服务进程为待调试进程。
第二方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
第三方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
本发明实施例的有益效果是:
本发明利用AppInit_DLLs注入时机早于进程执行启动逻辑的特征,实现特定场景的调试目的。利用AppInit_DLLs方式注入dll,并在此时机等待调试程序附加进程,以便调试程序入口逻辑。本发明通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明应用于Windows系统的调试服务进程的启动方法的流程图;
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件能够以各种不同的配置来布置和设计。
请参照图1,本发明的第一个实施例提供一种应用于Windows系统的调试服务进程的启动方法,其中,包括:
创建dll动态链接库。
在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程。
在所述dll动态链接库中设置调试断点。
启动服务进程时,将所述dll动态链接库注入所述服务进程中。
重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行。
若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。
其中,dll动态链接库是一个包含可由多个程序,同时使用的代码和数据的库。
本发明应用于Windows系统的调试服务进程的启动方法,应用于调试器。其中调试器的工作原理是基于中央处理器的异常机制,并由操作系统的异常分发\事件分发的子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互。
具体的,所述在所述dll动态链接库中添加检测代码包括:
在所述dll动态链接库的主函数中的启动入口处添加检测代码。
所述主函数为dllmain函数。
所述启动入口的函数为DLL_PROCESS_ATTACH。
具体的,所述检测代码的函数为IsDebuggerPresent。
其中,所述在所述dll动态链接库中设置调试断点包括:
所述调试断点设置在所述dll动态链接库的主函数中的启动入口后。
具体的,还包括:
若当前执行的服务进程为待调试进程,则检测所述待调试进程是否处于调试状态。
若所述待调试进程处于调试状态,则继续执行服务启动逻辑。
具体的,所述将所述dll动态链接库注入所述待调试进程中包括:
在Windows系统的注册表下修改启动项,将所述dll动态链接库文件的全路径填入AppInit_DLLs的键值中。
其中,AppInit_DLLs是一种机制,允许将DLL加载到系统上的每个用户模式进程中。
windows系统提供了AppInit_DLLs机制,该机制允许通过将自定义DLL加载到每个应用程序的地址空间,AppInit_DLLs基础结构提供了一种用于挂钩系统API的简单方法。利用该机制,我们可以在服务启动时,将动态库注入到服务进程中,具体方法是在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows下修改键AppInit_DLLs,将需要注入的dll动态库文件全路径填入AppInit_DLLs值中,比如C:\Windows\System32\wait_for_debug.dll。
具体的,所述dll动态链接库采用visual studio创建。
具体的,所述调试断点采用visual studio设置。
本发明应用于Windows系统的调试服务进程的启动方法,应用于调试器。其中调试器的工作原理是基于中央处理器的异常机制,并由操作系统的异常分发\事件分发的子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互。
其中,还包括:
进程启动前,判断当前执行的服务进程是否为待调试进程,若为待调试进程,则需要注入所述dll动态链接库。
判断所述待调试进程是否为敏感进程或者是需要防泄密的进程,如果是,则需要注入所述dll动态链接库进行安全调试。
其中,所述判断当前执行的服务进程是否为待调试进程包括:
在进程空间中,获取预设系统函数的地址,所述预设系统函数为Windows系统中的调用函数。
操作系统在管理内存时,每个进程都有一个独立的进程地址的空间,称作进程空间。所述预设系统函数为Windows系统中的调用函数,包括创建进程的函数ZwCreateUserProcess、分配进程的函数ZwAllocateVirtualMemory和写入进程内存空间的函数ZwWriteVirtualMemory等。
判断判断当前执行的服务进程是否在获取的所述预设系统函数的地址中,若是,则说明当前执行的服务进程为待调试进程。
本发明的第二个实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
本发明的第三个实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
本发明实施例旨在保护一种应用于Windows系统的调试服务进程的启动方法,具备如下效果:
1.本发明利用AppInit_DLLs注入时机早于进程执行启动逻辑的特征,实现特定场景的调试目的。
2.利用AppInit_DLLs方式注入dll,并在此时机等待调试程序附加进程,以便调试程序入口逻辑。
3.本发明通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
4.本发明增加了当前执行的服务进程是否为待调试进程的检测,避免对错误的进程进行调试,更稳定,更高效。
本发明实施例所提供的应用于Windows系统的调试服务进程的启动方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述应用于Windows系统的调试服务进程的启动方法,从而能够更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种应用于Windows系统的调试服务进程的启动方法,其特征在于,包括:
创建dll动态链接库;
在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程;
在所述dll动态链接库中设置调试断点;
启动服务进程时,将所述dll动态链接库注入所述服务进程中;
重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行;
若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。
2.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述在所述dll动态链接库中添加检测代码包括:
在所述dll动态链接库的主函数中的启动入口处添加检测代码;
所述主函数为dllmain函数;
所述启动入口的函数为DLL_PROCESS_ATTACH。
3.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述检测代码的函数为IsDebuggerPresent。
4.根据权利要求2所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述在所述dll动态链接库中设置调试断点包括:
所述调试断点设置在所述dll动态链接库的主函数中的启动入口后。
5.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,还包括:
若当前执行的服务进程为待调试进程,则检测所述待调试进程是否处于调试状态;
若所述待调试进程处于调试状态,则继续执行服务启动逻辑。
6.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述将所述dll动态链接库注入所述待调试进程中包括:
在Windows系统的注册表下修改启动项,将所述dll动态链接库文件的全路径填入AppInit_DLLs的键值中。
7.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,
所述dll动态链接库采用visual studio创建。
8.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,
所述调试断点采用visual studio设置。
9.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,还包括:
进程启动前,判断当前执行的服务进程是否为待调试进程,若为待调试进程,则需要注入所述dll动态链接库。
10.根据权利要求9所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述判断当前执行的服务进程是否为待调试进程包括:
在进程空间中,获取预设系统函数的地址,所述预设系统函数为Windows系统中的调用函数;
判断判断当前执行的服务进程是否在获取的所述预设系统函数的地址中,若是,则说明当前执行的服务进程为待调试进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310558423.4A CN116755999B (zh) | 2023-05-17 | 2023-05-17 | 一种应用于Windows系统的调试服务进程的启动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310558423.4A CN116755999B (zh) | 2023-05-17 | 2023-05-17 | 一种应用于Windows系统的调试服务进程的启动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116755999A true CN116755999A (zh) | 2023-09-15 |
CN116755999B CN116755999B (zh) | 2024-03-29 |
Family
ID=87950449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310558423.4A Active CN116755999B (zh) | 2023-05-17 | 2023-05-17 | 一种应用于Windows系统的调试服务进程的启动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116755999B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000062160A2 (en) * | 1999-04-08 | 2000-10-19 | Chicago-Soft, Ltd. | Method and system for dynamic injection of execution logic into a windowed operating system |
US6263456B1 (en) * | 1997-05-09 | 2001-07-17 | International Business Machines Corporation | System for remote debugging of client/server application |
CN104156481A (zh) * | 2014-08-26 | 2014-11-19 | 北京软安科技有限公司 | 基于动态链接库注入的Android加密通信检测装置和方法 |
CN105045605A (zh) * | 2015-08-28 | 2015-11-11 | 成都卫士通信息产业股份有限公司 | 一种将dll注入目标进程的方法和系统 |
US20170078182A1 (en) * | 2015-09-14 | 2017-03-16 | Dynatrace Llc | Method And System For Automated Injection Of Process Type Specific In-Process Agents On Process Startup |
CN112199642A (zh) * | 2019-07-08 | 2021-01-08 | 北京智游网安科技有限公司 | 一种安卓系统反调试的检测方法、移动终端及存储介质 |
-
2023
- 2023-05-17 CN CN202310558423.4A patent/CN116755999B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6263456B1 (en) * | 1997-05-09 | 2001-07-17 | International Business Machines Corporation | System for remote debugging of client/server application |
WO2000062160A2 (en) * | 1999-04-08 | 2000-10-19 | Chicago-Soft, Ltd. | Method and system for dynamic injection of execution logic into a windowed operating system |
CN104156481A (zh) * | 2014-08-26 | 2014-11-19 | 北京软安科技有限公司 | 基于动态链接库注入的Android加密通信检测装置和方法 |
CN105045605A (zh) * | 2015-08-28 | 2015-11-11 | 成都卫士通信息产业股份有限公司 | 一种将dll注入目标进程的方法和系统 |
US20170078182A1 (en) * | 2015-09-14 | 2017-03-16 | Dynatrace Llc | Method And System For Automated Injection Of Process Type Specific In-Process Agents On Process Startup |
CN112199642A (zh) * | 2019-07-08 | 2021-01-08 | 北京智游网安科技有限公司 | 一种安卓系统反调试的检测方法、移动终端及存储介质 |
Non-Patent Citations (1)
Title |
---|
侯鑫美;董开坤;: "基于Windows服务的恶意行为特征检测技术", 智能计算机与应用, no. 05, 28 October 2016 (2016-10-28), pages 35 - 37 * |
Also Published As
Publication number | Publication date |
---|---|
CN116755999B (zh) | 2024-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108345542B (zh) | 一种应用程序中异常处理方法及装置 | |
US5815702A (en) | Method and software products for continued application execution after generation of fatal exceptions | |
CN106295370B (zh) | 一种加固安装包的动态链接库dll文件的方法和装置 | |
CN107330320B (zh) | 应用进程监控的方法和装置 | |
Chow et al. | Multi-stage replay with crosscut | |
US8843899B2 (en) | Implementing a step-type operation during debugging of code using internal breakpoints | |
KR102023223B1 (ko) | 실행 중인 프로세스로의 동적 코드 주입 기법 | |
US7404107B2 (en) | Fault injection selection | |
US6901583B1 (en) | Method for testing of a software emulator while executing the software emulator on a target machine architecture | |
US20120110554A1 (en) | Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints | |
CN109453522B (zh) | 游戏运行安全检测方法及装置、存储介质、电子设备 | |
CN116502220B (zh) | 一种对抗性Java内存马的检测方法及处理方法 | |
US20120151267A1 (en) | System for extending use of a data address break point register to implement multiple watch points | |
CN112231198B (zh) | 一种恶意进程调试方法、装置、电子设备及介质 | |
CN116755999B (zh) | 一种应用于Windows系统的调试服务进程的启动方法 | |
US10628280B1 (en) | Event logger | |
KR20110095050A (ko) | 공유 라이브러리 디버깅 장치 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
US20060126799A1 (en) | Fault injection | |
US11630714B2 (en) | Automated crash recovery | |
US9448782B1 (en) | Reducing a size of an application package | |
JP2004094374A (ja) | ロギングシステム | |
CN115454686A (zh) | 一种信息处理方法及装置、存储介质 | |
WO2019114812A1 (zh) | 一种阻止恶意代码编译的方法、存储介质及电子装置 | |
CN111949362A (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 |