GithubHelp home page GithubHelp logo

jefurry / vbshorse Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zichuanwang/vbshorse

0.0 1.0 0.0 180 KB

The course project for Information Security, a VB Script Horse that can infect U Disk, record keyboard and send the result via email.

Visual Basic 100.00%

vbshorse's Introduction

----------VbsHouse----------
版本		1.0
----------------------------
完成时间		12/29/2012
----------------------------
作者 		王紫川
----------------------------
学号 		092969
----------------------------

本文档主要用于介绍VbsHouse的功能、程序执行流程、程序结构以及作者的一些编写思路和心得体会。

============================

功能:

开机自启动,感染U盘,记录键盘录入并通过邮件发送。

本程序仅用于研究vbs脚本病毒的原理和基本实现,为了方便测试和保证测试的安全性,很多地方有意省略了大规模破坏性操作,而是对特定的文件夹进行破坏测试,也没有进行大量增殖和破坏注册表等恶意操作。

为了方便测试,我制作了病毒的reverse版本,运行后可以恢复计算机到病毒感染前的状态。

为了验证各个功能模块可用,我还为每个模块写了单元测试,所有的单元测试都在Unit Test文件夹中。

本程序兼容64位和32位系统。

============================

程序执行流程:

1.检测是否是被感染的快捷方式打开了脚本,如是,则打开快捷方式通过参数传递进来的原文件
2.检测是否为64位系统,且默认WScript解释器为64位,如是,则强制以32位WScript解释器重新解释脚本
3.检测是否是Windows 7或Windows Vista操作系统,如是,则用WScript重新解释脚本并提升脚本权限
4.拷贝DynamicWrapper.dll到System32文件夹,并注册DynamicWrapper.dll
5.修改注册表,隐藏所有文件,并隐藏快捷方式文件的箭头
6.繁殖自身到指定文件夹
7.设置开机自启动,启动文件的位置为之前繁殖的目录
8.执行主循环,动态监测标题为“无标题 - 记事本”的notepad.exe窗口和U盘插入
9.监测到记事本则记录用户输入,并在用户输入会车后发送结果到指定邮箱
10.监测到U盘插入后则感染U盘,将U盘根目录下的所有文本和网页文件隐藏,创建快捷方式指向病毒脚本

============================

程序结构:

程序可分为如下功能模块

1.强制使用32位解释器运行模块	- 对应单元测试VbsHorseX64Test
功能:首先判断系统架构是否是64位,如不是则肯定由32位解释器打开;如是,则通过判断注册表中VbsFile的默认打开方式是否被置为SysWOW64下的32位解释器来判断是否是由32位解释器打开;如是,则判定为32位解释器打开;如不是,则强制修改注册表中VbsFile的默认打开方式为32位解释器,并通过Explorer.exe重新运行脚本。

2.修改注册表隐藏文件模块	- 对应单元测试HideFileTest
功能:通过修改注册表相关键值来隐藏隐藏文件的显示,破坏Explorer中的关于隐藏文件显示的修改,隐藏快捷方式小箭头的显示。

3.繁殖模块		- 对应单元测试PropagateTest
功能:繁殖自身(vbs源文件和dynwrap.dll)到指定文件。

4.开机自启动模块		- 对应单元测试AutoRunTest
功能:修改注册表中的相关键值,使脚本开机自启动。

5.监测U盘插入模块		- 对应单元测试InfectUDiskTest
功能:循环监测当前电脑中的可移动磁盘,如发现则拷贝自身副本到U盘中。

6.用快捷方式感染U盘模块	- 对应单元测试LnkInfectTest
功能:查找U盘根目录(可以修改为所有目录)中的txt, log, html, htm, htm, mht文件,隐藏这些文件并创建指向病毒脚本的快捷方式。创建快捷方式的过程中,将原文件的路径作为参数输入,并根据文件的类型配置图标。

7.记录键盘输入模块		- 对应单元测试RecordKeyboardTest
功能:动态监测指定的窗口,如窗口活跃则循环记录键盘输入,保存在全局变量中,如指定窗口不活跃,则跳出循环重新监测窗口;如用户输入回车键则弹窗显示记录的内容,并清空全局变量。

8.发送邮件模块		- 对应单元测试SendEmailTest
功能:通过配置好的邮箱发送邮件。

