在此代码行中:
mov        eax,dword ptr [eax+8];


eax+8包含一长串文本,我想找出它的原始来源。

在OllyDbg或x32dbg中,当eax包含某个单词(例如: “ haxxor”

谢谢!

#1 楼

您正在搜索条件断点

OllyDBG

可以在OllyDbg 1.01和2.00中设置条件断点

条件断点


显示对话框窗口,要求用户在调试过程的内存中的一个或多个地址处设置或修改简单条件INT3断点的参数。 [来源:官方文档]




如果要在EAX指向“ haxxor”时设置条件断点,请按Shift + F2,然后输入:UNICODE[EAX] == "haxxor"

条件日志断点


显示对话框窗口,要求用户在一个或多个地址设置或修改条件日志INT3断点的参数
addr [ naddr]在调试过程的内存中。记录断点
可以有条件地暂停执行,协议表达式,函数
参数或返回值等。[来源:官方文档]




此选项具有更多功能,并允许您在log窗口(Alt + L)上查看输出设置以最适合您的需要。


x64dbg

目前,据我所知,不支持字符串的条件断点。虽然该功能已计划中,但我希望我们能尽快看到它。同时,检查cndSteroids插件,您可能会发现有帮助。

有关x64dbg上的条件断点的更多信息,请参见官方文档。

评论


我是否正确地说这仅在此行上添加了条件断点,即当此确切位置的eax包含此字符串然后中断时?我试图找到该值的原始值,即在行#7752606上我知道eax包含此字符串,但是该值何时何地来自

–拉兹·拉兹曼(Raz Razman)
17年8月23日在3:49



仅作记录,现在有一个更好的字符串匹配插件可用:github.com/x64dbg/strmatch

– mrexodia
17年8月26日在10:58

#2 楼

注意!
之后我才意识到这与Ollydbg有关...无论如何,我坚持我的回答... GDB非常棒!实际上,只有少数人知道它,它可以访问所有常用的libc函数。例如,在您的情况下,您可能会发现在像这样的断点处设置条件很有趣那(通过使用strcmp()):

如果您想在字符串的值是““ haxxor”“时中断,那么会有点困难。就我个人而言,我将为每个字符设置一个监视点,条件如下:

评论


值得注意的是,以这种方式调用函数确实会留下所有可能的副作用,首先是在堆栈指针附近的数据更改(由于局部变量和返回地址)(尽管不在堆栈本身)。这可能与特定的调试会话无关紧要。另外,这可能会导致虚假信号,例如Windows上的* nix / Access Violation上的SIGSEGV,除非您将unwindonsignal设置为打开(例如,在第一个断点示例中EAX指针错误)。

–俄罗斯
17年8月22日在11:58



是的,这或多或少类似于将调试代码“在线”附加到正在运行的程序。因此,它可能会破坏整个事情。感谢您提及!

–恐怖
17年8月22日在12:00