,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。
但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。
注意:此函数只在 Windows 9x 系统上有效,在 Win NT/2K 系统上相关的函数是 memcpy,但在 Win NT/2K 上不同于 Windows 9x 上,很少再调用 memcpy 来处理数据了,用此函数设断基本上什么也拦不住。
2、 GetWindowText 函数此函数在 USER32.DLL 用户模块中,它的作用是复制指定窗口中的字符到缓冲区。
函数原型:int GetWindowTextHWND hWnd//欲获取文字的那个窗口的句柄LPTSTR lpString //预定义的一个缓冲区,至少有 cch1 个字符大小;随同窗口文字载入int nMaxCount//lpString 缓冲区的长度16 位:GetWindowText32 位:GetWindowTextA,GetWindowTextW3、 GetDlgItemText此函数在 USER32.DLL 用户模块中,它的作用是返回对话框中某一个窗口的标题或文字。
函数原型:UINT GetDlgItemTextHWND hDlg // 对话框句柄int nIDDlgItem //控制标识符LPTSTR lpString / 预定义的一个字符缓冲区int nMaxCount// 字符缓冲区的长度16 位:GetDlgItemText32 位:GetDlgItemTextA,GetDlgItemTextW4、 MessageBox 函数此函数是在 USER32.DLL 用户模块中,它的作用创建、显示和操作信息框。
函数原型:int MessageBoxHWND hWnd //窗口句柄LPCTSTR lpText // 信息框中文字的地址LPCTSTR lpCaption // 信息框标题地址UINT uType // 信息框类型16 位:MessageBox32 位:MessageBoxA,MessageBoxW学习 API 函数最好的资料就是《Windows 程序设计》这本书,下面列出其他一些参考资料:API 函数资料Win32 API reference(推荐)Windows API 函数手册(774 个 Win32 函数,中文)常见断点列表其他资料Win32 头文件公告请注意言行举止,不要让大家觉得不适!kanxue 4 2006-09-13 20:53:33 第三课 动态分析技术 所谓动态分析是利用调试器,如 OllyDBG 一步一步地单步执行软件。
常见的调试器有 SoftICE,OllyDBG(简称 OD) 等。
SoftICE 是一款经典的调试工具,运行在 Ring0 级,可以调试驱动。
但平时调试的程序都是 Ring3 级,因此推 荐大家用 OllyDBG,这款工具上手容易,功能十分强大,现在论坛上的文章基本都是用 OllyDBG 来讲解的。
3.1 OllyDBG 调试器 坛主资 料:注册日期: Apr OllyDBG 工具下载2004 点击此处下载 OD帖子: 10663精华: 7现金: 3393 Kx致谢数: 26 CCDebuger 的 OllyDBG 入门教学获感谢文章数:24 OllyDBG 入门系列(一)-认识 OllyDBG获会员感谢数:185 OllyDBG 入门系列(二)-字串参考 OllyDBG 入门系列(三)-函数参考 OllyDBG 入门系列(四)-内存断点 OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 名词解释 1.所谓领空,实际上是指:在某一时刻,CPU 的 CS:IPEIP 所指向的某一段代码的所有者所在的区域。
3.2 Olldbg 常见问题 Q: OD 中如何运行到光标所在处? A: 将光标移到目标位置,按 F4. Q: 如何用 OD 修改可执行程序? A:直接在反汇编代码区更改这时可以使用汇编代码更改然后选中修改后的汇编代码,右击--gt复制到可执行文 件--gt保存文件. Q:OD 中的代码乱码,如: 004365E0 gtdb 68 CHAR h 004365E1 gtdb A4 004365E2 gtdb 7A CHAR z 004365E3 gtdb E5 004365E4 gtdb B8004365E5 gtdb E8004365E6 gtdb BBA:OD 右键,quot分析/从模板中删除分析quot,如不行,按 CtrlA 重新分析Q:OD 为什么删除了断点,重新加载的时候,这些断点都会重新出现A:设置 ollydbg.ini,将配制文件里改成如下:Backup UDD files1 by kanxueQ:如何还原到 OD 到分析前的状态A:右键 分析/从模块中删除扫描Q:什么是 UDD?A:OllyDbg 把所有程序或模块相关的信息保存至单独的文件中,并在模块重新加载时继续使用。
这些信息包括了标签、注释、断点、监视、分析数据、条件等等Q:OD 的数据窗口显示一个下划线,是什么意思?A:重定位加下划线〔Underline fixups〕,几乎所有的 DLL 和一部分程序都包含重定位,这样就可以在内存中的不同基地址加载模块了。
当该项开启时,CPU 反汇编窗口或 CPU 数据窗口中的重定位地址都将添加下划线。
(xing_xsz)Q:如果已经知道某一 CALL 的具体作用能否把后面所有相同的 CALL 都改成函数名形式A:比如 CALL 110000 此中已经知道 110000 是一个核心计算则如下操作让光标停在 CALL 110000 这个语句上按回车键会跳到 110000 的地址上去显示之后让光标停在 110000 上按shift 和 分号 其实就是完成一个:冒号的动作输入名称这回所有的调用 110000 处都会显示 CALL 你刚才输入的名称了.nig 回答Q:用 OD 调试一些加壳程序,如 Themida 等,可能你会发现下断后(包括硬件断点),程序跑到断点时,OD 会出现假死现像。
A:打开 OD 配置文件 ollydbg.ini,你会发现:Restore windows 123346 //这个 Restore windows 可能会是一个很大的值现在只需要将 Restore windows=0,重新用 OD 调试程序,假死问题就消失了。
kanxueQ:ollydbg 中如何调用 pdb 文件?A:pdb 文件是 VC调试编译生成的文件。
由编译器直接生成。
pdb 文件要配合源文件使用。
不同的源文件 pdb 文件不同。
用 OD 装入可执行文件后,点击 CPU 窗口中的注释段可出现源码。
不过不是所有的源码都可以显示的。
VC6.0 以下都可以显示。
还有一种不显示的原因是缺少路径。
点击 OD 主菜单的查看-gt源文件如果源码段出现缺少字样的话,说明此路径的源码是看不了的。
设置正确的路径就可以了。
(nantz 回答)Q:运行 A.exe,其会调用 B.exe,如果用 OD 再附加 B.exe,OD 会死掉A:1.OD 菜单,设置 OD 为即时调试器;2.将 B.exe 的入口改成 CC,即 INT 3 指令,同时记下原指令3.运行 A.exe,其调用 B.exe,会导致异常,OD 会自动启动加载 B.exe,此时你将 INT 3 指令恢复原指令。
4.到这步,你己可以任意调试 B.exe 了kanxueQ:用 ollydbg 调试的时候,断住 kernel32.dll 系统函数,然后”执行到用户代码“,就可以回到被调程序的代码。
但有时候却回不来,不知道这又是为什么?A:多半是杀毒软件(如卡巴对 LoadLibraryA)Hook API 入口代码进入 ring 0 了,OllyDbg 不能单步跟踪,这种情况下只要看堆栈返回地址,在返回地址上下端点,F9 执行就可以了。
(cyclotron 回答)Q:OD 的“复制可执行文件”后面没有 “所有修改”的菜单A:OD 识别代码段范围失败后 没有复制 all modifications 的选项 因为这个是复制代码段内的修改的。
(曾半仙回答)Q:OD 里的 patch 窗口怎么用?A:patch 窗口用来保存你在调试的程序中修改过的代码的。
在 比如你前面调试了一个程序, OD 中把某处的 JE 改成了 JMP,OD 会在 patch 中记录这个修改,你下次再重新载入程序时,就能在 OD 的 patch 窗口中看到你原来改动的代码。
按空格键就可以激活 patch,就是在 OD 中还把原来位置的 JE 改成 JMP。
这个只是在 OD 中作更改,并没有实际保存到文件,主要是比较方便在 OD 中修改程序时测试。
CCDebuger 回答OllyDBG 技巧汇集OllyDBG 的命令行解释OllyDBG 里 SHIFTF4 条件断点用法篇OllyDbg 实用技巧六则OllyDBG 的教学-Run trace3.3 Olldbg 脚本教学这部分有点难度,新手可以跳过,等水平提高后回头再学习。
OD 脚本教学认识 ODbgScriptODbgScript 的命令ODbgScript 的脚本命令2ODbgScript 的 注意事项和使用技巧OllyScript v0.92 中文帮助文档也谈写
上一篇:
图形编程基础MFC
下一篇:
病理学实验课多样化教学方法探讨