zoukankan      html  css  js  c++  java
  • 软件按钮事件

    一、VB程序 
    其实,VB的按纽事件的找法是最为普遍的,也就是大家所谓的万能断点.其实也不仅仅是针对按纽事件,还有
    很多其他的用处,如取消NAG,启动框,灰色按纽或隐藏按纽,启动时的timer事件等等,具体的就自己去总结
    吧,这里只演示按纽事件!
    OD载入后,CTRL+B,816C24 
    确定后,就会来到下图处: 
     
    然后,就在下面的JMP处F2下断,下完后CTRL+L,如果还有,就继续下断点. 
    下完断点后,运行程序,点击相应的按纽,OD就会断下来了 
     
    下面的任务就是考验大家的耐心,F8跟踪吧,不再赘述了. 
    当然,为了方便大家,可以写个简单的脚本,免的每次都去手动设置了,节省时间: 复制内容到剪贴板 代
    码:var Addr 
    mov Addr,401000 
    loop: 
    find Addr,#816C2404??000000# 
    cmp $RESULT,0 
    je Exit 
    add $RESULT,08 
    bp $RESULT 
    add $RESULT,1 
    mov Addr,$RESULT 
    jmp loop 
    Exit: 
    eval "按纽事件查找完毕!" 
    msg $RESULT 
    ret 
    二、Delphi和BC++程序 
    Delphi和BC++都是同一公司开发的,故查找方法都一样,当然你也可以使用DEDE. 
    OD载入后,CTRL+G,转到00401000处 
    然后就CTRL+B,查找特征码740E8BD38B83????????FF93???????? 
     
    然后就会找到下面的地方: 
     
    然后就在下面的CALL处下断吧. 
    下面的工作就是不断的CTRL+L继续查找和F2下断了. 
    运行下看看效果吧: 
     
    看,断下了吧,下面就F7跟进这个CALL吧,就来到这个按纽事件处了. 
    同样写个脚本,方便大家操作: 复制内容到剪贴板 代码:var Addr 
    mov Addr,401000 
    loop: 
    find Addr,#740E8BD38B83????????FF93????????# 
    cmp $RESULT,0 
    je Exit 
    add $RESULT,0A 
    bp $RESULT 
    add $RESULT,1 
    mov Addr,$RESULT 
    jmp loop 
    Exit: 
    ret 
    三、易语言 
    易语言的这种查找方法,同样适合有壳的程序,其他的就必须脱壳后再继续操作了. 
    OD载入后,就F9运行程序吧,当程序运行后,ALT+E 
    选中易语言的核心库krnln,双击进去 
     
    然后CTRL+B,查找FF 55 FC 
     
    查找到的这个CALL就是了,F2下断吧 
    现在输入必须的内容后,单击对应的按纽吧 
     
    看,断下了吧,下面就F7跟进吧,就来到按纽事件处了 
    同样,写个脚本,方便大家 复制内容到剪贴板 代码:gpa"GetProcessHeap","kernel32.dll" 
    cmp $RESULT,0 
    je err 
    bp $RESULT 
    run 
    run 
    run 
    bc $RESULT 
    rtu 
    find 10001000,#FF55FC5F5E895D??8945# 
    bp $RESULT 
    find eip,#FFE0# 
    cmp$RESULT,0 
    je err 
    bp $RESULT 
    run 
    bc $RESULT 
    sto 
    MSG "按纽事件查找完毕!" 
    ret 
    err: 
    MSG "脚本运行错误!请检查错误后再继续运行脚本!" 
    ret 
    四、VC++程序(非MFC程序) 
    OD载入后,单击鼠标右键,选择"查找",然后是"所有命令" 
    在弹出的输入框里,写入特征代码"sub eax,0a"
    确定后,就来到下面的窗口 
       
    在下面的sub eax,0A处,双击进去吧:
    来找这里后,在下面的je处跟随过去 
     
    跟随来到的这个CALL,就是了,F2下断吧 
    然后断下后,F7跟进,F8几次,就来到按纽事件了. 
    五、MFC类程序 
    当然判断MFC和非MFC的程序,靠大家自己去判断了 
    OD载入后.ALT+E,来到可执行模块,找MFC的核心DLL:MFC42 
    然后就双击进去 
    然后就CTRL+F,查找特征代码:sub eax,0a 
     
    同样,找到后,就在下面的je处跟随,跟随后看到的CALL,就是那个关键CALL了! 
     
    断下后F7跟进,F8几次,就会来到按纽事件代码处了!
     
     
    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段内存断点法了

  • 相关阅读:
    win7系统宽带自动断开怎么解决【系统天地】
    Win10系统修复受损文件教程【系统天地】
    win10如何加快开机速度【系统天地】
    Netty核心概念(5)之Channel
    Netty核心概念(4)之Bootstrap
    漫谈NIO(3)之Netty实现
    漫谈NIO(2)之Java的NIO
    漫谈NIO(1)之计算机IO实现
    机器学习实战(二)决策树
    机器学习实战(一)k-近邻算法
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982514.html
Copyright © 2011-2022 走看看