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

导读: 现在进入第三篇,这一篇我们重点讲解怎样使用 OllyDBG 中的函数参考(即名称参考)功能。仍然选择  crackmes.cjb.net 镜像打包中的一个名称为 CrackHead 的crackme。老规矩,先运行一下 这个程序看看: OllyDBG 入门系列(三)-函数参考_第1张图片 呵,竟然没找到输入注册码的地方!别急,我们点一下程序上的那个菜单“Shit”(真是 Shit 啊,呵呵),在下拉菜单中选“Try It”,会来到如下界面: OllyDBG 入门系列(三)-函数参考_第2张图片  我们点一下那个“Check It”按钮试一下,哦,竟然没反应!我再输个“ 78787878”试试,还是没反应。再试试输入字母或其它字符,输不进去。由此判断注册码应该都是数字,只有输入正确的注册码才有动静。用  PEiD 检测一下,结果为 MASM32 / TASM32,怪不得程序比较小。信息收集的差不 多了,现在关掉这个程序,我们用 OllyDBG 载入,按 F9 键直接让它运行起来,依次点击上面图中所说 的菜单,使被调试程序显示如上面的第二个图。先不要点那个“Check It”按钮,保留上图的状态。现在我们没有什 么字串好参考了,我们就在 API 函数上下断点,来让被调试程序中断在我们希望的地方。我们在  OllyDBG 的反汇编窗口中右击鼠标,在弹出菜单中选择 查找->当前模块中的名称 (标签),或者我们通过按  CTR+N 组合键也可以达到同样的效果(注意在进行此操作时要在 OllyDBG 中保证是在当前被调试程 序的领空,我在第一篇中已经介绍了领空的概念,如我这里调试这个程序时 OllyDBG 的标题栏显示的就是“ [CPU - 主线程, 模块 - CrackHea]”,这表明我们当前在被调试程序 的领空)。通过上面的操作后会弹出一个对话框,如图: OllyDBG 入门系列(三)-函数参考_第3张图片 对于这样的编辑框中输注册码的程序我们要设断点首选的 API 函数就是 GetDlgItemText 及  GetWindowText。每个函数都有两个版本,一个是 ASCII 版,在函数后添加一个  A 表示,如 GetDlgItemTextA,另一个是 UNICODE 版,在函数后添加一个  W 表示。如 GetDlgItemTextW。对于编译为 UNCODE 版的程序可能在  Win98 下不能运行,因为 Win98 并非是完全支持 UNICODE 的系统。而  NT 系统则从底层支持 UNICODE,它可以在操作系统内对字串进行转换,同时支持  ASCII 和 UNICODE 版本函数的调用。一般我们打开的程序看到的调用都是 ASCII  类型的函数,以“A”结尾。又跑题了,呵呵。现在回到我们调试的程序上来,我们现在就是要找一下我们调试的程序有没有调用  GetDlgItemTextA 或 GetWindowTextA 函数。还好,找到一个  GetWindowTextA。在这个函数上右击,在弹出菜单上选择“在每个参考上设置断点”,我们会在  OllyDBG 窗口最下面的那个状态栏里看到“已设置 2 个断点”。另一种方法就是那个  GetWindowTextA 函数上右击,在弹出菜单上选择“查找输入函数参考”(或者按回车键),将 会出现下面的对话框: OllyDBG 入门系列(三)-函数参考_第4张图片  看上图,我们可以把两条都设上断点。这个程序只需在第一条指令设断点就可以了。好,我们现在按前面提到的第一条方法,就是“在每个参考上设置 断点”,这样上图中的两条指令都会设上断点。断点设好后我们转到我们调试的程序上来,现在我们在被我们调试的程序上点击那个“ Check It”按钮,被 OllyDBG 断下: 00401323 |. E8 4C010000         CALL 
上传的附件
crackhead.zip (2006-02-14 23:34, 0, 6888 次下载)
本文转自 http://bbs.pediy.com/showthread.php?s=&threadid=21330

你可能感兴趣的:(c,api,汇编)