OllyDbg:如何在寄存器值上设置条件断点?

逆向工程 拆卸 ollydbg 字符串 断点
2021-06-13 03:31:56

我想在寄存器 EAX 引用特定 Unicode 字符串(例如“Enter”)时设置断点。在 Ollydbg 中,通常在 EAX 值旁边有一个字符串,上面写着“ASCII: Enter”。

我读到我必须为此使用 Olly v1.10。当我转到“调试”->“设置条件”时,我可以在文本字段“条件为真”中写入,例如:

EAX == 00000010

我按 F9(运行),断点将起作用。所以一旦 EAX 变成 0x10 olly 就会停止。但是,当我这样做时:

UNICODE[EAX] == "Enter"

它不起作用。我究竟做错了什么?不管我使用哪个程序和哪个 Olly 版本,我都无法让它工作。我也想匹配像“输入文本”这样的字符串,所以任何“输入”的外观。

最后,我基本上是在寻找一种方法来在特定字符串加载到 RAM 后停止 olly。我怎样才能做到这一点?

任何帮助表示赞赏。谢谢!

2个回答

1.1 和 2.01 之间有轻微的语法变化,即使没有取消引用,方块也是强制性的

所以要有一个条件,其中 eax 指向 unicode 字符串,你需要一个条件,如

[UNICODE EAX] == “什么”

假设你有这样的代码

#include <stdio.h>
#include <windows.h>
wchar_t *strings[] = { L"is this what", L"does it matter", L"what is this",
  L"who are you", L"why am i doing this", L"lest scoot from here"
};
PWCHAR foo (int a) {
  return strings[a];
}
int main(void ) {
  for(int i=5;i>=0;i--) {
    printf("%S\n",foo(i));
  }
  return 0;
}

如屏幕截图所示设置中断将在 2.01 中正确中断 在此处输入图片说明

可以在 OllyDbg 1.01 和 2.00 中设置条件断点
例如在 Olly 2 中,通过按Shift+F2您可以在对话框中输入条件UNICODE [EAX] == "Enter"

如果调试器没有在条件下中断,您可以通过设置条件日志断点 ( + )来检查EAX的值设置如下所示的设置: ShiftF4在此处输入图片说明

现在,当程序正在运行并且您正在等待中断时,打开日志窗口并检查EAX中的值是什么以及为什么调试器没有中断。