发布于2022年11月4日3年前 自己动手编写远控工具及检测思路 PS:本文仅用于技能讨论与交流,禁止用于任何不合法用途,违者后果自负在学习进犯浸透的过程中,不免会接触远控东西。远控东西一般包含服务端和客户端,服务端运转在进犯者的VPS主机上,客户端运转在被进犯机器上。服务端向客户端发送指令,客户端履行指令并将成果回传给服务端,从而达到经过网络长途操控被进犯主机的作用。现有的远控东西很多,从大名鼎鼎的冰河到CHAOS。但是直接运用现有的远控东西,一方面会忧虑东西被人加入了后门在运转的过程中自己反而成了被操控方,另一方面只会运用东西也会沦为“脚本小子”而不知道其背面的原理。本文具体介绍了一款最小功用集的远控东西的完结细节,依照过程动手完结,不只能够关于远控东西的背面思路有了更深的领会,也能够稳固自己在多线程、网络编程等方面的常识。1. 总体结构图1.总体结构同一般的远控东西一致,咱们要完结的这款东西也是包含服务端和客户端。服务端运转在VPS主机上,监听443端口。因为443为HTTPS协议端口,这样被进犯主机上即便监控到存在外联443端口的流量,也不太简单引起注重。所以在模拟进犯者的过程中,能够选用一些常用端口作为服务端的监听端口。服务端和客户端运用TCP协议进行通讯,运用多线程服务端处理多个客户端一同在线的情况。客户端捕获反常,当与服务端的通讯衔接断开触发反常时,延时5秒后从头发送衔接请求。这样即便服务端呈现了中途退出的情况,从头运转后客户端也能够从头上线。2. 完结细节2.1 服务端服务端首要做两件事情:运用socket监听443端口,运用独立的线程完结与客户端的通讯,关于指定客户端下发指令并打印指令履行成果在主线程中死循环监听进犯指令输入(如snapshot关于被进犯机进行截屏、cmd在被进犯机上履行体系指令)图2.服务端记载客户端衔接流程图2便是服务端记载客户端衔接的流程。客户端发来的第一条音讯会是“HELO,客户端IP”,服务端会解析第一条音讯,并以客户端IP为key将客户端的socket保存到字典里。后续,当需要与指定的客户端进行通讯时,直接从字典里依据IP拿到对应客户端的socket进行音讯的发送和接纳即可。图3.服务端处理指令流程图3则是服务端处理指令的流程。现在服务端接纳的指令如下:ls: 打印当时悉数客户端IPsnapshot:关于指定客户端地点机器进行截屏。示例:snapshot ${client_ip}clipboard:获取客户端地点机器的剪贴板内容。示例:clipboard ${client_ip}cmd:在指定客户端地点机器履行体系指令。示例: cmd ${client_ip} ${command}showdriver:展示客户端地点机器的悉数盘符。示例:showdriver ${client_ip}getfilelist:获取客户端地点机器指定路径下的文件列表。示例:getfilelist ${client_ip} ${path}getfile:获取客户端地点机器指定文件。示例:getfile ${client_ip} ${filepath}当服务端接纳ls指令时,直接将记载有客户端socket字典的key列表打印出来即可。当收到的是其他指令时,因为指令的第二个参数是客户端IP,那么依据IP得到对应的客户端socket,运用socket将指令发送给客户端,并打印客户端socket的回来成果即可。2.2 客户端客户端自动衔接服务端的443端口。在初次衔接上时,自动发送一条“HELO,客户端IP”音讯标记自己。后续客户端则是继续循环等待服务端发送过来的指令,并依据指令实在的在被进犯进步行截图、获取文件列表等操作,并将成果回传给服务端。客户端会捕获反常,当socket呈现反常后,等待5秒测验重连。图4.客户端处理指令流程3. 重点问题解决3.1耐久化一个远控东西除了支撑服务端下发指令,客户端履行指令并回传成果的功用外,还需要能够关于自己进行耐久化。所谓耐久化,即保证客户端进程被杀死或许被进犯主机关机后,也能够在被进犯主机再次开机时发动。进行耐久化有如下几种办法:写注册表将履行文件仿制到发动目录将自己注入其他体系进程这几种办法各有优缺点,将履行文件仿制到发动目录一般需要管理员权限,在履行客户端进程的用户没有管理员权限时,仿制会导致“Permission denied”错误。而写注册表和注入进程的行为,通常会被杀软作为高危项检测到。因为咱们的这款远控东西仅仅学习运用,所以不考虑绕过杀软的办法,运用写注册表的方法将自己设置为开机自发动:图5.写注册表开机自发动首要的过程就是首要将自己仿制到暂时目录,而且改名为svhost.exe(与体系进程svchost.exe一字之差),一同将自己写入注册表的开机自发动项。3.2 TCP Socket通讯粘包问题因为咱们完结服务端和客户端的通讯是用的TCP协议,而TCP协议简单呈现粘包问题,导致服务端接纳到的客户端回传的图片或许文件是损坏状态,无法正确翻开。所谓粘包即客户端发送给服务端的多个包被粘在了一同,它发生的首要原因在于接纳到数据包放在了缓冲区里,假如缓冲区包写入的速度大于服务端从缓冲区取的速度,服务端就会取到首尾相连的多个包。为了让服务端能够正确的区分接纳到的数据,解决粘包问题,咱们需要将传输的数据进行格式化。咱们定义:一条音讯的头部4个字节为音讯内容长度头部后边再跟音讯内容图6.发送格式化的音讯当服务端接纳到数据时,先解析头部4个字节得到音讯的长度,再依据这个长度得到音讯正文。图7.处理格式化的音讯3.3 客户端打包为exe咱们的这款远控东西运用的python言语进行开发,而客户端首要运转在windows主机上。因为windows主机默认并没有装置python环境,所以需要将客户端打包为exe使得它能够直接在windows主机进步行运转。将python打包为exe首要运用pyInstaller这款神器,运用-F参数生成单个履行文件,运用-w参数表示运转时去掉操控台窗口。打包完结后,dist目录下即会呈现生成的exe文件。图8.将客户端打包成exe4. 作用演示服务端运转时,当客户端上线时,会打印客户端的IP。图9.服务端运转作用运用ls指令,能够打印当时现已上线的悉数客户端IP:图10.打印悉数客户端能够关于客户端地点机器进行截屏:图11.关于客户端地点机器进行截屏5. 源码下载地址https://github.com/tammypi/remote_control_tool着重:请注意,本源码仅供学习运用,请勿用作不合法用途。6. 检测思路在关于这类远控东西进行检测时,重要的特征有以下两点:注册表写入动作、仿制本身动作尽管与常用端口进行通讯,但是数据包的特征却显着并非为对应协议的特征
创建帐户或登录后发表意见