zoukankan      html  css  js  c++  java
  • 几种典型程序Button处理代码的定位转

    首先
    1 od 下运行程序,F12 暂停;
    2 View菜单中选击Windows项,在打开的窗口中可以从Title栏看到目标按钮,从而找到它的Handle(xxxxxxxx) ;

    对不同平台生成的程序,分别处理:

    一、VB, Delphi, CBuilder 程序:
    3 在CallWindowProcA入口下条件断点: [esp+8]==xxxxxxxx && [esp+0c]==202;
    4 F9继续程序,点击目标按钮,程序中断;
    5 Alt+F4,在代码段(.text)上下访问断点;
    6 F9执行程序,程序中断,
       1). VB程序中断在下面代码
         PUSH DWORD PTR DS:[EAX+EBX]              ; yyyyyyy
         上面[EAX+EBX]的值(yyyyyy)就是我们要找的位置。

       2). Delphi, CBuilder 的程序
         程序直接断在我们要找的位置。

    借moon一句,这姑妄称作CallWindowProcA条件断点加上code段内存断点法吧。 

    二、VC程序
    又分MFC和Win32两种情况,二者相同之处:
    3 在IsDialogMessageW入口下条件断点: [[esp+8]]==xxxxxxxx && [[esp+8]+4]==202
    4 F9继续程序,点击目标按钮,程序中断;
    5 Alt+F4,在代码段上下访问断点;
    6 F9执行程序,程序中断, 注意这里虽然中断在code段,但却不是处理Button点击事件的代码处
      这时:
      对Win32程序,只需要按几下F7,当回到User32.dll领空后再重复一次第 5、6步就可以了;
      而对于MFC程序,我们不得不多次重复这样的操作:单步回到MFC领空,再第 5、6步。好在已经看到大陆啦!

    类比,这就叫IsDialogMessageW条件断点加上code段内存断点法了。 

    敬请各位指正。

  • 相关阅读:
    无线安全课堂:手把手教会你搭建伪AP接入点
    转载——开阔自己的视野,勇敢的接触新知识
    关于系统架构的一些总结
    MessageBox.Show()如何换行
    不患寡而患不均
    由CHAR(2)引发的BUG
    DataRow.RowState 属性
    C# 使用TimeSpan计算两个时间差
    利用反射调出其他项目的界面
    DB2 中将date类型的转换成timestamp
  • 原文地址:https://www.cnblogs.com/dsky/p/2350614.html
Copyright © 2011-2022 走看看