Skip to content
web240 edited this page Aug 24, 2016 · 1 revision

发现 mshta 会把 file:// 协议指向的文件当作 html 来解析(注:IUnknown 与 happyxxdhaha 提醒此处必需使用绝对路径,否则不会执行),心里顿时有一万只草泥马奔过,原来如此简单的答案就在身边,却错过了四年 基本框架: 复制代码 代码如下:

<script language=vbs> Msgbox "I'm VBScript!" </script> <script> alert("I'm JavaScript!") </script> <script>close()</script>

事实上,file:// 协议名可以省略,而且如果不需要理会界面的话,完全可以不用注释标签: 复制代码 代码如下:

@echo off echo I'm Batch! mshta "%~f0" <nul pause&exit 批处理部分之后要加上一串 >,数量要比前文出现的 < 更多,mshta 才能区分哪些是标签 而且前文出现从文件获取重定向输入的时候,建议加上双引号,例如 <"script"

<script language=vbs> Msgbox "I'm VBScript!" </script> <script> alert("I'm JavaScript!") </script> <script>close()</script>

另一用 goto 的种写法可能更直观一点: 复制代码 代码如下:

@goto :bat

<script language=vbs> Msgbox "I'm VBScript!" </script> <script> alert("I'm JavaScript!") </script> <script>close()</script>

:bat @echo off echo I'm Batch! mshta "%~f0" <nul pause&exit 要注意的是,这里的宿主是 mshta,所以不支持 WSH 宿主的方法和属性(部分属性或方法的替代方案详见后文) 但是!mshta 有嘛不好! 原生支持 setTimeout 原生支持 iframe 原生支持 dom 原生支持 javascript、vbscript 无障碍交互 原生支持 Ajax 原生支持加载外部脚本 原生支持在窗口中选择文件 原生支持复杂的页面交互 ... 有这么多便利,那还计较什么呢? 首发于批处理之家

关于 mshta 宿主的一些知识,参考: https://msdn.microsoft.com/en-us/library/ms536495(VS.85).aspx 感谢 xiaopo 扫盲,才知道联盟早已出现过 mshta 方案的雏形:http://cndos.fam.cx/forum/viewthread.php?tid=39655,回头上镜像站搜下,看看有没有进一步的发展 复制代码 代码如下:

:

<script>document.body.innerText=""</script>
HTML Codes
Clone this wiki locally