龙人在线
about me

Arron

抛砖只为引玉(QQ长期隐身在线)
不能富贵难成大器皆因懒,
胸无大志庸庸碌碌只为闲。

这里是我平时收集的和写的一些东西,希望和大家一起共同进步!

无聊看看电影 边听音乐边看 有空多交流
Google_search
Google
hot
latest
photos
还你真实的开幕式!震撼美图[转]【连载】 央行今日发行600万张面额10元奥运纪念钞(组图) 巧遇日本妹妹海滩拍片片 诱不可挡超级丰胸大美人
links
龙人在线 >> 学习资料 >> 破解教程 >> OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

来源:看雪精华帖 作者:不详 日期:2010-06-23 热度:
标 题: 【转载】OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
作 者: CCDebuger
时 间: 2006-02-19,16:02
链 接: http://bbs.pediy.com/showthread.php?t=21532

OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

作者:CCDebuger

找了几十个不同语言编写的 crackme,发现只用消息断点的话有很多并不能真正到达我们要找的关键位置,想想还是把消息断点和 RUN 跟踪结合在一起讲,更有效一点。关于消息断点的更多内容大家可以参考 jingulong 兄的那篇《几种典型程序Button处理代码的定位》的文章,堪称经典之作。今天仍然选择 crackmes.cjb.net 镜像打包中的一个名称为 cycle 的 crackme。按照惯例,我们先运行一下这个程序看看:
/up_files/image/Article/2010/06/23/34734271.gif 
我们输入用户名 CCDebuger,序列号 78787878,点上面那个“Check”按钮,呵, 没反应!看来是要注册码正确才有动静。现在关掉这个 crackme,用 PEiD 查一下壳,原来是 MASM32 TASM32 [Overlay]。启动 OllyDBG 载入这个程序,F9让它运行。这个程序按我们前面讲的采用字串参考或函数参考的方法都很容易断下来。但我们今天主要学习的是消息断点及 RUN 跟踪,就先用消息断点来断这个程序吧。在设消息断点前,有两个内容我们要简单了解一下:首先我们要了解的是消息。Windows 的中文翻译就是“窗口”,而 Windows 上面的应用程序也都是通过窗口来与用户交互的。现在就有一个问题,应用程序是如何知道用户作了什么样的操作的?这里就要用到消息了。Windows 是个基于消息的系统,它在应用程序开始执行后,为该程序创建一个“消息队列”,用来存放该程序可能创建的各种不同窗口的信息。比如你创建窗口、点击按钮、移动鼠标等等,都是通过消息来完成的。通俗的说,Windows 就像一个中间人,你要干什么事是先通知它,然后它才通过传递消息的方式通知应用程序作出相应的操作。说到这,又有个问题了,在 Windows 下有多个程序都在运行,那我点了某个按钮,或把某个窗口最大化,Windows 知道我是点的哪个吗?这里就要说到另一个内容:句柄(handle)了。句柄一般是个 32 位的数,表示一个对象。Windows 通过使用句柄来标识它代表的对象。比如你点击某个按钮,Windows 就是通过句柄来判断你是点击了那一个按钮,然后发送相应的消息通知程序。说完这些我们再回到我们调试的程序上来,你应该已经用 OllyDBG 把这个 crackme 载入并按 F9 键运行了吧?现在我们输入用户名“CCDebuger”,序列号“78787878”,先不要点那个“Check”按钮,我们来到 OllyDBG 中,点击菜单 查看->窗口(或者点击工具栏上那个“W”的图标),我们会看到以下内容:
此图已经缩小,点击察看原图。 
我们在选中的条目上点右键,再选择上图所示的菜单项,会来到下面这个窗口:
/up_files/image/Article/2010/06/23/34734278.gif 
现在我们点击图上的那个下拉菜单,呵,原来里面的消息真不少。这么多消息我们选哪个呢?注册是个按钮,我们就在按下按钮再松开时让程序中断。查一下 MSDN,我们知道这个消息应该是 WM_LBUTTON_UP,看字面意思也可以知道是左键松开时的消息:
/up_files/image/Article/2010/06/23/347342712.gif 
从下拉菜单中选中那个 202 WM_LBUTTON_UP,再按确定按钮,我们的消息断点就设好了。现在我们还要做一件事,就是把 RUN 跟踪打开。有人可能要问,这个 RUN 跟踪是干什么的?简单的说,RUN 跟踪就是把被调试程序执行过的指令保存下来,让你可以查看被调试程序运行期间干了哪些事。RUN 跟踪会把地址、寄存器的内容、消息以及已知的操作数记录到 RUN 跟踪缓冲区中,你可以通过查看 RUN 跟踪的记录来了解程序执行了那些指令。在这还要注意一个缓冲区大小的问题,如果执行的指令太多,缓冲区满了的话,就会自动丢弃前面老的记录。我们可以在调试选项->跟踪中设置:
/up_files/image/Article/2010/06/23/347342716.gif 
现在我们回到 OllyDBG 中,点击菜单调试->打开或清除 RUN 跟踪(第一次点这个菜单是打开 RUN 跟踪,在打开的情况下点击就是清除 RUN 跟踪的记录,对 RUN 跟踪熟悉时还可以设置条件),保证当前在我们调试的程序领空,在反汇编窗口中点击右键,在弹出菜单中选择 RUN 跟踪->添加所有函数过程的入口:
/up_files/image/Article/2010/06/23/347342720.gif 
我们可以看到 OllyDBG 把识别出的函数过程都在前面加了灰色条:
/up_files/image/Article/2010/06/23/347342724.gif 
现在我们回到那个 crackme 中按那个“Check”按钮,被 OllyDBG 断下了:
/up_files/image/Article/2010/06/23/347342728.gif 
这时我们点击菜单查看->内存,或者点击工具栏上那个“M”按钮(也可以按组合键 ALT+M),来到内存映射窗口:
/up_files/image/Article/2010/06/23/347342732.gif 
为什么在这里设访问断点,我也说一下。我们可以看一下常见的 PE 文件,没加过壳的用 PEiD 检测是这样:
/up_files/image/Article/2010/06/23/347342736.gif 
点一下 EP 段后面那个“>”符号,我们可以看到以下内容:
/up_files/image/Article/2010/06/23/347342740.gif 
看完上面的图我们应该了解为什么在 401000 处的代码段下访问断点了,我们这里的意思就是在消息断点断下后,只要按 F9 键运行时执行到程序代码段的指令我们就中断,这样就可以回到程序领空了(当然在 401000 处所在的段不是绝对的,我们主要是要看程序的代码段在什么位置,其实在上面图中 OllyDBG 内存窗口的“包含”栏中我们就可以看得很清楚了)。设好访问断点后我们按 F9 键,被 OllyDBG 断下:
 
(未完待续)

Tags: AD
广告位招租,广告代号:gg468
search
站内
advertise
Copyright © www.jx19.Com All rights reserved.