============================

心得体会:

最开始看到期末项目要求的时候曾经冒出过很多想法,但是完全不知道如何去实现。无奈之下向已经毕业的一位学长要来了当时他写过的项目,他用C++写了一个木马程序,开机自启动,记录键盘,通过邮件发送,并能感染U盘。这个项目的思路给了我很多启发,然而当我真正运行的时候却发现了一些不尽如人意的地方,比如因为是用VS2008写就,如果目标机缺少VS2008运行时环境,就会报错等。而且网络安全问题提了这么多年,但凡用电脑的人就知道exe文件是不能随便打开的,这在社会工程学层面为这个木马的传播制造了障碍。

后来开始在网上搜寻资料,突然发现原来很多有名的木马和病毒都是通过脚本实现的,其中有很多又是通过VB Script写就的,被称为VBS病毒。VBS病毒用功能强大的脚本语言VB Script编写而成,在大多数Windows计算机上可以直接运行,该脚本语言功能非常强大,可以调用很多现成的Windows对象与组件,直接对文件系统、注册表进行控制。除此以外,VBS病毒还有很多优良的特性:

1.病毒以明文方式传播,获取后可以直接修改,增加病毒变异的可能
2.编写简单,一个对病毒一无所知的爱好者也可以在短时间内编写新种的病毒
3.欺骗性强,很多普通用户不知道以vbs为后缀的文件可能是破坏力很强的病毒

综合以上种种原因,我最终选择了学习并使用VB Script来实现之前学长用C++实现的功能。

在一番尝试之后,我总结了以下的经验教训,算是给未来的学习者一点前车之鉴。

1.如何使用VBS访问Win32 API
因为需要使用Win32 API来监视窗口与记录键盘录入,我们需要在VBS脚本文件中调用Win32 API。但是VBS脚本原生是不支持这种调用的。查阅了很多资料,最后找到了两种实际可行的方法。

(1)通过使用用微软的Office软件提供的VBA接口组件做跳板来间接的调用API,优点是一个VBS文件就可以搞定,无需其它文件。但这中方法缺点是,你需要在VBS里写VBA的代码,那么你就必须要对VBA有一定的了解,而且这种方法写出来的代码可读性很差,不利于新手们接受,更重要的是,这种方法的通用性很差,因为要使用这种方法的前提是,使用者的电脑上必须安装有Office系列软件,而不是所有的用户都安装有这套软件的。

(2)通过COM组件间接的调用Win32 API,这也是我最后采用的方法。用到的是鼎鼎大名的DynamicWrapper,这是一个老外编写的COM。此方法的优点是调用方便,使用简单,性能高效。缺点就是需要一个额外的DLL文件支持。当然这个缺陷可以通过一些文件捆绑的方式来解决,因为这个项目这是为了探究VBS木马的原理,我就不对文件捆绑进行深入的探讨了。

2.如何让程序强制以32位WScript解释器解释
因为使用了DynamicWrapper,而这个库是不支持64位的,所以我们的程序必须要使用32位解释器来执行。问题是用户的电脑默认的Vbs文件打开方式为64位WScript解释器,如何在一个脚本内实现开启32位解释器执行的功能呢?我原创了一个方法:修改注册表中VbsFile的默认打开方式,然后在脚本内用Explorer.exe重新打开自身。这个方法的第一步主要是做了两件事,一是记录,脚本内通过判断注册表中Vbs默认的打开方式来判断当前的解释器是64位还是32位;二是让以后的执行都使用32位解释器,一劳永逸。这个方法的第二步其实有很多可以方法,比如使用调用CMD等,但是调用CMD会弹出一个黑框让用户察觉,所以这里使用了直接用Explorer.exe打开脚本,这一方法同样可以有效验证是否上一步对注册表的更改已经奏效。

3.如何让VBS程序在开机自启动
这个部分的难点主要在于对改写注册表的函数RegWrite不熟悉。 这个函数可以传入三个参数,第一个参数为key,第二个参数为键值,第三个位置为键值的类型。
我们知道在Windows注册表中有上百个键值可以起到开机自启动的效果,这其中我使用了"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"这个键值。一定要注意最后的Run后面要有"\",否则会将值写入Run的默认值,而非正确的位置。

vbshorse's People

Contributors

zichuanwang avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.