“程序设计”目录存档

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

2010年07月26日,星期一

之前写的那篇给出的方法虽然不错,但是当文件过大时(其实很小,也就几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日,星期六

昨天那个病毒的加密确实很恐怖,我不是高手,写不出那么高级的加密。但是受病毒第一层加密的启发,进行简单的加密还是不难的。当然这种低级的加密只能拿来骗骗一些垃圾的杀毒软件。使用了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文件。

又一个VBS病毒源码的解密

2010年07月23日,星期五

解密暴风一号病毒的时候,曾经搜索到看雪的一个帖子,楼主说的也是暴风一号的解密。但是下面有人回了一个

对于病毒来说这个代码写得很啰嗦,没什么功能,连后台都没有,发布出去就是个死马
该让别人看不懂的地方一点也没有处理 鉴定完毕
你兴趣把这个解出来http://www.cn-dos.net/forum/viewthread.php?tid=39994&fpage=1&highlight=vbs
带后台的,支持远程后台控制VBS更新  支持后台命令让VBS操作你所实现的命令 比如:根据判断进程来下载木马。
这个VBS加了好几层密,全是手动加密 最后一层有点小难度,解完后的原码,你根本看不懂,不花点时间做点笔记根本不知道是什么意思

当时点进去看了一下,尝试着解密了一下,发现没有想象中的简单,就不管了。最近闲得慌,又拿出来看了一下,这次终于解密出来了。这个VBS病毒十分的强大,嵌套了好几层的Execute语句,即使最后解密出来的明文都很难看得懂,暴风一号和它比起来真的是小巫见大巫了。写病毒的人绝对是VBS高手中的高手,解密完这个病毒,我再也不敢说我会VBS了。

下面是解密过程,源代码和中间代码下载地址在文章末尾给出,请先下载再往下看。解密的主要思路是把Execute语句用下列代码替换

Dim fso, file
Set fso = CreateObject("scripting.filesystemobject")
Set file = fso.OpenTextFile("filename.vbs",2,True)
file.Write code
file.Close

其中filename为文件名,code为要Execute的代码。

(更多…)

VBS加密 & VBE解密

2010年07月22日,星期四

用Script Encoder加密VBS脚本

Script Encoder 是一个简单的命令行工具,脚本设计者可使用此工具对他们的最终脚本进行编码,从而使 Web 主机和 Web 客户端无法查看或更改其源代码。注意,这种编码只能防止对您代码的一般性浏览,而无法防止专业黑客查看您的代码和实现方式。

这其实并不是加密(encrypt)而仅仅是编码(encode),只不过乍一看是乱码,好像被加密过一样。使用方法很简单,安装目录有帮助手册,上面写得很清楚,在这里举一个最简单的用法,使用下面的命令加密example.vbs脚本

screnc.exe  example.vbs  example.vbe

用Script Decoder解密VBE脚本

VBS是解释型语言,所以加密后的VBE肯定能够被Windows脚本宿主解释程序解密然后再解释执行。但是微软并没有提供解密程序或者解密算法,一位牛人通过自己的测试推出了解密的算法,并写了一个Script Decoder程序,还把源代码公布出来。我编译了一个测试了一下,效果不错。使用下面的命令解密example.vbe脚本

scrdec18.exe  example.vbe  example.vbs

相比之下,这个网站也有一个解密程序,但是竟然要收费!否则只能解密VBE的前50个字节。最近在学习破解,正好拿来练练手,保护工作做得不怎么样,很轻松就爆破了,而且解密的效果也不怎么样,难道是我的爆破有问题?不管那么多了,有开源的Script Decoder就行了。

另外还有在线解密的网站,对英文的解密效果还不错,但是对于有Unicode字符的代码效果就不怎么样了。

用EditPlus+BCC5.5搭建C语言学习环境

2010年07月16日,星期五

刚开始学习C语言的时候,被谭浩强忽悠了,用Turbo C来编译器,虽然Turbo C是Borland的成名之作,但是现在看来已经属于古董级别的了,而Borland的传奇也已不再延续。后来用的是Visual C++ 6.0 ,学校的网费是按流量计算的,当时也还没有各种BT站的账号,开着计费客户端从外网下载的,差不多500M,心痛了好久。只是学习C语言的话用VC显然太浪费了,虽然也有针对C语言学习的所谓精简版VC,大概也就几M吧,但是总感觉怪怪的,有一种司马迁的感觉。再后来,发现Borland有一款免费的C++编译器C++ Compiler,结合很小很强大的EditPlus,学习C语言已经绰绰有余了,心情好的话还可以写写windows程序。如果觉得配置麻烦你还是老老实实用TC或者VC吧。

(更多…)