在 ollydbg 中搜索字符串

逆向工程 ollydbg
2021-06-18 09:37:46

我有以下程序:

int main() {
    char buff[11] = "helloitbd9";
    int x = 4;
    printf("%d", x);

    return 0;
}

我可以通过二进制文件的十六进制转储在数据部分的开头看到字符串“helloitbd9”。但是,我不明白的是为什么当我搜索“所有引用的字符串”时,结果只会得到“%d”?是不是因为搜索只查找函数中使用的字符串?有没有办法在数据部分搜索所有“字符串”?

图片: 在此处输入图片说明

1个回答

根据我的经验,OllyDbg不太擅长处理字符串引用。

是不是因为搜索只查找函数中使用的字符串?

据我所知,“搜索 >> 所有引用的文本字符串”正在搜索程序集中引用的字符串它不是在整个二进制文件中搜索字符串,即使它们存在于二进制文件的某个地方。如果您想在整个二进制文件中搜索字符串,您可以使用您最喜欢的十六进制编辑器或其他实用程序,例如 Sysinternals' strings

但是,我们应该记住,在代码本身中使用的字符串(例如,只是分配给从未在程序中使用的变量)是否会显示在二进制文件中,可能会在不同的编译器中更改. 即使从未使用过该变量,其中一些也会显示分配,一些仍会将字符串保留在二进制文件中,但您不会在程序集中看到它,而其他人会完全忽略它并且不会在二进制文件中包含该字符串全部。

另一件值得一提的事情是反汇编程序有时无法识别字符串,并将其误认为是十六进制值。在这种情况下,您可能会看到如下内容:

...
mov     eax, 6C6C6568h
...
mov     eax, 6274696Fh
...
mov     eax, 3964h 

而不是将其显示为mov eax, "helloitbd9".

有没有办法在数据部分搜索所有“字符串”?

你说你用十六进制编辑器看到了这个字符串,你应该可以通过查看内存映射用OllyDbg找到它。转到查看>>内存并双击您感兴趣的内存映射 - .data在打开的窗口中按Ctrl+b并搜索您的字符串,您应该在那里找到它。如果你没有找到它,你也可以在另一个内存映射中搜索它,比如.rdata.


就个人而言,我强烈建议使用 x64dbg,它是一个活跃的开源项目,与绝对过时的 Ollydbg 不同。此外,x64dbg 的灵感来自 OllyDbg,因此迁移到它时不会有太多问题。

以下是一些资源: