设为主页 | 加入收藏 | 繁體中文

OllyDBG 入门系列(三)-函数参考

GetDlgItemTextA,另一个是 UNICODE 版,在函数后添加一个 W 表现。如 GetDlgItemTextW。对付编译为 UNCODE 版的步伐大概在 Win98 下不能运转,因为 Win98 并非是完全支持 UNICODE 的体系。而 NT 体系则从底层支持 UNICODE,它可以在操纵体系内对字串举行转换,同时支持 ASCII 和 UNICODE 版本函数的挪用。一般我们翻开的步伐看到的挪用都是 ASCII 范例的函数,以“A”末端。又跑题了,呵呵。现在回到我们调试的步伐下去,我们现在便是要找一下我们调试的步伐有没有挪用 GetDlgItemTextA 或 GetWindowTextA 函数。还好,找到一个 GetWindowTextA。在这个函数上右击,在弹出菜单上选择“在每个参考上设置断点”,我们会在 OllyDBG 窗口最下面的那个形态栏里看到“已设置 2 个断点”。另一种要领便是那个 GetWindowTextA 函数上右击,在弹出菜单上选择“查找输入函数参考”(或者按回车键),将会出现下面的对话框:


  看上图,我们可以把两条都设上断点。这个步伐只需在第一条指令设断点就可以了。好,我们现在按后面提到的第一条要领,便是“在每个参考上设置断点”,这样上图中的两条指令都市设上断点。断点设好后我们转到我们调试的步伐下去,现在我们在被我们调试的步伐上点击那个“Check It”按钮,被 OllyDBG 断下:
  00401323 |. E8 4C010000         CALL            ; GetWindowTextA
  00401328 |. E8 A5000000         CALL CrackHea.004013D2                      ; 关键,要按F7键跟进去
  0040132D |. 3BC6                CMP EAX,ESI                                 ; 比较
  0040132F |. 75 42               JNZ SHORT CrackHea.00401373                 ; 不等则完蛋
  00401331 |. EB 2C               JMP SHORT CrackHea.0040135F
  00401333 |. 4E 6F 77 20 7>      ASCII "Now write a keyg"
  00401343 |. 65 6E 20 61 6>      ASCII "en and tut and y"
  00401353 |. 6F 75 27 72 6>      ASCII "ou're done.",0
  0040135F |> 6A 00               PUSH 0                                      ; Style = MB_OK|MB_APPLMODAL
  00401361 |. 68 0F304000         PUSH CrackHea.0040300F                      ; Title = "Crudd's Crack Head"
  00401366 |. 68 33134000         PUSH CrackHea.00401333                      ; Text = "Now write a keygen and tut and you're done."
  0040136B |. FF75 08             PUSH DWORD PTR SS:[EBP+8]                   ; hOwner
  0040136E |. E8 19010000         CALL               ; MessageBoxA
  从下面的代码,我们很容易看出 00401328 地址处的 CALL CrackHea.004013D2 是关键,必需仔细跟踪。而注册乐成则会表现一个对话框,标题是“Crudd's Crack Head”,对话框表现的内容是“Now write a keygen and tut and you're done.”现在我按一下 F8,准备步进到 00401328 地址处的那条 CALL CrackHea.004013D2 指令后再按 F7 键跟进去。等等,怎样回事?怎样按一下 F8 键跑到这来了:
  00401474 $- FF25 2C204000      JMP DWORD PTR DS:[<&USER32.GetWindowText>    ; USER32.GetWindowTextA
  0040147A $- FF25 30204000      JMP DWORD PTR DS:[<&USER32.LoadCursorA>]  &nbsp;  ; USER32.LoadCursorA
  00401480 $- FF25 1C204000      JMP DWORD PTR DS:[<&USER32.LoadIconA>]       ; USER32.LoadIconA
  00401486 $- FF25 20204000      JMP DWORD PTR DS:[<&USER32.LoadMenuA>]       ; USER32.LoadMenuA
  0040148C $- FF25 24204000      JMP DWORD PTR DS:[<&USER32.MessageBoxA>]     ; USER32.MessageBoxA
  原来是跳到另一个断点了。这个断点我们不必要,按一下 F2 键删失它吧。删失 00401474 地址处的断点后,我再按 F8 键,呵,完了,跑到 User32.dll 的领空了。看一下 OllyDBG 的标题栏:“[CPU - 主线程, 模块 - USER32],跑到体系领空了,OllyDBG 反汇编窗口中表现代码是这样:
  77D3213C 6A 0C                 PUSH 0C
  77D3213E 68 A021D377           PUSH USER32.77D321A0
  77D32143 E8 7864FEFF           CALL USER32.77D185C0
  怎样办?别急,我们按一下 ALT+F9 组合键,呵,返来了:
  00401328 |. E8 A5000000        CALL CrackHea.004013D2                     ; 关键,要按F7键跟进去
  0040132D |. 3BC6               CMP EAX,ESI                                ; 比较
  0040132F |. 75 42              JNZ SHORT CrackHea.00401373                ; 不等则完蛋
  光标停在 00401328 地址处的那条指令上。现在我们按 F7 键跟进:
  004013D2 /$ 56                PUSH ESI                                    ; ESI入栈
  004013D3 |. 33C0              XOR EAX,EAX                                 ; EAX清零
  004013D5 |. 8D35 C4334000     LEA ESI,DWORD PTR DS:[4033C4]               ; 把注册码框中的数值送到ESI
  004013DB |. 33C9              XOR ECX,ECX                                 ; ECX清零
  004013DD |. 33D2              XOR EDX,EDX                                 ; EDX清零
  004013DF |. 8A06              MOV AL,BYTE PTR DS:[ESI]                    ; 把注册码中的每个字符送到AL
  004013E1 |. 46                INC ESI                                     ; 指针加1,指向下一个字符


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: