OllyDbg打API断点失败,求指点!!!

jamseyang 2011-08-29 04:19:02
使用OllyDbg加载EXE后,在左下角的命令窗口输入bp MessageBoxA,然后按F9执行程序,弹出消息框,但是没有被OllyDbg断下。请问各位大虾应该怎么下API断点,最好能详细。(PS:不要告诉我使用字符串参考和当前模块中的名称,谢谢!)
代码如下:

#include <windows.h>
#include <stdio.h>
typedef int (WINAPI *PMessageBox)(
HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style
);

int main(int argc, char* argv[])
{
char szText[128] = "HelloWorld!";
char szCaption[10] = "Hi";
PMessageBox MsgBox = (PMessageBox)GetProcAddress(LoadLibrary("User32.dll"), "MessageBoxA");
if (MsgBox)
{
MsgBox(NULL, szText, szCaption, 0);
}
else
{
printf("MsgBox is NULL\n");
}
return 0;
}

...全文
521 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamseyang 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 c_losed 的回复:]

引用 11 楼 jamseyang 的回复:

引用 10 楼 jamseyang 的回复:

我又调试了下,在GetProcAddress下断点,获取MessageBoxA的地址是7791EA71,
然后在OllyDbg的命令窗口输入bpx 7791EA71回车,发现无法进入这个断点,求指点,谢谢。

把bpx 7791EA71换成bp 7791EA71可以进入断点了,请问这两个……
[/Quote]
谢谢,我知道区别了。

请问bpx 7791EA71不行,那么我怎么下断点才能在Call MessageBoxA的时候断下呢?
jamseyang 2011-08-30
  • 打赏
  • 举报
回复
关于OD调试,大家有什么好的方法可以指教下!
jamseyang 2011-08-30
  • 打赏
  • 举报
回复
谢谢大家,问题已解决。
说下我的方法:
1、先在GetProcAddress下断点,获取到MessageBoxA的地址,在User领空的MessageBoxA出下断点A
2、程序中所有调用MessageBoxA都会在断点A处中断
3、在OD右下角可以看到“CALL 到 MessageBoxA 来自 XXXX”这样的信息
4、记录下所有XXXX
5、重新开始调试,在所有XXXX的地址处下断点
c_losed 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jamseyang 的回复:]

引用 10 楼 jamseyang 的回复:

我又调试了下,在GetProcAddress下断点,获取MessageBoxA的地址是7791EA71,
然后在OllyDbg的命令窗口输入bpx 7791EA71回车,发现无法进入这个断点,求指点,谢谢。

把bpx 7791EA71换成bp 7791EA71可以进入断点了,请问这两个有什么区别呀?
[/Quote]
区别如下
jamseyang 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jamseyang 的回复:]

我又调试了下,在GetProcAddress下断点,获取MessageBoxA的地址是7791EA71,
然后在OllyDbg的命令窗口输入bpx 7791EA71回车,发现无法进入这个断点,求指点,谢谢。
[/Quote]
把bpx 7791EA71换成bp 7791EA71可以进入断点了,请问这两个有什么区别呀?
jamseyang 2011-08-29
  • 打赏
  • 举报
回复
我又调试了下,在GetProcAddress下断点,获取MessageBoxA的地址是7791EA71,
然后在OllyDbg的命令窗口输入bpx 7791EA71回车,发现无法进入这个断点,求指点,谢谢。
jamseyang 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 stjay 的回复:]

引用 5 楼 jamseyang 的回复:

引用 3 楼 stjay 的回复:

exe是控制台程序,并未引入User32.dll
是动态加载的
OllyDbg载入exe后,还没有User32.dll,所以bp MessageBoxA根本就找不到MessageBoxA的地址

谢谢你的回复,请问
1、如果是动态加载的应该怎么下断点
2、如果是MFC中成员函数MessageB……
[/Quote]
谢谢你的热心回复。
1、LoadLibraryW下断,直到相应的模块加载进来,再下API断点
我试试了下,发现不行,不知道你有试过没有?
stjay 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jamseyang 的回复:]

引用 3 楼 stjay 的回复:

exe是控制台程序,并未引入User32.dll
是动态加载的
OllyDbg载入exe后,还没有User32.dll,所以bp MessageBoxA根本就找不到MessageBoxA的地址

谢谢你的回复,请问
1、如果是动态加载的应该怎么下断点
2、如果是MFC中成员函数MessageBox怎么下断点
[/Quote]

1.一般是加壳才会这么干,或者使用低版本SDK编写造成(头文件没相应的API)
LoadLibraryW下断,直到相应的模块加载进来,再下API断点
2.MFC导出函数貌似只有编号,这个忘记怎找对应的函数名
stjay 2011-08-29
  • 打赏
  • 举报
回复
关于OllyDbg的一些技巧
可以去看雪论坛学习
vrace 2011-08-29
  • 打赏
  • 举报
