说,有一个输入框,我输入一个文本。我能以某种方式找到输入文本的位置吗?
查找我在 ollydbg 中输入的字符串
上设置断点GetWindowText()
,并GetDlgItemText()
和有目标程序读取您的输入文本。如果断点被击中,您可以跟踪调用堆栈以查看哪些代码正在读取您的输入文本以及它在内存中的存储位置。如果两个断点都没有命中,您可以尝试在 上设置条件断点SendMessage()
,将其过滤为仅中断WM_GETTEXT
消息。
如果上述方法失败,您可能需要静态分析程序以查找它在哪里创建文本框窗口以及它如何处理文本框的输入。搜索窗口创建 API 调用和/或与文本框相关的字符串(静态标签、错误消息字符串等)的交叉引用可能会有所帮助。
除了 Jason 所说的,我还要补充一点,还有另一种可能有用的方法:
- 断点
ExitProcess()
(可能HeapFree()
也是) - 在输入框中输入一些测试 -
"bla bla bla"
- 在进程内存中搜索该字符串并尝试分析引用该位置的代码。
我同意这可能是一种矫枉过正,但在某些情况下仍然会有所帮助。
除了上述所有解决方案之外,在您输入文本字符串press f12
并暂停调试对象之后,
现在还有几个选项可以搜索字符串
view call stack (ctl+k)
并return address
在堆栈中设置断点,然后按 f9 运行
ollydbg 很可能会在某些情况下中断系统调用
中断时,您可以搜索进程的整个内存
(alt+m right click search ctrl+l for repeating)
对于您输入的字符串,
设置一个访问断点(hardware break point on read)
在该位置,如果应用程序没有太多混淆,调用堆栈可能会显示它进入系统的应用程序代码,您也可以
如果应用程序没有子类化其控件,则从那里开始设置断点windowproc
或classproc
如果应用程序使用 directx,您还可以为您提供正确的上下文以跟随您的字符串,您可以在 SendInput() apis 或 DrawText(...) apis 设置中断