最近没怎么出去玩一直宅在家里搞这个,学习了老狼的教程,照着做了一个,功能差不多都实现了,做这个仅仅是对编程,对安全领域感兴趣做做实验而已。
采用了gh0st开源远控内核,它是一款基于C/S架构的远程管理软件。服务端通过反向连接主控端,连接成功后主控端会提示服务端上线,然后主控端和服务端就能互相传输信息了。并可进行终端管理,进程处理,窗口管理,文件管理,远程桌面,获取视频语音等操作,服务端设置了心跳包机制防止意外掉线。
gh0st开源远控内核原理分析:
主控端传输数据使用CIOCPServer类实现。被控端数据传输使用CClientSocket类实现,传输数据之前使用zlib进行压缩,减小数据包的大小,数据传输是远控的核心;
主控端有个回调函数NotifyProc,所有被控端发来的消息都会经过此函数,在该函数中使用switch语句处理各个消息。使得代码看起来井井有条,方便添加减少功能。
被控端功能管理上使用了一个不错的方案。先做一个CManager类作为所有管理功能的基类,其他的管理类比如系统管理类CSystenManager继承CManager,这样处理起来比较方便,增加了代码的重用性,大大减少了代码量;
被控端svchost以系统服务启动,并用心跳包机制防止意外掉线,具有良好的连接稳定性。
使用问题:
在局域网中,IP号通常是固定的,但在实际情况中,主控端电脑并不都是固定的IP,比如我们在公司使用同一个路由器,IP是内网IP(192.168.x.x),如果换到咖啡厅上网,IP会变成公网IP。这样服务端就找不到我的IP的。很多远控处理这个问题有两个解决方法:
1.DNS上线
花生壳、3322提供了免费的动态域名服务,也就是DNS服务。把自己的IP绑定到DNS服务器上,被控端通过对DNS的解析,找到主控端的IP连接。下次换地方上网,只需更改一下自己绑定到DNS服务器上的IP即可。
2.FTP(HTTP)上线
我们把自己的IP写入一个文本文件test.txt,放在ftp(http)服务器上,比如ftp://leavesongs.com/test.txt。被控端去下载该txt,在其中找到主控端的IP。再连接。