【文章作者】: Gall
【作者主页】: http://hi.baidu.com/8ohack
【操作平台】: WindowsXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  很多新手朋友在这个问题上疑惑重重,今天以TraceMe.exe【加密与解密 第三版---调试片】为例说明一下消息断点+Run跟踪的使用.
  如果大家不知道消息机制的话,建议好好看看【罗云彬版Win32汇编】,当你熟练掌握里面提到的窗口编程时,消息机制的学习就没甚问题了!
  
  ollydbg载入TraceMe.exe,F9运行程序,输入下面的信息.但是不要点那个"Check"按钮.
  【用户名】:Gall_pediy
  【序列号】:123456
  
  
【第一部分:消息断点的设置】
  1.选择View>>Windows,右键选择Actualize,显示下面的信息
  Windows
  Handle         Title                             Parent     WinProc    ID         Style      ExtStyle   Thread     ClsProc    Class
  0010028C       TraceMe 动态分析技术                    Topmost               021D00C5   94CE0844   00010100   Main       77D3E577   #32770
  K00090264      Default IME                       0010028C                         8C000000              Main       77D6C930   IME
  IE001201F6     M                                 00090264                         8C000000              Main       FFFF02E3   MSCTFIME UI
  K000B028A                                        0010028C              FFFFFFFF   50000007   00000004   Main       77D3B036   Button
  K000C027E      Exit                              0010028C              000003EA   50010000   00020004   Main       77D3B036   Button
  K000E01FA      ?                                 0010028C              000003F6   50010000   00020004   Main       77D3B036   Button
  K000E01FC      www.PEDIY.com                     0010028C              000003F8   58020001   00000004   Main       77D3E5BB   Static
  K000E0238                                        0010028C              000003E8   50030080   00000204   Main       77D3B3EC   Edit
  K000E0278                                        0010028C              0000006E   50030080   00000204   Main       77D3B3EC   Edit
  K0015023C      Check                             0010028C              000003F5   50010000   00020004   Main       77D3B036   Button
  K001B0234      序列号:                              0010028C              FFFFFFFF   50000007   00000004   Main       77D3B036   Button
  E001D026E      用户名:                              0010028C              FFFFFFFF   50000007   00000004   Main       77D3B036   Button
  
  我们这里的消息断点对象就是Check按钮,
  在Check处右键,选择Message breakpoint on ClassProc,在出现的新窗口中选择消息"202 WM_LBUTTONUP",意思就是对Check按钮下断点,当按下按钮,然后松开时,就被断下来.
  
  到此为止,消息断点的设置完成了,
  这个时候我们可以点击那个Check按钮.在下面的位置被断下来.
  
  77D3B036 >  8BFF            mov     edi, edi                         ; 在此处被断下
  77D3B038    55              push    ebp
  77D3B039    8BEC            mov     ebp, esp
  77D3B03B    8B4D 08         mov     ecx, dword ptr [ebp+8]
  
  
  2.返回到程序的领空
  然后选择View>>Memory,程序的关键信息如下:
  003F0000   0000E000                                       Map    RW        RW
  00400000   00001000   TraceMe               PE header     Imag   R         RWE
  00401000   00003000   TraceMe    .text      code          Imag   R         RWE
  00404000   00001000   TraceMe    .rdata     imports       Imag   R         RWE
  00405000   00001000   TraceMe    .data      data          Imag   R         RWE
  00406000   00001000   TraceMe    .rsrc      resources     Imag   R         RWE
  
  我们在00401000处设置断点,设置完断点后F9运行程序,程序庭在下面的位置
  004010D0   .  81EC F4000000 sub     esp, 0F4                         ;  程序停在这里【返回到程序领空是的位置】
  004010D6   .  56            push    esi
  004010D7   .  57            push    edi
  004010D8   .  B9 05000000   mov     ecx, 5
  004010DD   .  BE 60504000   mov     esi, 00405060
  004010E2   .  8D7C24 18     lea     edi, dword ptr [esp+18]
  
  接下来就是Run跟踪
  
  
  
  【第二部分:Run跟踪】
  1》分析代码
  
  接着上面的操作,程序此时停在004010D0这里,在Run跟踪钱,我们需要分析一下代码,快捷键是Ctrl+A【很多朋友无法Run跟踪,问题就在这里】
  -------------------------------------------------------------------------------
  
  
  2》 Run跟踪的大小设置
  
  选择Options>>Trace,设置大小为1M/45K
  其他的选项根据自己的要求设置.【按照自己的要求设置】
  -------------------------------------------------------------------------------
  
  
  
  3》 开始Run跟踪
  1.选择Debug>>Open or clear run trace,
  2.然后在004010D0右键,选择Run trace>>Add entries of all procudures
  3.F9运行程序,然后点击View>>Run trace查看跟踪记录,
  4.在记录处右键Profile module
  
  Profile of TraceMe
  Count      Address    First command                     Comment
  1.         004010D0   sub     esp, 0F4
  1.         00401340   push    ebp
  1.         00401360   xor     edx, edx
  
  双击00401360将来到关键位置.其他的分析打击自己完成吧
  ------------------------------------------------------------------------------
  
--------------------------------------------------------------------------------
【经验总结】
  消息断点+RUN跟踪 
  【思路】
            1. 按钮按下后,系统会处理对应的消息WM_LBUTTONUP,这个时候被断下,程序挺在系统领空
            2  系统领空返回到程序领空,在刚进入程序领空时停下
            3  从程序领空停下的位置,开始记录
            4  分析记录,得到关键信息
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2010年08月05日 21:17:06