131738 发表于 2011-3-25 13:29:48

关于进程拦截,请教 P 版!谢谢!!!

本帖最后由 131738 于 2011-3-25 14:47 编辑

修改大作《纯AU3拦截进程创建,并阻止或允许其运行》之 19 楼精简版代码修改为无界面的自动应答形式如下:

ToolTip("开始监视", 0, 0,"进程监视",1);提示监视已启动

;其它原代码.....

....
....
....

Func _ButtonProc($hWnd, $iMsg, $iCreator, $iPid)
        If ($iMsg <> 0x3F79) Then
                Return _WinAPI_CallWindowProc($hOBC, $hWnd, $iMsg, $iCreator, $iPid)
        EndIf

        Local $hProcess, $pPeb, $pUserParam, $iImage, $iParam, $sImage, $sParam, $pBuffer

        $pBuffer = _RTHeapAlloc(24)
        $hProcess = _RTOpenProcess($iPid)

        _NtQueryInformationProcess($hProcess, 0, $pBuffer, 24)

        $pPeb = _RTReadBytes($pBuffer + 4, "ptr", 4)
        $pUserParam = _RTReadProcessMemory($hProcess, $pPeb + 16, 0, 4, "ptr*")
        $iImage = _RTReadProcessMemory($hProcess, $pUserParam + 60, 0, 4, "ptr*")
        $iParam = _RTReadProcessMemory($hProcess, $pUserParam + 68, 0, 4, "ptr*")
        $sImage = _RTReadProcessMemory($hProcess, $pUserParam + $iImage, 0, 520, "wstr")
        $sParam = _RTReadProcessMemory($hProcess, $pUserParam + $iParam, 0, 520, "wstr")
;自动应答:
        If $sImage = @ProgramFilesDir & "\Internet Explorer\iexplore.exe" Then
                ProcessClose($iPid)
        ElseIf $sImage = @SystemDir & "\notepad.exe" Then
                ProcessClose($iPid)
        Else
                _NotifyProcessCreation(0, 0, 0, $iPid)
        EndIf
       
        _RTCloseHandle($hProcess)
        _RTHeapFree($pBuffer)
EndFunc   ;==>_ButtonProc其它部分完全保持源码,编译为 ProcessMonitor.exe
1. 启动 ProcessMonitor.exe
2. 启动 XXX.exe 应用工具安装程序,安装结束能成功拦截弹出的网页!
3. 不关闭 ProcessMonitor.exe
4. 接着启动 XXX.exe 应用工具的卸载程序,卸载结束也能成功拦截弹出的网页!

问题:编写 XXX.exe 的自动安装脚本:Run("G:\Auto_Code\ProcessMonitor.exe")
ProcessWait("ProcessMonitor.exe")

;开始自动安装代码
Run(@ScriptDir &"\XXX.exe")
.....
......
...
...

ToolTip("将延时 5 秒以监视目标程序退出后的弹窗进程!", @DesktopWidth/2, @DesktopHeight/2, "已完成 [ XXX ] 的自动安装.", 1, 2)
Sleep ( 5000 )
Send("!{F2}");关闭进程监视运行这个脚本,或编译的 XXX_zd.exe , 拦截失败!!!
自动脚本运行后,能启动 ProcessMonitor.exe ,这个我在 ProcessMonitor.au3 中加了启动提示的!
分析 ProcessMonitor.au3 代码,由于本人根本不懂编程及进程原理,依据本人现有水平,百思不得其解!!!特向 P 版求教!!! 谢谢!!!
感谢短消息中提供的相关源码,但用于自动脚本中仍然失败!

蜘蛛抱蛋 发表于 2011-3-25 14:01:34

不太懂,是不是RUN函数出问题?把参数补全?楼主有没有调试文件?   继续不懂,顶起。。。

131738 发表于 2011-3-25 14:39:01

