- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OllyDBG 入门系统(六) - 消息断点及RUN跟踪补充
好,就本着这几个问题来分析一遍。
首先,先回顾下Windows的消息机制。要点:所有要处理的消息必然会由程序自己处理,不处理的消息都交由Windows处理。Windows的消息处理函数的格式,如下:
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle of window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
其中uMsg就是关键,它代表消息的类型,如:WM_COMMAND,WM_GETTEXT等。记好哦。
下面,我们来用实例讲解。
这个CrackMe是用对话框做的(你是怎么知道的?)。
1、 用OllyDbg加载,Crtl N,找到函数:USER32.DialogBoxParamA,右击-“在每个参考上设置断点”。
2、 F9,运行。看,被拦了下来,如图:
3、 其中DlgProc的内容,就是我们需要找的东东。这个地址是消息处理函数的入口点。现在来解释为什么要在窗口那才有消息断点,看图,
要下消息断点,首先得找到具有Windows消息处理函数格式的函数,然后,再根据栈的数据来判断消息,如果符合下断的消息,那么,OllyDbg就会拦下来(还会觉得不知道在哪下消息断点了吗?知道该如何下消息断点了吧?)。很明显有一点,这个消息断点的功能是有限的,比如,要拦主窗口中的菜单消息呢?所以,消息断点的功能还是有限的。如何扩展?扯远了,下面再讲。
4、 Ctrl G来到cyle.0041029,我们来到了消息处理函数了,但是,OllyDbg并未识别出这个函数是消息处理函数。所以,在cyle.0041029处,右击-“分析”-“假定参数”,如图:
弹出一个对话框,选择“WinProc(hWnd,msg,wParam,lParam)”。
点击“应用”后,如图。
5、在cyle.0041029处,右击-“断点”-“在WinProc上的消息断点”(平时是不是没见过这个菜单呀?呵呵)。
5、 在“消息”列表框中,选择你要下断的消息(Alt B,删除以前的断点,以免影响心情)。
6、 F9,运行,程序运行起来了。这时没什么事情发生,当你在里面点了一个文本框之后(点它,是想让它获得Focus(焦点),以便能够输入数据),事情就发生了。现在没办法在文本框里输入注册码,也没办法点击按钮。这是怎么回事呢?仔细看一下Stack(栈)的那个窗口,噢!原来被文本框的通知EN_SETFOUCE搞坏了!停留在EN_SETFOCUS和EN_KILLFOCUS两个消息之间了。
7、 好,现在来扩展消息断点(消息断点是否是条件断点的特殊例子?),即使用条件断点(卖弄了一下,呵呵)。
看你需求,条件和条件记录,在这里是没什么区别的,因为不需要记录的内容。
8、 按Shitf F2,输入 MSG ==WM_COMMAND [ESP C]==66(这个66是怎么来的?这个就是那个Check按钮的ID,意思就是“当收到WM_COMMAND,且是由ID为0x66发出的时候中断”),确定,F9,运行。
9、现在,输入Name和Serial之后,点”Check”按钮。
10、这次中断,位置上似乎没有变化,但是,明白了消息处理机制,应该知道这次中断的不同吧?(这次会流程会流到注册算法那哦)/. enter 0, 0 ; 解码为 WinProc
0040102D |. push ebx
0040102E |. push edi
0040102F |. push esi |. cmp [arg.2], 110 |. je short cycle.0040105E |. cmp [arg.2], 111 //111=WM_COMMAND |. je short cycle//肯定在这里跳(为什么?) |. cmp [arg.2], 10 |. je short cycle00401048 |. cmp [arg.2], 2
0040104C |. je sh
文档评论(0)