软件解密学习交流 QQ 群:142146794
软件解密学习交流 QQ 群:142146794
软件解密学习交流 QQ 群:142146794
软件解密学习交流 QQ 群:142146794
OllyDBG入门系列(五)-消息断点及RUN跟踪
作者:CCDebuger
找了几十个不同语言编写的crackme,发现只用消息断点的话有很多并不能真正到达我们要找的关键位置,想想还是把消息断点和RUN跟踪结合在一起讲,更有效一点。
关于消息断点的更多内容大家可以参考jingulong兄的那篇《几种典型程序 Bu on 处理代码的定位》的文章,堪称经典之作。今天仍然选择crackmes.cjb.net镜像打包中
的一个名称为cycle的crackme。按照惯例,我们先运行一下这个程序看看:
我们输入用户名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”的图标),我们
会看到以下内容:
我们在选中的条目上点右键,再选择上图所示的菜单项,会来到下面这个窗口:
现在我们点击图上的那个下拉菜单,呵,原来里面的消息真不少。这么多消息我们选哪个呢?注册是个按钮,我们就在按下按钮再松开时让程序中断。查一下 MSDN,
我们知道这个消息应该是WM_LBUTTON_UP,看字面意思也可以知道是左键松开时的消息: