找回密码
 加入
搜索
查看: 4107|回复: 10

[AU3基础] 关于进程拦截,请教 P 版!谢谢!!!

  [复制链接]
发表于 2011-3-25 13:29:48 | 显示全部楼层 |阅读模式
本帖最后由 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函数出问题?把参数补全?楼主有没有调试文件?   继续不懂,顶起。。。
 楼主| 发表于 2011-3-25 14:39:01 | 显示全部楼层
不太懂,是不是RUN函数出问题?把参数补全?楼主有没有调试文件?   继续不懂,顶起。。。
蜘蛛抱蛋 发表于 2011-3-25 14:01


自动脚本能完成安装,只是不能拦截弹出的网页。。。。谢谢顶!!!
发表于 2011-3-25 14:49:39 | 显示全部楼层
P版晚上才来的哦!我记得!
 楼主| 发表于 2011-3-25 15:20:52 | 显示全部楼层
P版晚上才来的哦!我记得!
hzxymkb 发表于 2011-3-25 14:49


谢谢提醒!!!!
 楼主| 发表于 2011-3-25 15:23:31 | 显示全部楼层
回复 2# 蜘蛛抱蛋

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

#Include <Constants.au3>
Run("G:\Auto_Code\ProcessMonitor.exe", "", "", $STDIO_INHERIT_PARENT)
发表于 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")) 应该就可以了。
 楼主| 发表于 2011-3-25 20:56:12 | 显示全部楼层
ProcessMonitor只监视explorer、winlogon、taskmgr创建的子进程、及“孙”进程。你前面说的启动XXX.exe的安 ...
pusofalse 发表于 2011-3-25 20:47


非常感谢!!!我试试。。。。
 楼主| 发表于 2011-3-25 21:31:45 | 显示全部楼层
回复 7# pusofalse

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

按照指教,修改自动脚本的 run 语句,并添加相应的 UDF 函数及所需包含文件,及常(变)量声明,仍然不能拦截。。。
发表于 2011-3-25 21:45:08 | 显示全部楼层
回复 9# 131738


    实在想不出哪里出问题了。是不是Sleep(5000)太短了,改长一些试下。
 楼主| 发表于 2011-3-25 21:56:30 | 显示全部楼层
回复  131738


    实在想不出哪里出问题了。是不是Sleep(5000)太短了,改长一些试下。
pusofalse 发表于 2011-3-25 21:45


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

在 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"))
其实是我糊涂,在短信请教过程中,我曾加过这个语句的。。。翻来覆去的竟然忘了。。。
现在只剩下检查通用性问题了。。。谢谢指教!!!非常感谢!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 19:37 , Processed in 0.077268 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表