普通的就是找到目标进程的edit控件窗口句柄,给它发送 WM_GETTEXT 消息就可以了。

解决方案 »

  1.   

    那就先用GetWindowText() 先获取到当前对话框的文本内容, 然后利用该文本从内存中搜索地址。
      

  2.   

    GetWindowText()取不到别的进程的window text
      

  3.   

    基本原理应该是用SetWindowsHookEx挂钩windows消息,具体是什么消息取决于控件类型,还是你用Spy++监视一下会比较准。
      

  4.   

    问题补充,
    目前已经确定使用以下API:
    OpenProcess,
    ReadProcessMemory,
    有可能用到 VirtualQueryEx我想要确定的是如何确定目标内存区域的地址。或者介绍分析内存的策略和方法也可以。
      

  5.   

    可以利用消息钩子
    或者dll注入,找到窗口,再找到回调函数过滤或SetWindowlong,说到底还是钩子
      

  6.   


    谢谢,我不想使用dll注入,因为该程序会进行外挂检测。另外:读取内存这种方法容易被检测到吗?我是想做个类似游戏外挂的东西。
      

  7.   

    我们知道一个VB的文本框有很多属性,经过试验貌似还有一个与文本框相关的,我们都不知道的“变量”存在于内存中,其类似于一个字符型变量,与字符型变量一样,占4个字节的内存空间,这4字节的内存空间里存放着文本框当前内容的“基地址”(指向文本框里面的第一个字符的地址,其实就是一个指针变量),一般情况下,这个“基地址”并不怎么变化,因为这个地址貌似文本框的“用户工作区”地址,我所谓之工作区,是因为被那个指针指向的内存区域的数据,可以与用户的文本框同步,就是说,你在文本框里面输入文本的时候,这个内存区域里的内容会同步改变且无需额外申请什么系统服务。不仅如此,这个存在于内存的“文本框工作区”还可以逆向输入数据到你的文本框里面,同样无需申请什么服务,只有你的文本框所在地窗口是活动窗口(具备焦点),那么这个内存区域里的任何变化都会在你的文本框里面显示出来。我是菜鸟,没水平编出代码给大家验证,这里给个想法,有疑问的可以试试是不是这样。1 窗体上面放个文本框2 在文本框里随便输入一些中文汉字或者乱七八糟的英文字母或者一群数字3 把2的内容转换为“单字节字符”(字节型,如数字1 就是31;2就是32;A 就是41;B 就是42;美人 就是 C4 D0 C8 CB ;等等)作为关键字进行内存搜索,当找到后面就记下这些字符串的里的第一个字符所在的内存地址。4 将刚刚得到的这个内存地址(假如是12345678,就换成十六进制的 BC614E )高低位置互换,不足4个字节的高位先补0再换位,如BC614E 补成 00BC614E 换成 4E 61 BC 00 就行了,将这个类似于 4E 61 BC 00 继续作为关键字进行内存搜索,再搜到的地址就是这个所谓的“工作区”的变量了,记下它就不怕找不到这个工作区的位置了。呵呵,经常听到说内存地址会变,其实随便怎么变,这个指针的指针地址是不会变的(郁闷,不是说VB没有指针吗,当然了,这个“地址”也可以称呼其为占用了4个字节的“字符型变量”或“长整形变量”或“数组型变量”或“自定义型变量名”)。5 自己动手在文本框里敲几个字符,再看看内存里面是不是立马就多了几个乱码?还有更乱的呢,你把那个不能称呼为指针的4个字节内容改一下看看,哈哈,改巧了你的文本框里面就空了,改不好就全他妈乱码哎6 要是想偷懒也行,可以将自己编的这个自己的程序的(绕口令吧)“文本框内存工作区”指向其他程序的内存中的某个区域,哈哈,好戏就开演啦好了,又零点了,又是新的一天。