zoukankan      html  css  js  c++  java
  • E语言基本的消息派发流程

    E语言基本的消息派发流程

    一、MFC消息派发机制

      如下图,MFC的消息派发比较好理解,其事件处理函数地址被作为第四个参数传入进消息派发函数,消息派发函数在内部处理该事件,会接收到事件地址然后调用过去处理流程。但是E语言的在这上面进行了一定量的封装,用起来还是比较麻烦的。

      

    二、E语言消息派发机制

    1. 其调用 _AfxDispatchCmdMsg函数的地点,其第四个参数在MFC中是对应的就是。

     2. 直接Ctrl+G进入该函数内部,然后查看堆栈来确定该地址。

     3. 利用特征码 FF55FC5F5E,来确定对应的易语言控件消息派发函数。

    4. 如果是MFC,[local.1] 应该为 _AfxDispatchCmdMsg第四个参数,然后再内部调用 call但在E语言中,这显然存在偏差,E语言对此仅仅封装(注意,不只是封装一层)。因此,我们接下来的目标是确定如果从 _AfxDispatchCmdMsg到达[local.1]这个函数的。

    三、对应一个简单的破解程序

    链接:https://pan.baidu.com/s/1rODa_Kjwnzjy00105BceiA
    提取码:i71u
    复制这段内容后打开百度网盘手机App,操作更方便哦

    1. 该程序外观

     2. 搜索其对应的“消息派发特征码” FF55FC5F5E

     3. 定位到该地址断下,发现程序并没有反应,肯定找错位置。

    4. 查看消息派发函数是否可以断下,搜索_AfxDispatchCmdMsg,搜索不到。(废话!!你没有PDB文件当然搜索不到)

    5. 从模板中搜索 _AfxDispatchCmdMsg --> FF55XXXX 之中必经之路的特征码,使用另外一个pdb文件调出来

      a. 使用第一层函数,发现并没有断下。(是你找的时机有问题,下面会给出解释)

      

       b. 之后继续查看第二层函数,发现其可以断下。

         注意:第一个 mov eax,[地址] 这个特征码存在绝对地址,不要包含进去。

        

    6. 一直跟踪,发现走到了真正的call函数,发现其被修改掉了,因此无法断下来。

     注意:这条路径不是仅 _AfxDispatchCmdMsg 一个函数走,在函数启动时,我们会在中途第二个点断下(我们之前第一个没断下就是开始启动时没有经过该点),因此科学的方法是让程序启动完毕后再开始断下。

    7. 存在时钟干扰,下条件断点即可。

     8. 发现过时钟干扰有效,进入函数猜测大跳,直接NOP爆破掉。

     9. 发现程序运行成功,破解完成。

  • 相关阅读:
    Python3学习笔记22-文件读写
    Python3学习笔记21-实例属性和类属性
    Python3学习笔记20-获取对象信息
    Python3学习笔记19-继承和多态
    Python3学习笔记18-访问限制
    Python3学习笔记17-类与实例
    Python3学习笔记16-错误和异常
    Python3学习笔记15-迭代器与生成器
    Python3学习笔记14-迭代与列表生成式
    Python3学习笔记13-函数的参数
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12183203.html
Copyright © 2011-2022 走看看