不太懂,是不是RUN函数出问题?把参数补全?楼主有没有调试文件?   继续不懂,顶起。。。
蜘蛛抱蛋 发表于 2011-3-25 14:01 http://www.autoitx.com/images/common/back.gif

自动脚本能完成安装,只是不能拦截弹出的网页。。。。谢谢顶!!!

hzxymkb 发表于 2011-3-25 14:49:39

P版晚上才来的哦!我记得!

131738 发表于 2011-3-25 15:20:52

P版晚上才来的哦!我记得!
hzxymkb 发表于 2011-3-25 14:49 http://www.autoitx.com/images/common/back.gif

谢谢提醒!!!!

131738 发表于 2011-3-25 15:23:31

回复 2# 蜘蛛抱蛋

按如下格式逐个更换最后一个参数,仍然不能拦截。。。

#Include <Constants.au3>
Run("G:\Auto_Code\ProcessMonitor.exe", "", "", $STDIO_INHERIT_PARENT)

pusofalse 发表于 2011-3-25 20:47:13

ProcessMonitor只监视explorer、winlogon、taskmgr创建的子进程、及“孙”进程。你前面说的启动XXX.exe的安装/卸载程序,能成功拦截,是因为XXX.exe是双击运行的,是由explorer.exe启动的,XXX.exe即是explorer.exe的子进程,而安装/卸载程序即是explorer.exe的“孙”进程,所以能够成功拦截。

而对于explorer.exe之前启动的进程,ProcessMonitor并不能监视到。比如你在运行ProcessMonitor之前,双击运行了某个程序1.exe(由explorer.exe启动),然后又运行了ProcessMonitor,之后1.exe又运行了2.exe,这种情况下,ProcessMonitor将检测不到2.exe的创建,虽然2.exe同是explorer.exe的“孙”进程,但ProcessMonitor是在1.exe运行之后才启动的,所以会出现你后面说的拦截失败的情况。

将第5行代码改为_NotifyProcessCreation(0, 0, 0, Run(@ScriptDir &"\XXX.exe")) 应该就可以了。

131738 发表于 2011-3-25 20:56:12

ProcessMonitor只监视explorer、winlogon、taskmgr创建的子进程、及“孙”进程。你前面说的启动XXX.exe的安 ...
pusofalse 发表于 2011-3-25 20:47 http://autoitx.com/images/common/back.gif

非常感谢!!!我试试。。。。

131738 发表于 2011-3-25 21:31:45

回复 7# pusofalse

对不起。。。又要麻烦了。。。

按照指教,修改自动脚本的 run 语句,并添加相应的 UDF 函数及所需包含文件,及常(变)量声明,仍然不能拦截。。。

pusofalse 发表于 2011-3-25 21:45:08

回复 9# 131738


    实在想不出哪里出问题了。是不是Sleep(5000)太短了,改长一些试下。

131738 发表于 2011-3-25 21:56:30

回复131738


    实在想不出哪里出问题了。是不是Sleep(5000)太短了,改长一些试下。
pusofalse 发表于 2011-3-25 21:45 http://www.autoitx.com/images/common/back.gif

不好意识。。。目前貌似可以了。。。

在 ProcessMonitor.au3 中添加了一句代码:HotKeySet("!{F2}", "_Close")
_NotifyProcessCreation(0, 0, 0, ProcessExists("XXX.exe"));添加的代码
_NotifyProcessCreation(0, 0, 0, ProcessExists("explorer.exe"))
_NotifyProcessCreation(0, 0, 0, ProcessExists("Winlogon.exe"))
_NotifyProcessCreation(0, 0, 0, ProcessExists("taskmgr.exe"))其实是我糊涂,在短信请教过程中,我曾加过这个语句的。。。翻来覆去的竟然忘了。。。
现在只剩下检查通用性问题了。。。谢谢指教!!!非常感谢!!!
页: [1]
查看完整版本: 关于进程拦截,请教 P 版!谢谢!!!