通过发送消息,可以在一个程序中控制另一个程序的行为。 如何才能防止? (300分!求解) (300分)

  • 主题发起人 主题发起人 小胡1
  • 开始时间 开始时间

小胡1

Unregistered / Unconfirmed
GUEST, unregistred user!
有一种工具,可以返回delphi窗体上的控件句柄,然后,通过操控 句柄.属性,

就可以访问和控制另一个程序中的数据了。

我想知道,在另一个程序中,怎么样来避免这种控制而又不影响正常的键盘和鼠标

操作? (水平太低,也不知道说清楚了没有;)
 
当收到消息时加以过滤,应该可以吧,没有真正试验过,不过直觉上来说,就是把消息分析一下
 
在那个应答程序的WndPro过程或者在MainWndPro(不过很少用)过程中把这个Message不处理就是了
MEssage Dispatch System: Event->MainWndProc->WndPro->Dispatch->Handle.

 
没有办法识别是系统给你的还是别的程序专门发给你的
 
谢谢上边几位大侠,期待更多回复……

1。 好像WIN API中有可以取得当前某坐标下控件的句柄功能?是不是也是一种
消息机制? 如果能阻制取得句柄的消息,是不是可行?

2。 通过在表单上覆盖透明的容器,使用控制程序不能取得容器下边的控件句柄?
(前提是不能影响键盘和鼠标操作,这点恐怕是不能实现?:《)
 
取得句柄也没关系啊,他的程序拿到了你的程序窗口的句柄,
如果要控件你的程序,还是要给你发消息啊,不发消息是做不了什么的(除了控制MOUSE
去点你的程序)

覆盖好像没什么用吧
 
采用截获对部分gdi的api调用来实现,如textout,textouta等
直接改写winapi 在内存中的映像,嵌入汇编代码,使之被
调用时跳转到指定的地址运行来截获;
 
这种控制程序的第一步是不是先要以标题为搜索对象(findwindow)先找到我的窗口,
然后才能控制我的程序?

如果我随时改变程序起动时窗口的标题,是不是能起点作用?
 
还有一种方法,是用WinSight32之类的工具把程序窗口的类名(不是标题)找出,一般
一个窗口类名是不会变的,然后枚举窗口,得到窗口的句柄
 
[:D] to lzjnuaa : 太深奥了吧? [?]
请大侠深入浅出的指点一下如何? 该怎样具体实现?
 
安装鼠标钩子,通过钩子函数获得鼠标消息,得到鼠标的当前位置,向鼠标下的窗口发重画消息,让它调用系统函数重画
窗口,在此可以截获你想要的数据。
 
to lzjnuaa : 我是想保护我的程序,不被类似于“机械人”的那种

程序从外部控制,你说的好像是如何实现控制吧?
 
从外部控制的那种其实就是木马,你只有把他去掉,或者不让他运行
 
这是不可能的,除非你建造自己的消息体系,比如Java的GUI应用,你就搞不定,呵呵
 
没什么好办法,没有办法识别是系统给你的还是别的程序专门发给你的。
不过谁知道怎样能够不被spy++之类的工具探测出类名?
 
不被spy++之类的工具探测出类名
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 就算是你自己定义的类也是可以被识别出的呀.
只要是可见控件,更何况SPY++是MS自己的东西..想骗过它?难呀.....
不过想要写控制其他程序的东西,可一定要用SPY++观察哦....
 
不可能。。。就是这样。。[:(]
 
>>forss
我倒是认为不是不可能,因为用spy++时探测类名是用GetClassName获取类名的。
如果能够屏蔽它就能办到,但要hook这个api,觉得太费劲。
我曾经想是否调用这个函数时,发了什么消息,但跟踪了半天没发现。
不知道用没有什么好的办法?
 
后退
顶部