使用 OllyDbg 捕获 MessageBox 调用

逆向工程 拆卸
2021-07-09 10:08:00

我正在尝试使用 Lena 的教程来学习绕过 Ollydbg。后者基于 v.1.10,但我使用的是 2.01。到目前为止一切顺利。

但是,我现在发现自己的结果与教程(第 4 号)有很大不同。

我试图在代码中接听对消息框的调用。该教程描述了我应该在消息框打开的情况下暂停 Ollydbg,然后返回应用程序并关闭消息框。这将使 Ollydbg 在我单击该框后中断,并且我将在代码中的 messagebox 调用之后立即登陆。

不过就我而言,只要我点击暂停,Olly 就会离开主应用程序模块,在 USER32.GetMessageA 的子例程中登陆 RETN

现在我根本无法返回应用程序,它被阻止了。我必须继续调试器才能再次返回它,但这样我就没有关于消息框的信息。

任何提示如何进行以获得预期的结果?我想在这个特定的例子中,我可以只搜索代码中的所有消息框调用,但这并不是一个好方法,尤其是对于大型应用程序。

一个相关的问题,是否有可能“回顾”发生的事情,就像在某个时刻调用的代码一样?

如果其中任何一个没有多大意义,我们深表歉意。

2个回答

alt + k 查看或回顾

这是一个f9-> f12->alk + k简单消息框上的输出

Call stack of main thread
Stack     Data      Procedure                                     Called from                  Frame
0013FA78  7E419418   ???                                          USER32.WaitMessage+0A
0013FAB0  7E4249C4  /USER32.DialogBox2                            USER32.InternalDialogBox+0B1
0013FAB4  00A20142  |  Arg1 = 0A20142
0013FAB8  00000000  |  Arg2 = 0
0013FABC  00000001  |  Arg3 = 1
0013FAC0  00000000  \  Arg4 = 0
0013FAD8  7E43A956  /USER32.InternalDialogBox                     USER32.SoftModalMessageBox+6>
0013FADC  7E410000  |  Arg1 = USER32.<STRUCT IMAGE_DOS_HEADER>
0013FAE0  00152F38  |  Arg2 = 152F38
0013FAE4  00000000  |  Arg3 = 0
0013FAE8  7E43A016  |  Arg4 = USER32.MB_DlgProc
0013FAEC  0013FEF0  |  Arg5 = 13FEF0
0013FAF0  00000000  \  Arg6 = 0
0013FD98  7E43A2BC  /USER32.SoftModalMessageBox                   USER32.MessageBoxWorker+170
0013FD9C  0013FEF0  \  Arg1 = 13FEF0
0013FEE8  7E4663FD  /USER32.MessageBoxWorker                      USER32.MessageBoxTimeoutW+75
0013FEEC  0013FEF0  \  Arg1 = 13FEF0
0013FF40  7E4664A2  /USER32.MessageBoxTimeoutW                    USER32.MessageBoxTimeoutA+97
0013FF44  00000000  |  Arg1 = 0
0013FF48  001529C8  |  Arg2 = UNICODE "Multi-line text for a simp>
0013FF4C  00152AB0  |  Arg3 = UNICODE "Caption For A Simple And P>
0013FF50  00000000  |  Arg4 = 0
0013FF54  00000000  |  Arg5 = 0
0013FF58  FFFFFFFF  \  Arg6 = -1
0013FF74  7E450877  /USER32.MessageBoxTimeoutA                    USER32.MessageBoxExA+16
0013FF78  00000000  |  Arg1 = 0
0013FF7C  00401008  |  Arg2 = ASCII "Multi-line text for a simple>
0013FF80  00401070  |  Arg3 = ASCII "Caption For A Simple And Pla>
0013FF84  00000000  |  Arg4 = 0
0013FF88  00000000  |  Arg5 = 0
0013FF8C  FFFFFFFF  \  Arg6 = -1
0013FF94  7E45082F  /USER32.MessageBoxExA                         USER32.MessageBoxA+40
0013FF98  00000000  |  hOwner = NULL
0013FF9C  00401008  |  Text = "Multi-line text for a simple and p>
0013FFA0  00401070  |  Caption = "Caption For A Simple And Plain >
0013FFA4  00000000  |  Type = MB_OK|MB_DEFBUTTON1|MB_APPLMODAL
0013FFA8  00000000  \  LanguageID = LANG_NEUTRAL
0013FFB0  004010AE  /USER32.MessageBoxA                           msgbox.004010A8
0013FFB4  00000000  |  hOwner = NULL
0013FFB8  00401008  |  Text = "Multi-line text for a simple and p>
0013FFBC  00401070  |  Caption = "Caption For A Simple And Plain >
0013FFC0  00000000  \  Type = MB_OK|MB_DEFBUTTON1|MB_APPLMODAL

不,您不能关闭不在 v 1.10 中或不在 v 2.01 中的暂停消息框,
这根本不可能是
您误读或误解教程的可能

您需要在任何返回地址的某个位置设置断点并继续执行,或者您可以在调用堆栈中选择一个返回地址并点击f4执行直到返回

在此处输入图片说明

您在 1.10 中尝试过吗?我有也没有问题。确保对话框保持打开状态,而不是按 Alt-F9,我在菜单中找到了该选项。

这个功能在 Olly 2 中被破坏是可能的,但不太可能