重分!!! hook求救:如何操纵一个Win32程序运行(300分)

  • 主题发起人 主题发起人 xj307
  • 开始时间 开始时间
X

xj307

Unregistered / Unconfirmed
GUEST, unregistred user!
目标:做一个hook程序,可操纵另一个Win32程序,达到以下几点要求:<br>1。操纵该win32软件自动运行<br>2。软件启动后,在其界面特定的几个文本框里输入相应的参数,然后点击确定按钮进行提交。(考虑从文本导入成批参数)<br>3。此时程序会根据输入的参数跳出提示对话框<br>4。如果成功,提示框上会显示对应的成功信息,此时点击提示框的确定按钮,转6<br>5。如果不成功,提示框上会显示对应的不成功信息,点击确定按钮,转2步骤,直到参数成功<br>6。结束<br><br>请各位大侠指点一下该怎么作,最好提供相关的源码,万谢!
 
学习……
 
你是想用穷举的办法现实破解?这样效率太低,现在起来也麻烦。 不过还是可以实现的, 主要是用几个API<br><br>GetDlgCtrlID &nbsp; 通过句柄得得控件ID<br>SetWindowText &nbsp;通过句柄设置控件的文本,比如编辑框的内容。只要得到句柄就可以设置它的内容。<br>WindowFromPoint &nbsp;如果控件的ID不是固定的,就要用这个函数返回指定坐标的控件的句柄了,但是这个函数不能返回子窗口的句柄,要返回子窗口的句柄用ChildWindowFromPoint。<br><br>还有要解决的是弹出成功信息点确定的问题,最普通的办法是向该窗口发送一个按下按据的消息。<br><br>其实没什么难的, 关键就是得到指定控件的句柄,之后发送几个消息。不过效率就相当低了,比如你按下确定按钮后不知道什么时候会弹出成功信息吧,这样你就要用一个循环来检测)
 
不是实现破解,呵呵。Writer,有没现成的类似的源码,可否说的再详细点。关键对怎么得到句柄,比较困惑。因为界面上有很多的控件。怎么找到对应的文本框,输入对应的参数?根据taborder?
 
针对某个固定的程序,可以做实验来验证某个EDIT的句柄到底是多少
 
晕,自己写代码试验起上来才知没那么简单[:D]<br>首先SetWindowText对于另外一个进程是无效的,要想改变另外一个进程的窗口内容要直接调用SendMessage发送WM_SETTEXT到目标控件[:(]<br><br>不过这样又产生一个问题,你要在SendMessage的lParam参数指定“你的文本的字符串的地址”,但是这个字符串地址是目标控件进程的内存地址[:(] 而你的进程又不能随便改写目标进程空间的内容[:(] 如果你真的想改变其它进程的空间的内容,而这个进程又不能跟你合作的话,就要涉及远程代码注入……<br><br>唉~~看似简单的问题越搞越复杂了[:(]<br><br>不过还是有其它办法的,比如模拟键盘输了,不过这样效率就更加差了……
 
应该没你说的那么麻烦
 
不好捣鼓
 
procedure SendKeys(keys:string);<br>var hFocus,hWindow:HWND;<br> &nbsp; &nbsp;ThreadID:DWord;<br>begin<br> &nbsp;hWindow:=GetForegroundWindow;//换成找出你要的程序的窗体的代码<br> &nbsp;ThreadID:=GetWindowThreadProcessId(hWindow,nil);<br> &nbsp;AttachThreadInput(GetCurrentThreadId,ThreadID,true);<br> &nbsp;//找到你要的编辑框<br> &nbsp;//SendMessage (hFocus,WM_SETTEXT,0,PChar(Keys));<br> &nbsp;AttachThreadInput(GetCurrentThreadId,ThreadID,false);end;
 
得句柄可以用类、名称、鼠标的位置
 
后退
顶部