开篇:本教程以研究技术为目的,请勿用于非法用途,否则后果自负-----------
1、远控简单说明
软件分为客户端和服务端(即主控端和被控端),设计采用gh0st设计思想。
2、原理介绍
远控软件是一款基于C/S架构的远程管理软件。所谓远程管理,就是我在我的电脑上通过一些手段,可以操作其他电脑。什么是C/S架构,C表示Client,S表示Server,也就是客户端和服务端的意思。可以这样理解C/S,现在有两台电脑,一台是Server,一台是Client,server电脑就会开启一个端口,并一直监听这个端口中的信息。client来连接这个端口,连接成功后,两台机器就能互相发送信息了。(具体的原理建议大家去看socket通信)
gh0st用的是C/S架构中的反向连接。我用主控端和被控端来称呼黑客的电脑和肉鸡的电脑。反向连接的意思就是我主控端作为server,被控端作为client,主控端监听一个固定的端口,并有一个固定的IP。然后被控端来连接这个IP的该端口,这就是所谓的上线。
在实际情况中,黑客的电脑并不是都有固定的IP,我在我们寝室使用的是一个路由器,于是我的IP只是内网IP,192.168.x.x。而且,如果我换一个地方上网,IP也会变。这样我的被控端是找不到我的IP的。所以很多远控对待该问题,有两个解决方案:
1.DNS上线
其实就是提供了DNS服务。我们把自己的IP绑定到DN,服务器上,被控端通过对DNS的解析,找到主控端的IP,再连接。下次换地方上网了,只需要更改自己绑定到DNS上的IP即可。(可以买个域名玩玩)
2.FTP(HTTP)上线
我们把自己的IP写入一个文本文件1.txt,放在ftp(http)服务器上,比如ftp://leavesongs.com/1.txt。被控端去下载该txt,在其中找到主控端的IP。再连接。
3、数据传输
在传输数据方面,主控端使用IOCP模型(完成端口模型),关于该模型请google。在主控端中,由CIOCPServer类实现。在被控端中,数据传输使用CClientSocket类实现。数据传输是远控的核心,所以这两个类也就成了gh0st的核心类。当然,在传输过程中,gh0st使用zlib进行压缩,减小数据包的大小。
在被控端管理方面,gh0st使用了一个很好的方案。先做了一个CManager类,作为所有管理功能的基类,其他的比如系统管理类CSystenManager就继承了CManager。大大地增加了代码的重用性。
在主控端方面,有这样一个回调函数NotifyProc,所有被控端发来的消息,都会经过此函数,在该函数中使用switch语句,处理各个消息。使得代码看起来井井有条。
在稳定性方面,被控端宿主为svchost以系统服务启动,并有守护线程,用心跳包机制防止以外掉线。