入门系统六消息断点及RUN跟踪补充_第1页
入门系统六消息断点及RUN跟踪补充_第2页
入门系统六消息断点及RUN跟踪补充_第3页
入门系统六消息断点及RUN跟踪补充_第4页
入门系统六消息断点及RUN跟踪补充_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OllyDBG 入门系统(六)-消息断点及RUN跟踪补充 看完了0IlyDBG 入门系统(五)-消息断点及 RUN跟踪之后感觉如何?会否有如下问题: 1、是否觉得不知道在哪下断? 2、为什么要这样子下断? 3、如何确定断下来后的位置就是正确的? 好,就本着这几个问题来分析一遍。 首先,先回顾下 Windows的消息机制。要点:所有要处理的消息必然会由程序自己处理, 不处理的消息都交由 Windows处理。Windows的消息处理函数的格式,如下: LRESULT CALLBACK Win dowProc( HWND hwnd,/ han dle of wi ndow UINT uMsg, /

2、message ide ntifier WPARAM wParam, / first message parameter LPARAM lParam/ sec ond message parameter ); 其中uMsg就是关键,它代表消息的类型,如:WM_COMMAND,WM_GETTEXT等。记好 哦。 F面,我们来用实例讲解。 这个CrackMe是用对话框做的(你是怎么知道的?)。 1、用 OllyDbg 加载,Crtl N,找到函数:USER32.DialogBoxParamA,右击- “在每个 参考上设置断点”。 2、F9,运行。看,被拦了下来,如图: 00401 OtIO $ p

3、ush 10401102 - 00401007| - nou 0 0401 60C push 0048100E push 00481013 - push - push 00401017| L push 0040101D L_ call OrpModule - NULL s t Q006049A -uuutuy* 0O06049A it0e049A .0006049A nnncn jfia 刷新 COOOOSEa LLHJUKfrr COOOPFFF 00000067 00000003 fitvmnrtia 94C30A4 00010100 50010060 OOOOOE04 UJUJULiU

4、OCOCOC04 OCOCOC04 DC000004 00000004 (M000204 bLRJZUUJU 50020000 50010000 50010000 跟随 Cl assProc 在ClwsProc上切换斷点 在ClsProc上设条件恒录斯点 cnri10000 ooeo oooo oooo 壬主土主主主主主主圭 宣制到剪贴板 排序按 界面选顼 vi晁 MakeCHIL coh 要下消息断点,首先得找到具有Windows消息处理函数格式的函数,然后,再根据栈的数 据来判断消息,如果符合下断的消息,那么,OllyDbg就会拦下来(还会觉得不知道在哪下 消息断点了吗?知道该如何下消息断

5、点了吧?)。很明显有一点,这个消息断点的功能是有 限的,比如,要拦主窗口中的菜单消息呢?所以,消息断点的功能还是有限的。如何扩展? 扯远了,下面再讲。 4、Ctrl G来到cyle.0041029,我们来到了消息处理函数了,但是, OllyDbg并未识别出 这个函数是消息处理函数。所以,在cyle.0041029处,右击- “分析”- “假定参数”,女口 图: 复制到可执行文件 分折P AJunk Asm2Clipho9rd 书签 去除花扌旨令 超级拷贝 假定参数 分析代码Ctrl+A 風税块中移除分析 扫描目标立件)Ctrl+O 从模块中移除目标扫描 从选奄内查宁 在下廂襯r 弹出一个对话框

6、,选择“ WinProc(hWnd,msg,wParam,IParam) ”。 假定参数穆于00401029 选定命令是使用以下参数的函数入口点: 无爲除已有解码) WinPr “断点”- “在 Win Proc上的消息断点”(平时是不是没见过 这个菜单呀?呵呵)。 3切换F2 耳条塚4MakeCHM?fcBin 条件记录(L)Shi ft+F4 HIT跟產 RW跟踪 在“消息”列表框中,选择你要下断的消息 (AltB,删除以前的断点,以免影响心情)。 5、 6、F9,运行,程序运行起来了。这时没什么事情发生,当你在里面点了一个文本框之后 (点它,是想让它获得 Focus(焦点),以便能够输入

7、数据),事情就发生了。现在没办法在文 本框里输入注册码,也没办法点击按钮。这是怎么回事呢?仔细看一下 口,噢!原来被 文本框的 通知EN_SETFOUCE 搞坏了!停留在 EN_KILLFOCUS两个消息之间了。 7、好,现在来扩展消息断点(消息断点是否是条件断点的特殊例子?) (卖弄了一下,呵呵)。 Stack(栈)的那个窗 EN SETFOCUS 和 ,即使用条件断点 1 KTT跟踪 RUN跟晾 此St为新EIF 转到 数据窗口中跟随 查看调用树 Ctrlil 杏粧) 切孰 F2 条件 Shi ft+F2 案件IE录 Sht+F4 1在WinTroc上的消息斷点 运行到选定垃置 F斗 內存

8、访问 內存写入(11 MakeCHIL com 看你需求,条件和条件记录,在这里是没什么区别的,因为不需要记录的内容。 8、按 Shitf F2,输入 MSG =WM_COMMAND 解码为 0040102D |. push ebx 0040102E |. push edi 0040102F |. push esi 00401030 |. cmp arg.2, 110 00401037 |. je short cycle.0040105E 00401039 |. cmp arg.2, 111 /111=WM_COMMAND 00401040 |. je short cycle.00401082

9、 / 肯定在这里跳(为什么?) 00401042 |. cmp arg.2, 10 00401046 |. je short cycle.00401057 00401048 |. cmp arg.2, 2 0040104C |. je short cycle.00401057 0040104E |. xor eax, eax 11、来到 cycle.00401082 , 00401082 | cmp arg.3, 67 00401086 |. jnz short cycle.0040108D /这里肯定会跳 00401088 |. call cycle.00401151 0040108D |

10、cmp arg.3, 66 00401091 |. jnz short cycle.00401098 / 这里肯定不会跳(又是为什么呢?) 00401093 |. call cycle.0040109C/关键, 00401098 | xor eax, eax 12、蓝色部分, 已经在 CCDebuger 那篇文章分析过了,这里就不分析了,我用红色字体来 标明重点。 0040109C /$ mov dword ptr ds:402182, FEDCBA98 004010A6 |. push 11 ; /Count = 11 (17.) 004010A8 |. push cycle.0040217

11、1 ; |Buffer = cycle.00402171 004010AD |. push 3E9 ; |ControlID = 3E9 (1001.) 004010B2 |. push arg.1 |hWnd 004010B5 |. call ; GetDlgItemTextA ( Serial ) 004010BA |. or eax, eax 004010BC |. je short cycle.0040111F 004010BE |. push 11 ; /Count = 11 (17.) 004010C0 |. push cycle.00402160 ; |Buffer = cycl

12、e.00402160 004010C5 |. push 3E8 ; |ControlID = 3E8 (1000.) 004010CA |. push arg.1 ; |hWnd 004010CD |. call ; GetDlgItemTextA ( name) 004010D2 |. or eax, eax 004010D4 |. je short cycle.0040111F 004010D6 |. mov ecx, 10 004010DB |. sub ecx, eax 00401105 |. call cycle.004011F1/算法 0040110A |. mov ecx, 0F

13、F01 0040110F |. push ecx 00401110 |. call cycle.00401190 /算法 00401115 |. cmp ecx, 1 00401118 |. je short cycle.00401120 /需要跳 0040111A | call cycle.00401166 0040111F | retn 00401120 | mov eax, dword ptr ds:402168 00401125 |. mov ebx, dword ptr ds:40216C 0040112B |. xor eax, ebx 0040112D |. xor eax, d

14、word ptr ds:402182 00401133 |. or eax, 40404040 00401138 |. and eax, 77777777 0040113D |. xor eax, dword ptr ds:402179 00401143 |. xor eax, dword ptr ds:40217D 00401149 |.A jnz short cycle.0040111A /不可以跳 0040114B |. call cycle.0040117B/提示注册成功 00401150 . retn 004010DD |. mov esi, cycle.00402160 00401

15、0E2 |. mov edi, esi 004010E4 |. add edi, eax 004010E6 |. cld 004010E7 |. rep movs byte ptr es:edi, byte ptr 004010E9 |. xor ecx, ecx 004010EB |. mov esi, cycle.00402171 004010F0 | /inc ecx 004010F1 |. |lods byte ptr ds:esi 004010F2 |. |or al, al 004010F4 |. |je short cycle.00401100 004010F6 |. |cmp

16、al, 7E 004010F8 |. |jg short cycle.00401100 004010FA |. |cmp al, 30 004010FC |. |jb short cycle.00401100 004010FE |.A jmp short cycle.004010F0 00401100 | cmp ecx, 11 00401103 |. jnz short cycle.0040111F /判断长度是否为 字节,不是则跳 16 个有效字符,即 16 个 Esp 终于写完了,现在来回顾下刚开始的问题: 1、 是否觉得不知道在哪下断? 答:在 Windows 消息处理函数的入口处下消

17、息断点。 2、 为什么要这样子下断? 答:可能 OllyDbg 是根据栈的数据和函数原型来匹配, 所以,一般来说, 匹配条件都会是 XX =XXXXX 3、 如何确定断下来后的位置就是正确的? 答:这里是根据编程的思路以及 Windows 的消息处理机制来定位的,理论与实战相结合。 最后,总结下,由于 windows 是消息驱动的,很大一部分都是通过消息来完成的,所以, 有很大一部分可以通过对消息下断来达到目的, 但是, 如何下消息断点?从大体上讲, 是这 样子的: 1、找出消息循环处理的函数2、在消息循环处理函数的入口处设断 写到这里,废话一下。赞扬 CCDebuger 的太多了,但是,在赞

18、扬的同时,不知道大家有没 仔细消化人家的成果?呵呵,其实,我也没有,因为我看不太懂,所以,还是照着自己的思 路走。写这篇文章的目的是为了帮一位朋友,他想下消息断点,但是,不知道如何下,我就 把 CCDebuger 的这那篇消息断点给他,可是,还是没解决,后来,自己也动了一下手,确 实,对于 WM_COMMAND 消息来说, OD 肯定会不停的拦下来的,所以,单纯的消息断点 就行不通了,所以,再结合 Run 跟踪来记录下,刚好能解决问题,也就产生了 CCDebuger 的那篇文章(猜的,呵呵) 。 最后,帮忙纠正下错误: 引用: 写到这准备跟踪算法时,才发现这个 crackme 还是挺复杂的,具体算法我就不写了,实在 没那么多时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论