#1 楼
在GetWindowText()
和GetDlgItemText()
上设置断点,并让目标程序读取您的输入文本。如果遇到断点,则可以追溯调用堆栈以查看正在读取输入文本的代码以及将其存储在内存中的位置。如果两个断点均未命中,则可以尝试在
SendMessage()
上设置条件断点,对其进行过滤以仅在WM_GETTEXT
消息上断点。它在哪里创建文本框窗口以及如何处理文本框的输入。搜索窗口创建API调用和/或对与文本框相关的字符串(静态标签,错误消息字符串等)的交叉引用可能会有所帮助。#2 楼
除了杰森所说的,我还要补充说,还有另一种可能有用的方式:测试-ExitProcess()
在进程的内存中搜索该字符串,并尝试分析引用该位置的代码。在某些情况下仍然可能会有所帮助。
#3 楼
在输入文本字符串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)
,如果应用程序不太混乱,调用堆栈可能会向您显示应用程序代码进入系统的位置,如果应用程序未将其控件归类,您也可以从该位置进入系统如果应用程序使用DirectX,则在
windowproc
或classproc
上设置断点也将为您提供正确的上下文以跟随字符串,您可以在SendInput()api或DrawText(...)apis上设置断点