- ·上一篇文章:批处理学习教程(批处理与变量加案例)
- ·下一篇文章:批处理弹窗提示小结
- ·百度中搜索更多的关于“新方法之---- bat批处理 嵌 vbs”相关内容
- ·谷歌中搜索更多的关于“新方法之---- bat批处理 嵌 vbs”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
新方法之---- bat批处理 嵌 vbs
' 2>nul 3>nul&@echo off&cls
'&.........
'&.........
'&.........
'&start wscript.exe /nologo /e:vbs %0
msgbox ("VBS in BAT!")
就是用脚本宿主(wscript.exe)直接解析批处理。并且不显示错误信息如“**不是内部命令”,很干净、简洁。
讲解:在bat部分,每句开头肯定必须有 ' 要不然wscript.exe解析的时候容易出错。(对于这点,伤脑筋以前的文章以前用的是echo '>nul&........ 这种形式。)
第一句是: ' 2>nul 3>nul ,这句的意图在于屏蔽以后所有的错误输出(感觉像on error resume next)。原理就是“英雄”的句柄备份理论:2代表错误输出,默认指向是con,当改变其指向后,系统将其原来的指向con备份到句柄3,到下一句时系统会从3复制刚才的备份,此时如果把3的指向改成nul的话,系统再来复制的就是nul了。这样以后的错误输出都默认指向nul,便不会再有错误提示,免的下面的每句都用 ' 2>nul&........而直接用'&........
下一句@echo off ,作用略。
下一句cls:因为第一句有屏幕输出,所以刷新一下屏幕,目的是看起来干净。
下面的就不用解释了吧.如果对句柄备份不了解的话,建议仔细看下“英雄”的文章:http://bbs.verybat.cn/viewthread.php?tid=9271&extra=page%3D2
通过这个方法,可以构造出 批处理的自我隐身方法,结果发现速度很快,黑框一闪而过,和“梦想”的使用mshta想比起来,生存力更大一点:
' 2>nul 3>nul&@echo off&cls
'&if "%1"=="h" goto :on
'&start wscript.exe /nologo /e:vbs %0
'&exit
s=wscript.scriptfullname
set oshell=createobject("wscript.shell")
oshell.run "cmd /c"&""""&s&""""&" h",0,false
:on error resume next
'&start notepad.exe&ping 127.1 /n 2&start notepad.exe
大概讲解:这个文件保存为bat,总共会被解析3次。第一次由cmd.exe解析,执行start wscript.exe /nologo /e:vbs %0 后exit,此时由wscript.exe接管。里面的vbs代码(除有 ' 标记的所有行)执行完了后再用cmd.exe以隐藏方式解析,这时会执行if "%1"=="h" goto :on 。
这里用到了一个技巧:当最后批处理以隐藏方式运行时,必须用个goto ,以避免执行重复代码。而用了goto的话,就要标签,标签的第一个字符必须是冒号,庆幸冒号在vbs中是合法的,它的作用类似于bat中的&,用于连接分句。这样只要用一个合法的vbs句子(以使在解析vbs时才不出错)前面加个冒号就行了。
事实上在所有的vbs代码前面加上冒号都可以,以让整个文本的结构更清晰:
' 2>nul 3>nul&@echo off&cls
'&if "%1"=="h" goto :on
'&start wscript.exe /nologo /e:vbs %0
'&exit
:s=wscript.scriptfullname
:set oshell=createobject("wscript.shell")
:oshell.run "cmd /c"&""""&s&""""&" h",0,false
:msgbox("vbs in bat")
:on error resume next
'&start notepad.exe&ping 127.1 /n 2&start notepad.exe