回复
先在 LoadLibraryA 断下来,然后再断 MessageBoxA 试试呢
jamseyang 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stjay 的回复:]

exe是控制台程序,并未引入User32.dll
是动态加载的
OllyDbg载入exe后,还没有User32.dll,所以bp MessageBoxA根本就找不到MessageBoxA的地址
[/Quote]
谢谢你的回复,请问
1、如果是动态加载的应该怎么下断点
2、如果是MFC中成员函数MessageBox怎么下断点
c_losed 2011-08-29
  • 打赏
  • 举报
回复
这个下MessageBoxW好像也不行吧
看lz的做法 等于动态获取MessageBoxA的地址 然后自己重新改变下名字
所以下断点无效...
断点只能下LoadLibrary或GetProcAddress
stjay 2011-08-29
  • 打赏
  • 举报
回复
exe是控制台程序,并未引入User32.dll
是动态加载的
OllyDbg载入exe后,还没有User32.dll,所以bp MessageBoxA根本就找不到MessageBoxA的地址
jamseyang 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

用的是MessageBoxW呢?
[/Quote]
谢谢你的回复,是MessageBoxA。
ouyh12345 2011-08-29
  • 打赏
  • 举报
回复
用的是MessageBoxW呢?
程序名称:OllyDBG版 本:1.10汉 化 人:cao_cong联系方式:cao_cong_hx@yahoo.com.cn汉化日期:2005.11.28汉化说明: 本来是想等 OllyDBG 2.0 出来再汉化的,可看到dyk158兄弟的修改版说明中对我原来汉化版本的汉化质量提了一点小小的意见,想想也是,我原来的汉化版是OllyDBG 1.10 的最终版本刚出来时汉化的,距今已经一年多了也没有更新过,当时只顾不出因汉化造成的Bug,汉化嘛确实不咋的。看到BoOMBoX/TSRh2004他们制作的美化界面,确实也觉得漂亮,最后决定再出个汉化版本。这个版本的汉化加测试、修改花了我整整两个星期的业余时间,其中的非标字符对照文本有4000多行,看一遍都半天。这个版本中的所有翻译我都重新过了几遍,绝大部分都重新翻译过,力做到准确,希望能给大家一个比较完美的汉化版本。在制作过程中参考了TT小组翻译的OllyDBG帮助及dyk158修改、聆风听雨汉化的ODbyDYK修改版,主要是想让翻译更准确一点,能让新手把汉化版和TT小组汉化的帮助文档对照起来学习。在此对以上提到的各位表示衷心的感谢! 这个软件汉化起来确实是个苦差事,不光是要翻译的资源多,还有一个重要的方面就是稍不留神就会出现汉化引起的Bug。经常是用原版来调试汉化版找问题,象原来菜单上的“&Window”汉化后会出错,还是调试后才知道原来它内部加载菜单时还有个这个“&Window”,只有两个都汉化才不会出错。另外其它的许多问题都只好靠调试来解决。原来汉化时又没有把要注意的地方写下来,这次光测试就花了好几天。 这个汉化版本除因汉化必要而打补丁外,我不准备再对它打任何补丁。一是我怕打补丁影响 OllyDBG 的兼容性;二是已经有Fly和dyk158他们做了,我想我自己再做的话也不会比他们做的更好;三是我实在是感到太累了!如果大家要想要修改的版本的话,推荐使用freecat兄弟制作的AutoPath,我把这个插件放在 FixOD 目录下,我把freecat兄弟发布时所用的说明也放在同一目录下,大家可以根据说明来使用这个插件改造你的OllyDBG。 在这里我要感谢看雪论坛上的看雪老大和论坛上各位兄弟的支持,正是有了他们的测试和建议,经过多次修正后,才有了今天的这个最终版本,由衷的感谢看雪论坛上的各位兄弟!汉化第二版主要更新:1、界面采用 BoOMBoX/TSRh2004 制作的美化界面,主要为了好看一点。2、绝大部分句子都重新翻译过,力做到准确。3、配置文件中除字体、语法高亮、颜色这几个部分保留为中文外,其它的都恢复为英文。保留字体、语法高亮、颜色这几个部分为中文的目的是因为我发现若先运行过英文版配置好后,汉化版中对应这几个部分的一些菜单也会取原英文版配置中的英文字串,而不是汉化过的字串。我觉得翻译后既能保持与英文版的兼容性,又能让英文版与中文版的界面等互不干扰。4、dyk158 建议我把配置文件中的字体、语法高亮、颜色这几个部分恢复为英文,我专门做了个恢复为英文配置的补丁(如果你以前运行过英文版进行了相应配置,则补丁后的汉化版本对应这几个部分的相应菜单将会显示英文,若你是用打过这个补丁的汉化版本生成配置文件,则相应菜单将会显示中文)放在英文配置补丁目录下,需要字体、语法高亮、颜色这部分也用英文配置的朋友可以把这个补丁放到我做的汉化版的安装目录,选择 Ollydbg.exe 补丁就可以了。这个补丁同样适用于原版界面的汉化版本。5、上一版中部分未汉化的内容这次除了不能汉化的外,基本上都已汉化。6、另有一个界面未作美化的汉化版放在原版界面目录,可以按自己的喜好选择使用哪一个。7、FixOD 目录下放的是用 freecat 的 AutoPath.dll 打过补丁的 OllyDBG,使用前请先备份好你原来的Ollydbg.exe文件,再把这个目录下的Ollydbg.exe、AutoPath.dll、AutoPath.ini复制到你的OllyDBG安装目录下就可以了。在上一版的基础上,插件做了如下更新:1、脚本插件 ODbgScript.dll (v1.23 汉化版)2、快捷命令插件 CmdBar.dll (v3.10.109c 汉化版,这个版本有支持运行 OllyScript 脚本的命令:OSC)3、标签插件 Labeler.dll (v1.33.108 汉化版)4、图表插件 OllyFlow.dll (v0.71 汉化版,我从IDA中提取了个wingraph32.exe放在插件目录下,用于配合这个插件)5、断点管理 olly_bp_man.dll (汉化版,在我机器上不能用,放在备用目录)6、字串参考修改版本 ustrrefadd.dll (汉化版)另外还添加了dyk158 汉化的两个插件:1、脱壳插件 OllyDump.dll (V3.00.110 dyk158 汉化版)2、脱壳插件 pedumper.dll (v3.03 dyk158 汉化版) 推荐大家试用一下这两个插件:ApiBreak 插件,用于在对话框、字串、注册表、时间、内存等 API 函数上设置断点,还可设置万能断点,简单易用;GODUP 插件,包含 Map 载入器、资源查看器、进程查看器、IDA 签名载入程序及自带的一个记事本这五个工具。感觉它自带的记事本用来在调试时记一些东西比较方便。 如果你以前没用过OllyDBG的话,我要提醒你使用前先在菜单的 选项->界面->目录 中把插件和 UDD 的路径设置好,以免影响使用! 此汉化版中的插件除了一个 PuntosMagicos.dll 插件没汉化外(我实在是弄不懂是哪国语言),其它的插件都已汉化。目录下的OLLYDBG.HLP帮助文件是由TT小组翻译的中文帮助,在此对TT小组的辛勤劳动表示感谢!(OLLYDBG_EN.HLP为原版英文帮助)声明: 1.本汉化软件包内的所有英文及其他语言的源程序的版权归原作者(公司)所有。 2.本人不对使用本汉化软件造成的任何情况的损失负责。 3.本汉化软件仅供学习研究之用。严禁用于商业用途。本人不对使用本汉化软件造成的任何法律纠纷负责。 4.如果你对本汉化软件有什么建议请联系我。 5.请在转载时保留此汉化版的完整性。
32位汇编级调试器Ollydbg2.01简繁中文版 : Ollydbg2.01版是一个由Oleh Yuschuk2013年9月24发布的32位汇编级调试器,32位汇编级调试器Ollydbg2.01简繁中文版由正思软件工作室翻译发布。 此中间版开始支持插件和自定义快捷键. OllyDbg的是一个32位汇编级Microsoft的Windows的分析调试器。二进制代码分析的重点,特别是在源代码不可用的情况下非常有用。 特别亮点: 直观的用户界面,没有隐藏的命令. 代码分析 - 跟踪寄存器,确认过程,循环,API调用,分支,表,常量和字符串 直接运行和调试的DLL 对象文件扫描 - 从对象文件和库位于例程 允许用户定义的标签,备注和功能描述 识别在Borland ®格式的调试信息 会话之间保存的补丁程序,并将其写入可执行文件,并更新链接地址 开放式架构 - 支持许多第三方插件 无需安装 - 没有注册表或系统目录中的垃圾 调试多线程应用程序 附加到正在运行的程序 配置反汇编器,支持MASM的和IDEAL的格式 MMX,3DNOW!和SSE数据类型和说明,包括速龙Athlon扩展 完整的Unicode支持 动态识别ASCII和Unicode字符串 - 在Delphi格式! 识别复杂的代码结构,如呼叫跳转到程序 解码1900多个标准的API和400 C函数调用 提供来自外部的帮助文件的API函数的上下文敏感的帮助 设置条件,日志记录,内存和硬件断点 跟踪程序的执行,记录已知函数的参数 显示调整信息 动态跟踪堆栈帧 搜索不精确的命令和摸糊的二进制序列 搜索整个分配的内存 查找引用常量或地址范围 审查和修改内存,设置断点和暂停运行方案 组装成二进制形式的最短的命令 从软盘启动 很多,很多!

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