资讯动态

VBS整人代码大全:从MsgBox到WScript.Shell的脚本安全入门

发布时间:2026/10/16 18:45:16 来源:尧图企业网站定制
简介这是一份面向VBS脚本初学者与编程爱好者的整人代码合集以docx文档形式收录了多种利用MsgBox消息框、WScript.Shell系统命令、Do...Loop无限循环、InputBox条件判断、SendKeys键盘模拟及WMPlayer媒体播放等技巧编写的恶作剧小程序帮助读者在虚拟机等安全环境中理解VBS的自动化能力与常见陷阱。资源包内含1个docx文件大小约192KB内容以代码片段与效果说明为主便于对照学习脚本语法与运行逻辑。目前已有11802人学习下载适合想了解VBS基础语法、消息框参数、系统命令调用及循环结构的入门读者参考。需要提醒的是部分代码可能触发关机、重启或页面刷新等行为建议仅在虚拟机中测试并尊重他人电脑使用权将技术用于提升效率而非制造困扰。1. 从一条do msgbox hi loop说起VBS 整人代码到底能跑出什么效果很多人第一次接触 VBS 整人代码都是从一条看起来人畜无害的do msgbox hi loop开始的。双击运行之后屏幕上会不停弹出写着 hi 的对话框点掉一个又冒一个任务管理器里还找不到明显的窗口进程最后只能靠wscript.exe进程或者注销来收场。这类脚本之所以能整到人是因为它踩中了 Windows 脚本宿主WSH的几个特性脚本文件双击即执行、MsgBox是阻塞式调用、WScript.Shell能直接调系统命令。VBS 整人代码大全这类资源本质上就是把MsgBox、InputBox、WScript.Shell.Run、SendKeys、Do...Loop这几个基础积木拼成不同花样的恶作剧脚本。它适合两类人一类是想搞明白脚本宿主到底能干什么的安全入门者另一类是需要给同事、同学制造一点无伤大雅“惊喜”的普通用户。但必须先把边界说清楚——凡是涉及关机、重启、蓝屏、无限复制、CD 托盘弹出、语音循环的代码都只能在虚拟机或专用测试机上跑别拿真机开玩笑。2. VBS 整人代码的底层积木MsgBox、WScript.Shell 与循环结构2.1 MsgBox 的参数到底怎么读整人代码里出现频率最高的就是MsgBox。它的完整签名是MsgBox(prompt, buttons, title, helpfile, context)整人场景里真正用到的只有前三个参数。prompt是正文buttons决定按钮组合和图标title是标题栏文字。很多人写代码时直接把vbOKCancelvbInformation这种常量相加传进去其实是在做位运算组合。常量值含义vbOKOnly0只显示确定vbOKCancel1确定 取消vbYesNo4是 否vbRetryCancel5重试 取消vbInformation64信息图标vbExclamation48警告图标返回值同样有对应常量vbOK1、vbCancel2、vbYes6、vbNo7。整人代码的“骗术”就藏在这里——把按钮文字和实际行为错位。比如弹窗问“确定要重启吗”用户点取消脚本却执行关机命令靠的就是判断vbCancel之后走另一条分支。 表面问是否重启实际点取消才触发关机 if MsgBox(对不起, 您灌水太多需要重新启动计算机。 chr(10) _ 确定要重启吗, vbOKCancel vbInformation, 重新启动计算机) vbCancel then msgbox 系统将立刻重起 wow ~_^, , 你上当了 Set objShell CreateObject(Wscript.Shell) objShell.Run shutdown -s -t 5, , true end if这段代码的逻辑说明MsgBox返回vbCancel时进入分支先弹一个嘲讽框再用WScript.Shell的Run方法执行shutdown -s -t 5。参数-s表示关机-t 5表示 5 秒后执行最后的true表示等待命令返回。注意Run的第二个参数是窗口模式省略时默认显示窗口整人脚本里常写成0来隐藏。2.2 WScript.Shell 能调哪些系统命令CreateObject(Wscript.Shell)是整人代码的“执行器”。它常用的方法有三个Run启动外部程序或命令SendKeys模拟键盘输入Popup弹一个带超时的提示框。整人脚本里最常被滥用的就是Run配合shutdown。 强制重启并附带自定义提示 Set WSHshellA wscript.createobject(wscript.shell) WSHshellA.run cmd.exe /c shutdown -r -t 6 -c 说我是猪不说我是猪就一分钟关你机 , 0, true参数说明cmd.exe /c表示执行完命令后关闭命令行窗口shutdown -r是重启-t 6是 6 秒倒计时-c后面跟关机提示文字最长 512 字符0表示隐藏窗口true表示等待。这里有个血泪经验-c后面的文字如果带空格必须用双引号包起来而在 VBS 字符串里双引号要写成两个连续双引号转义否则脚本直接报语法错误。2.3 Do...Loop 与 InputBox 的组合套路无限循环是整人代码制造“关不掉”效果的核心。最简单的do msgbox hi loop没有任何退出条件只能靠杀进程。稍微“讲道理”一点的版本会用InputBox给一个看似能逃脱的出口。 输入 abc 才退出循环否则一直问 dim a do a inputbox(输入 abc否则关机。) if a abc then msgbox 很遗憾你中招了这是整人程序你就等着关机吧 exit do else msgbox 乖点输入 abc end if loop逻辑说明InputBox返回用户输入的字符串exit do跳出循环。注意这里即使输入正确脚本也只是退出循环前面已经用shutdown -s -t 300埋了关机倒计时用户以为赢了其实还是中招。参数上InputBox的完整签名是InputBox(prompt, title, default, xpos, ypos)整人代码里常把xpos、ypos设成 8000、7000 这种超出屏幕的值让输入框跑到屏幕外制造“找不到窗口”的假象。2.4 SendKeys 与媒体对象的副作用SendKeys模拟按键在整人场景里通常用来刷屏。ws.SendKeys {F5}放在循环里会让当前焦点窗口不断收到 F5浏览器就会不停刷新。这个方法的坑在于它依赖当前活动窗口如果用户切走了焦点效果就打折扣。另一个常被拿来整人的是WMPlayer.ocx的 CD 托盘控制set wmp createobject(wmplayer.ocx) set cd wmp.cdromcollection.item(0) do cd.eject loop这段代码会让光驱托盘反复弹出。注意cdromcollection.item(0)的下标从 0 开始没有光驱的机器上会直接报错所以整人代码里经常在前面加on error resume next来吞掉错误。这个习惯本身也是双刃剑——它让脚本在出错时继续往下跑调试时反而看不到问题在哪。3. 从记事本到可运行脚本手把手复现与参数调优3.1 保存环节的三个硬性要求整人代码翻车最多的地方不是代码本身而是保存。用记事本写 VBS必须满足三个条件第一文件扩展名是.vbs而不是.txt第二保存时“编码”选 ANSI 或 GB2312选 UTF-8 带 BOM 会导致中文提示变乱码第三文件名不要用中文加空格某些老系统上wscript.exe解析路径会出问题。常见做法是在“另存为”对话框里把“保存类型”改成“所有文件”然后手动输入test.vbs。提示如果双击后一闪而过没有任何反应先检查文件是不是被存成了test.vbs.txt。在资源管理器里打开“文件扩展名”显示能省掉大量排查时间。3.2 用 cscript 在控制台调试直接双击运行 VBS 用的是wscript.exe弹窗是图形界面出错信息也藏在弹窗里。调试阶段更推荐用cscript.exe它把输出打到控制台报错行号一目了然。cscript //nologo //X test.vbs参数说明//nologo去掉版权信息//X在调试器中启动脚本。如果只想看语法错误直接cscript test.vbs就够了。整人代码里大量使用on error resume next这会让cscript也不报错调试时可以先临时注释掉这一行等逻辑跑通再加回去。3.3 关机类代码的参数拆解关机、重启是整人代码里杀伤力最大的一类因为shutdown命令的参数组合很多写错了可能变成真关机。下面把常用参数列清楚。参数含义整人场景用法-s关机配合 -t 制造倒计时-r重启伪装系统更新-a取消关机作为“解药”放在最后-t 秒倒计时常用 5 到 300-c 文字关机提示伪装系统警告-f强制关闭程序避免被未保存文档挡住一个完整的“骗输入再取消”套路是这样的先用shutdown -s -t 300埋一个 5 分钟倒计时然后用InputBox骗用户输入特定文字用户输入后执行shutdown -a取消。这样用户以为是自己输入正确才没关机实际上是脚本主动取消的。 先埋关机倒计时再骗输入最后取消 Set ws CreateObject(Wscript.Shell) ws.Run cmd.exe /c shutdown -s -t 300, 0, true wscript.sleep 2000 dim a do a inputbox(输入 abc否则关机。) if a abc then msgbox 很遗憾你中招了这是整人程序你就等着关机吧 exit do else msgbox 乖点输入 abc end if loop 真正的解药在这里 ws.Run cmd.exe /c shutdown -a, 0, true逻辑说明wscript.sleep 2000让脚本暂停 2 秒给shutdown命令留出注册倒计时的时间。最后的shutdown -a才是真正取消关机的命令但用户看不到这一步只会以为是自己的输入起了作用。参数0表示隐藏命令行窗口true表示等待命令执行完成。3.4 无限自我复制的观察与限制资源里那段“最厉害的一个”只有三行do createobject(wscript.shell).run chr(34) wscript.scriptname chr(34) loop它的效果是不断启动自身的新实例。wscript.scriptname返回当前脚本的完整路径chr(34)是双引号用来处理路径里有空格的情况。这段代码跑起来之后进程数会指数级增长很快耗尽系统资源。在虚拟机里观察时可以用任务管理器看wscript.exe的数量变化。注意这段代码没有退出条件只能强制结束进程所以绝对不要在真机上试。注意资源正文里那段涉及磁盘遍历、autorun.inf 写入、文件属性修改的“太毒了”代码已经超出整人范畴属于恶意行为。本文只讨论其技术原理不提供可运行版本也不建议任何人复现。4. 避坑与排查整人代码翻车的五个典型现场4.1 双击没反应或者一闪而过现象保存成.vbs后双击屏幕没有任何弹窗或者黑框闪一下就消失。原因最常见的是扩展名实际为.vbs.txt资源管理器隐藏了已知扩展名。其次是脚本第一行有语法错误wscript.exe解析失败后直接退出不弹错误框。解决在资源管理器“查看”里勾选“文件扩展名”确认文件名。然后用cscript test.vbs在命令行运行语法错误会直接打印行号。4.2 中文提示变成乱码现象弹窗里的中文显示成问号或方块。原因记事本默认保存为 UTF-8而wscript.exe在部分系统上按 ANSI 解析脚本文件。解决另存为时把编码改成 ANSI。如果已经存成 UTF-8可以用记事本打开后“另存为”选 ANSI 覆盖。另一个办法是在脚本开头加chcp相关处理但 VBS 本身没有直接的代码页设置改编码是最省事的。4.3 shutdown 命令没执行现象脚本弹窗正常但关机倒计时没有出现。原因WScript.Shell.Run的第二个参数如果写成0隐藏窗口某些系统上shutdown需要管理员权限才能注册。另外-t的值如果小于 0 或大于 315360000 会报错。解决先用ws.Run cmd.exe /c shutdown -s -t 60, 1, true把窗口模式改成1看命令行有没有报错信息。确认命令本身能跑通之后再改回0隐藏窗口。权限问题可以用右键“以管理员身份运行”来验证。4.4 循环弹窗关不掉现象do msgbox hi loop运行后弹窗不断点确定又弹任务管理器里找不到明显的应用进程。原因MsgBox是阻塞式调用脚本在wscript.exe进程里跑任务管理器默认只显示应用不显示后台进程。解决在任务管理器“详细信息”里找到wscript.exe结束进程。如果同时跑了多个脚本按命令行列排序找到对应文件名的那个。预防办法是在写循环时加一个计数器比如for i1 to 100给自己留条后路。4.5 SendKeys 刷屏失效现象ws.SendKeys {F5}放在循环里但浏览器没有刷新。原因SendKeys把按键发给当前拥有焦点的窗口。脚本启动后如果弹了MsgBox焦点在弹窗上F5 就发给了弹窗而不是浏览器。解决确保SendKeys执行时目标窗口是活动窗口。常见做法是先用ws.AppActivate 窗口标题激活目标再发按键。但窗口标题因系统语言而异这个方法并不稳定整人效果经常变成玄学。5. 进阶玩法与安全边界把整人脚本关进虚拟机的笼子里如果你已经把上面几段代码跑通了下一步大概率会想“能不能组合起来”。组合之前先把测试环境搭好。我一般用虚拟机快照做这件事装一个干净的系统打一个快照然后随便折腾出问题直接回滚。真机上跑整人脚本轻则被同事追着打重则触发关机丢文档没有后悔药。进阶方向有两个。一个是把多个效果串成“剧情”先弹一个假系统警告用户点取消后触发关机倒计时再用InputBox给一个假出口最后用shutdown -a取消全程用户以为自己在跟系统斗智斗勇。另一个是研究WScript.Shell的Popup方法它比MsgBox多一个超时参数可以做出“倒计时不点就自动执行”的压迫感。 Popup 带超时超时后返回 -1 dim result result CreateObject(Wscript.Shell).Popup(系统将在 10 秒后重启, 10, 系统警告, 48) if result -1 then msgbox 超时了假装重启一下 end if参数说明Popup的第二个参数是秒数超时后自动关闭并返回 -1第三个参数是标题第四个参数是图标常量48 对应警告图标。这个方法的坑在于它仍然是阻塞的超时之前脚本不会往下走所以不适合放在需要同时处理其他事情的循环里。验证脚本效果有个笨办法但很管用在虚拟机里开一个记事本把脚本运行后的现象逐条记下来包括弹窗顺序、按钮文字、命令行窗口是否出现、任务管理器里进程名的变化。记录一遍之后你对wscript.exe和cscript.exe的区别、Run的窗口模式、MsgBox返回值这些细节会有肌肉记忆。最后说一个我自己的习惯从那以后我每次写任何带shutdown的脚本都会在最后一行强制加一条shutdown -a哪怕逻辑上根本走不到那里。这条命令就是整人脚本的保险栓宁可多写一行也不要让测试机真的关掉。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