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
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
从下面的代码,我们很容易看出 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>] ; 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:
评论加载中...
|