ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

03 调试事件的处理

2019-11-30 09:04:49  阅读:222  来源: 互联网

标签:03 函数 发送 事件 调试程序 进程 断点 调试


【太多事情要做了,这部分难度对我来说又很大,先写一下大体框架,到时候具体函数逆向分析过程给写出来】

 

问题:

1. 建立被调试程序时接收的第一个调试事件是什么?

2. 该事件在内核中的生成流程是什么?

3. 其初始化下断点时如何判断是否是被调试程序(而不是一般程序)?

4. 关于调试的内核函数中为何要发送虚假消息(**fake**)?

 

一、创建进程时的第一个调试事件

  一个简单的创建被调试进程的案例

  在这个例子中,简单地以调试模式打开 记事本.exe, 发现其首先会接收到一个异常事件。

  

  当调试进程创建或附加被调试进程之后,其会在被调试进程中下一个int 3断点。

  其函数的经过如下:(注:当函数太大时,可以通过 IDA的Cross Reference 函数来逆向推出被调试程序)

  

 

  注意:在内核中进程的初始化一般都会调用 LdrpInitializeProcess,但不是每个进程都会被下断点。

  如下图,其会检测 PEB+0x2处

  

 

二、 发送虚假消息

  当某一进程以附加的形式调试时,其会调用 DebugActive 之类的函数。

  在函数内部会发送假消息,为什么需要发送假消息呢? 

  因为该进程已经被创建,DLL模块也已经被加载了。

  但调试器需要其DLL模块等被调试程序的信息,此时被调试进程需要发送虚假的消息,其实就是遍历TEB链表查找各种DLL模块。

  那么这个可靠吗?

  当然不可靠,我们之前就有一篇在R3层的隐藏TEB 利用C++实现模块隐藏(R3层断链) 

 

标签:03,函数,发送,事件,调试程序,进程,断点,调试
来源: https://www.cnblogs.com/onetrainee/p/11961237.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有