• 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.作者答疑

      如有疑问,敬请留言。

  • 相关阅读:
    总结数据结构常用树
    创新驱动|RFID技术在智能半导体行业的应用
    Netron【.pt转.torchscript模型展示】
    MacOS装载APFS移动硬盘出现49180错误
    开发知识点-前端-webpack
    数据分析必备的能力
    PanTools v1.0.27 多网盘批量管理、遍历分享、转存、重命名、复制...
    疫情防控系统怎么选?还是国产化的靠谱
    【python与数据分析】CH5 函数
    「C++小游戏教程」猜数游戏
  • 原文地址:https://blog.csdn.net/m0_67316550/article/details/126189613