【文章标题】: 关于如何查找按钮事件(致新手)
【文章作者】: stalker
【作者邮箱】: zhangke_1989 at hotmail dot com
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
最近在初学者园地看到有人问如何查找按钮事件,在此把我的个人经验简单总结一下,献给初学者
方法一:消息断点法
这一方法CCDebugger老大已经讲得很清楚,详见
http://bbs.pediy.com/showthread.php?s=&threadid=21532
方法二:查找分支法
此法适用与某些无法对窗口下消息断点的程序,如Windows自带的一些程序
对这类程序下消息断点将会得到一个“Unable to read memory of debugged process......”错误提示
这个方法大家参考下我的这篇文章
http://bbs.pediy.com/showthread.php?t=68066
如果有什么不明白的可以问我
方法三:特殊程序特殊处理法
以Delphi程序为例,通常情况下要找到一个Delphi程序的按钮事件十分简单,可以通过DeDe来获取按钮事件的地址
或者用资源编辑工具+十六进制编辑工具来查找
讲一下后面一个方法,首先用ResScope或者其他工具打开目标程序
在RCData中能够找到窗体的资源信息,例如
object Form1: TForm1
Left = 192
Top = 107
Width = 377
Height = 188
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 40
Top = 32
Width = 105
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 208
Top = 32
Width = 105
Height = 25
Caption = 'Button2'
TabOrder = 1
OnClick = Button2Click
end
end
此时假设我们要找“Button1”按钮事件,记住OnClick的名字(在这里就是Button1Click)
然后再用WinHex打开程序,查找事件名“Button1Click”,结果如下图
事件名的前一个字节就是事件名的长度,再前面就是事件地址了
OD载入程序之后,直接Ctrl+G前往吧
这个方法不是我想出来的,是在《加密与解密》第二版中看到的,只是我对Delphi比较有兴趣,所以专门提一下
当然要让DeDe查找以及这个方法失效也很简单
进
http://bbs.pediy.com/showthread.php?t=68806
如果你对Delphi程序也同样有兴趣的话,推荐你也看下这两篇文章
http://bbs.pediy.com/showthread.php?t=1846
http://bbs.pediy.com/showthread.php?t=1872
《加密与解密》第二版第七章对针对各种程序的工具方法,都有说明
如果没有书的话,建议买一本新出的第三版吧,对新手帮助应该是很大的
还有这篇帖子也可以参考参考
http://bbs.pediy.com/showthread.php?t=20078
方法四:行为特征法
这个方法就是具体问题具体分析,根据按钮被按下后程序的行为来设置相应断点或做分析来找关键点
例如按钮按下之后会调用IE打开网页,通常就可以对ShellExecuteA函数下断
最后建议新手们没事的时候翻翻论坛的精华帖,特别是PEDIY方面的,相信看过之后心中不少疑惑自然就会解开(^_^)
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年08月26日 上午 11:24:22