• X32dbg-查找MFC窗口过程函数-跟踪直到满足条件-条件断点-查看窗口句柄


    1.X32dbg

      在逆向分析Win32软件时,需要找到窗口过程函数,这样可以方便的找到目标应用程序段。以一个简单的win32程序为例,如下图所示:
    在这里插入图片描述
      X32dbg附加程序,点击添加文件,弹出对话框,如下图所示:
    在这里插入图片描述
      然后在X32dbg中暂停,选择追踪->步进直到条件满足,输入应用程序所在的代码段范围(EIP > 04000000 && EIP <04005000),如下图所示:
    在这里插入图片描述
      然后暂停在目标区域,但是有时会暂停不下,暂时不知道什么原因,多试几次。如下图所示:
    在这里插入图片描述
      然后查看调用堆栈,如下图所示:
    在这里插入图片描述
      逆向分析,添加文件应该是一个WM_COMMAND消息,它来自于窗口的消息函数调用,所以在调用堆栈下面应该有一个就是消息函数。消息函数原型如下所示:

    LRESULT CALLBACK WindowProc(HWND hwnd,      // handle to window
    							UINT uMsg,      // message identifier
    							WPARAM wParam,  // first message parameter
    							LPARAM lParam   // second message parameter
    							)
    
    • 1
    • 2
    • 3
    • 4
    • 5

      所以调用之前,应该是在栈里压入了4个参数,逐步点击分析,如下所在位置就是MFC的窗口过程函数。如下图所示:
    在这里插入图片描述
    在这里插入图片描述
      怀疑mfc42u.ordinal#1571这个函数就是窗口过程函数,这时需要验证猜想,这时在这个函数开始位置下断点,然后查看参数值,如下图所示:
    在这里插入图片描述
      这时需要介绍下基础知识,在刚进入函数的时候,栈顶指针esp指向的是返回地址,esp+4指向第一个参数的地址(从左向右,右边先入栈),依次类推。这时可以开始spy++来查看第一参数是不是有效的窗口句柄。结果是主窗口的句柄。然后再进行其它测试,确定就是窗口函数。
      接下来针对窗口过程函数,就需要介绍条件断点。

    2.条件断点

      基础知识,一个[]去地址内容,可以嵌套 && || ==等逻辑操作,数值是16进制。
      [[esp+4]]==110F3A && [[esp+4]+4]==0x0110
      [[esp+4]]==110F3A && [[esp+4]+4]==0x0111

      APP代码区域返回
      EIP > 00400000 && EIP <00405000

    3.窗口句柄

      在Win32逆向分析中,需要频繁的查看窗口句柄,可以查看句柄窗口中的句柄列表,如下图所示:
    在这里插入图片描述

    4.作者答疑

      如有疑问,敬请留言。

  • 相关阅读:
    基于STC89C52单片机空气PM2.5系统设计资料
    iOS开发基础109-网络安全
    CN考研真题知识点二轮归纳(5)
    系统架构设计:7 论企业集成架构设计及应用
    内核实战教程第四期 _ 带你走进数据库 SQL 引擎
    关于pbootcms中被挂马以后的处理
    隐函数求导例题
    【python】进阶语法(运算符的使用、流程结构)
    C# Socket通信从入门到精通(4)——多个异步TCP客户端C#代码实现
    c#装饰器模式详解
  • 原文地址:https://blog.csdn.net/m0_67316550/article/details/126189613